Форум сайта python.su
dmis18
Это очень хорошо, что вы поняли, поэтому постараюсь объяснить.
Во-первых, веб - это всегда клиент-серверное приложение, то есть некоторая его часть находится на клиенте (на машине пользователя), а некоторая часть на сервере. Клиент и сервер взаимодействуют по сети по некоторому протоколу. Вам надо понимать протокол HTTP. Если забыть про web-сокеты, такое соединение всегда одностороннее, т.е. клиент всегда спрашивает, а сервер отвечает. Один запрос - один ответ. Сейчас есть две так сказать “школы”: классическая и SPA (ExtJs это как раз оно). В классическом варианте браузер отправляет серверу запрос, и в ответ получает HTML страницу, которую и отображает на экране вместо старой страницы. Такое взаимодействие обычно происходит с помощью специального элемента HTML <form>. Другой вариант, более современный, предполагает, что страница не обновляется каждый раз при запросе пользователя, а обновляются только кусочки страницы на основании данных, пришедших с сервера (обычно это JSON реже XML). Для этого обязателен JavaScript и технология Ajax. Сервер и клиент в такой схеме связаны с помощью API, и обычно эти API реализуются в рамках концепции REST.
Вот то что жирным выделено, это надо знать как минимум.
Отредактировано FishHook (Ноя. 16, 2017 18:10:37)
Офлайн
FishHook
HTTP, JSON, API
Отредактировано dmis18 (Ноя. 17, 2017 13:38:00)
Офлайн
Вопрос решил криво
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))
Офлайн
dmis18
Чем вас не устраивает просто строка, полученная как json.dumps(your_data)
?
Офлайн
Ну я не совсем понимаю как к ней обратиться в ExtJs?
Отредактировано dmis18 (Ноя. 19, 2017 17:46:11)
Офлайн
Итак, хочу поделиться с Вами опытом, дальше попробую описать как я общался с Django, через ExtJS фрэймворк, скорее всего для кого то это очевидные вещи, но для меня это в новизну по этому обо всем по порядку.
Начну с того, что все запросы должны выполняться на прямую к базе не используя модель! (что важно). Соответственно способ обращения через django REST framework сразу отпал. У нас есть ссылка в urls к примеру описали ее так:
urlpatterns = [ url(r'^takequery', views.query, name='zapros') ]
@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')
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(); }
Отредактировано dmis18 (Ноя. 23, 2017 08:49:09)
Офлайн