Найти - Пользователи
Полная версия: Django Rest
Начало » Django » Django Rest
1 2 3
FishHook
dmis18
Это очень хорошо, что вы поняли, поэтому постараюсь объяснить.
Во-первых, веб - это всегда клиент-серверное приложение, то есть некоторая его часть находится на клиенте (на машине пользователя), а некоторая часть на сервере. Клиент и сервер взаимодействуют по сети по некоторому протоколу. Вам надо понимать протокол HTTP. Если забыть про web-сокеты, такое соединение всегда одностороннее, т.е. клиент всегда спрашивает, а сервер отвечает. Один запрос - один ответ. Сейчас есть две так сказать “школы”: классическая и SPA (ExtJs это как раз оно). В классическом варианте браузер отправляет серверу запрос, и в ответ получает HTML страницу, которую и отображает на экране вместо старой страницы. Такое взаимодействие обычно происходит с помощью специального элемента HTML <form>. Другой вариант, более современный, предполагает, что страница не обновляется каждый раз при запросе пользователя, а обновляются только кусочки страницы на основании данных, пришедших с сервера (обычно это JSON реже XML). Для этого обязателен JavaScript и технология Ajax. Сервер и клиент в такой схеме связаны с помощью API, и обычно эти API реализуются в рамках концепции REST.

Вот то что жирным выделено, это надо знать как минимум.
dmis18
FishHook
HTTP, JSON, API

Почитал, насколько я понял мы имеем красивый формат json в который мне и необходимо преобразовать полученные данные из запроса, а после сериализовать и направить через рест в мой ExtJS?

Но я все равно не понимаю как взаимодействовать далее?
dmis18
Вопрос решил криво
 def c_b():
      db = cx_Oracle.connect('FORTEST', 'FORTEST', '12.12.21.121:1351/IOSSDB')
      cursor = db.cursor()
      cursor.execute("SELECT DISTINCT colum FROM table_name")
      rows = cursor.fetchall()
      objects_list = []
      for colum in rows:
        d = collections.OrderedDict()
        d['BSC'] = colum
        objects_list.append(d)
      json_data = json.dumps(objects_list)
      with io.open('data.json', 'w', encoding='utf-8') as fh:
       fh.write(unicode(json_data))
Все полученные данные с запроса, записываю в json фаил и уже из него считываю в ExtJS, но мне не нравится такой вариант, жду помощи!
FishHook
dmis18
Чем вас не устраивает просто строка, полученная как json.dumps(your_data)
?
dmis18
Ну я не совсем понимаю как к ней обратиться в ExtJs?
dmis18
Итак, хочу поделиться с Вами опытом, дальше попробую описать как я общался с Django, через ExtJS фрэймворк, скорее всего для кого то это очевидные вещи, но для меня это в новизну по этому обо всем по порядку.

Начну с того, что все запросы должны выполняться на прямую к базе не используя модель! (что важно). Соответственно способ обращения через django REST framework сразу отпал. У нас есть ссылка в urls к примеру описали ее так:
 urlpatterns = [
     url(r'^takequery', views.query, name='zapros')
]

и описали функцию в views.py таким образом(сразу скажу, что скорее всего можно и упростить код, но пока только так)
 @ensure_csrf_cookie
def query(request):
    if request.POST:
     #получаем запрос в переменную inquery
     inquery = (request.POST['form'])
     #коннект к базе
     db = cx_Oracle.connect('логин к базе', 'пароль', 'адрес:порт/база')
     cursor = db.cursor()
     #выполняем запрос
     cursor.execute(inquery)
     #получаем колонки в список
     columns = [i[0] for i in cursor.description]
     rows = cursor.fetchall()
     objects_list = []
     #строим json в зависимости от количества полученных колонок
     for row in rows:
        d = collections.OrderedDict()
        for i in xrange(len(columns)):
           d[columns[i]] = row[i]
        objects_list.append(d)
     #возвращаем json в ответе
     return JsonResponse(objects_list, safe=False)
    else:
        return render(request, 'error.html')

Теперь не посредственно перейдем на фронт ExtJS
Здесь у меня есть окно в котором я ввожу свой запрос и есть кнопка которая выполняет следующее
 handler: function () {
                    //принимаем значение с поля 'query_clear'
                    var form = Ext.getCmp('query_clear').getValue();
                    var token = Ext.util.Cookies.get('csrftoken');
                    Ext.Ajax.request({
                        method: 'POST',
                       //наш url прописанный в Django
                        url: 'takequery',
                        //параметры, которые мы отправим в нашем POST запросе
                        params: {
                            //без csrf отправить запрос не выйдет
                            csrfmiddlewaretoken: token,
                            //наш запрос отправляется по ключу form
                            form: form},
                        //если выполнено - выполняем функцию
                        success: function (response, options) {
                           //принимаем данные в json формате, полученные с функции query
                           var data = Ext.decode(response.responseText);
                           //создаем колонки в таблице по ключам из json файла
                           win_grid_pan.reconfigure(createColumns(data));
                           //подгружаем хранилище
                           Ext.StoreManager.lookup('customerNameStore').loadData(data);
                           //выводим таблицу
                           win_grid.show();
                           },
                        failure: function(response, options){
                              alert("Ошибка: неправильно указан столбец таблицы");
                                   }
            });
                    window.hide();
                }

На этом все, спасибо за уделенную минутку, хорошо если кому то помог.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB