Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 16, 2017 18:08:36

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Django Rest

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

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



Отредактировано FishHook (Ноя. 16, 2017 18:10:37)

Офлайн

#2 Ноя. 17, 2017 08:42:57

dmis18
Зарегистрирован: 2017-11-15
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Django Rest

FishHook
HTTP, JSON, API

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

Но я все равно не понимаю как взаимодействовать далее?



Потомственный системный администратор.
Очное и заочное (по IP-адресу) лечение компьютеров.
Гадание по портам (COM, LPT, USB).
Верну утраченную ОС, сниму вирусную порчу и венец безИнтернетия.
Снимаю с программ сглаз правообладателей, выполню отворот RIAA, поиск потерянных файлов по имиджу жесткого диска.

Обращаться в ПМ.

Отредактировано dmis18 (Ноя. 17, 2017 13:38:00)

Офлайн

#3 Ноя. 17, 2017 13:36:43

dmis18
Зарегистрирован: 2017-11-15
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Django Rest

Вопрос решил криво

 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, но мне не нравится такой вариант, жду помощи!



Потомственный системный администратор.
Очное и заочное (по IP-адресу) лечение компьютеров.
Гадание по портам (COM, LPT, USB).
Верну утраченную ОС, сниму вирусную порчу и венец безИнтернетия.
Снимаю с программ сглаз правообладателей, выполню отворот RIAA, поиск потерянных файлов по имиджу жесткого диска.

Обращаться в ПМ.

Офлайн

#4 Ноя. 17, 2017 17:24:52

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Django Rest

dmis18
Чем вас не устраивает просто строка, полученная как json.dumps(your_data)
?



Офлайн

#5 Ноя. 19, 2017 17:45:58

dmis18
Зарегистрирован: 2017-11-15
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Django Rest

Ну я не совсем понимаю как к ней обратиться в ExtJs?



Потомственный системный администратор.
Очное и заочное (по IP-адресу) лечение компьютеров.
Гадание по портам (COM, LPT, USB).
Верну утраченную ОС, сниму вирусную порчу и венец безИнтернетия.
Снимаю с программ сглаз правообладателей, выполню отворот RIAA, поиск потерянных файлов по имиджу жесткого диска.

Обращаться в ПМ.

Отредактировано dmis18 (Ноя. 19, 2017 17:46:11)

Офлайн

#6 Ноя. 23, 2017 07:57:13

dmis18
Зарегистрирован: 2017-11-15
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Django Rest

Итак, хочу поделиться с Вами опытом, дальше попробую описать как я общался с 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();
                }

На этом все, спасибо за уделенную минутку, хорошо если кому то помог.



Потомственный системный администратор.
Очное и заочное (по IP-адресу) лечение компьютеров.
Гадание по портам (COM, LPT, USB).
Верну утраченную ОС, сниму вирусную порчу и венец безИнтернетия.
Снимаю с программ сглаз правообладателей, выполню отворот RIAA, поиск потерянных файлов по имиджу жесткого диска.

Обращаться в ПМ.

Отредактировано dmis18 (Ноя. 23, 2017 08:49:09)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version