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