【发布时间】:2019-12-06 18:31:40
【问题描述】:
我创建了一个 Flask 应用程序:
- 从不同的事件源读取事件;
- 将这些事件保存到数据库;和
- 允许用户使用 DataTables 1.10.20 搜索这些事件。
我正在尝试:
- 每当用户尝试搜索表时,读取 DataTables 通过 AJAX 请求传递给 Flask 后端的参数;和
- 将这些参数翻译成字典,以便在执行服务器端过滤时使用。
这是我在 DataTables 中创建的表的代码:
$(document).ready(function() {
events_table_template = {
"scrollX": true,
"pageLength": 10,
"processing": true,
"serverSide": true,
"ajax": {
"url": "/ajax/events",
"type": "POST",
"dataType": "json",
"dataSrc": "data",
"contentType": "application/json"
},
"columns": [
{"data": "event_id"},
{"data": "event_type"},
{"data": "event_timestamp"},
{"data": "event_name"},
]
};
var table = $('#events-table').DataTable(events_table_template);
});
我已尝试在 DataTables 配置中显式返回 JSON:
$(document).ready(function() {
events_table_template = {
...
"ajax": {
...
"data": function(args){
return {"args": JSON.stringify(args)};
}
};
var table = $('#events-table').DataTable(events_table_template);
});
这是 Flask 服务器上的 AJAX 端点:
from mycode import EventService
from flask import Blueprint
import flask
blueprint = Blueprint('events-ajax', __name__, url_prefix='/ajax/')
@blueprint.route('/events/', methods=["POST"])
def get_events():
print("Request data", flask.request.data)
print("Request form", flask.request.form)
api = EventService()
events = api.get_events_via_database()
rows = []
for event in api.get_events_via_database():
rows.append({
'event_id': event.event_id,
'event_type': event.type,
'event_timestamp': event.timestamp,
'event_name': event.name,
})
response = {
'data': rows,
'recordsTotal': len(events),
'recordsFiltered': len(events),
'draw': 1,
}
return flask.jsonify(response)
我注意到了:
-
flask.request.data返回一堆 URL 编码的文本:Request data b'draw=1&columns%5B0%5D%5Bdata%5D=event_id&columns%5B0%5D%5Bname%5D=&columns%5B0%5D%5Bsearchable%5D=true&columns%5B0%5D%5Borderable%5D=true&columns%5B0%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B0%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B1%5D%5Bdata%5D=host_id&columns%5B1%5D%5B... -
flask.request.form返回一个ImmutableMultiDict对象:ImmutableMultiDict([])
我已经尝试过:
-
使用这些函数读取 AJAX 请求的内容:
flask.request.dataflask.request.formflask.request.jsonflask.request.get_json(force=True)
将数据表中的
content-type从application/json更改为application/json; charset=utf-8
如何将 AJAX 请求读取为 JSON?
【问题讨论】:
标签: python jquery json ajax flask