gpt4 book ai didi

python - flask + 数据表 : how do you read the AJAX request that DataTables sends as JSON?

转载 作者:行者123 更新时间:2023-12-04 10:55:42 26 4
gpt4 key购买 nike

我创建了一个 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.data
    • flask.request.form
    • flask.request.json
    • flask.request.get_json(force=True)
  • 将 DataTables 方面的 content-typeapplication/json 更改为 application/json; charset=utf-8

如何将 AJAX 请求读取为 JSON?

最佳答案

  • "ajax" 配置 block 中删除"contentType": "application/json";和
  • 使用 flask.request.form 读取 AJAX 请求中存在的参数映射。

数据表:

$(document).ready(function() {
events_table_template = {
"scrollX": true,
"pageLength": 10,
"processing": true,
"serverSide": true,
"ajax": {
"url": "/ajax/events",
"type": "POST",
"dataType": "json",
"dataSrc": "data",
},
"columns": [
{"data": "event_id"},
{"data": "event_type"},
{"data": "event_timestamp"},
{"data": "event_name"},
]
};
var table = $('#events-table').DataTable(events_table_template);
});

flask :

@blueprint.route('/events/', methods=["POST"])
def get_events():
parameters = dict(flask.request.form)

关于python - flask + 数据表 : how do you read the AJAX request that DataTables sends as JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59218529/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com