gpt4 book ai didi

python - DataTables 服务器端处理 - 回显 draw() 参数 (Python/Flask)

转载 作者:行者123 更新时间:2023-12-01 01:38:17 27 4
gpt4 key购买 nike

我正在使用 DataTables 显示来自 MySQL 的数据。它工作得很好,直到我被迫使用服务器端处理(100k 行)。现在,当我在浏览器中加载表格时,它工作正常,直到我使用 DataTables 的某些功能(搜索、列排序......)。当我点击例如列名称,我得到的只是“正在处理...”消息。

我注意到,每次点击表格时,XMLHttpRequest 中的绘制都会增加 1,但我的代码中的“绘制”仍设置为 1。

我在python/flask代码中对draw、recordsTotal、recordsFiltered的定义(缩短):

tick = table.query.all()
rowsCount = table1.query.count()

x = {'draw':1,'recordsTotal':rowsCount,'recordsFiltered':10}
y = dict(data=[i.serialize for i in tick])
z = y.copy()
z.update(x)

@app.route("/api/result")
def result_json():
return jsonify(z)

@app.route('/data')
def get_data():
return render_template('data.html')

我的 JSON:

{
"data": [
{
"first": "Anton",
"id": 1,
"last": "Spelec"
},
{
"first": "Rosamunde",
"id": 2,
"last": "Pilcher"
},
{
"first": "Vlasta",
"id": 3,
"last": "Burian"
},
{
"first": "Anton",
"id": 4,
"last": "Bernolak"
},
{
"first": "Willy",
"id": 5,
"last": "Wonka"
}
],
"draw": 1,
"recordsFiltered": 5,
"recordsTotal": 5
}

我的带有 DataTables 初始化的 html 页面:

<script>

$(document).ready(function() {
$('#table_id').DataTable( {
"processing": true,
"serverSide": true,
"paging": true,
"pageLength": 10,
"lengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]],
"ajax": {
url: 'api/result',
},
columns: [
{ "data": "id" },
{ "data": "first" },
{ "data": "last" }
]
} );
} );

</script>
<table id="table_id">
<thead>
<tr>
<th>id</th>
<th>first</th>
<th>last</th>
</tr>
</thead>
</table>

XHR 在这里:

Request URL: http://10.10.10.12/api/result?draw=7&columns%5B0%5D%5Bdata%5D=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=first&columns%5B1%5D%5Bname%5D=&columns%5B1%5D%5Bsearchable%5D=true&columns%5B1%5D%5Borderable%5D=true&columns%5B1%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B1%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B2%5D%5Bdata%5D=last&columns%5B2%5D%5Bname%5D=&columns%5B2%5D%5Bsearchable%5D=true&columns%5B2%5D%5Borderable%5D=true&columns%5B2%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B2%5D%5Bsearch%5D%5Bregex%5D=false&order%5B0%5D%5Bcolumn%5D=0&order%5B0%5D%5Bdir%5D=asc&start=0&length=10&search%5Bvalue%5D=asdf&search%5Bregex%5D=false&_=1536075500781

DataTables documentation建议将此参数转换为整数并将其发送回。我发现类似的question关于绘制参数,它应该是相同的,但不幸的是我无法使其工作。我认为,将参数转换为整数不会有问题,但我不知道下一步该怎么处理它,或者如何将提出的绘制参数推送到我的 JSON。

谢谢。

最佳答案

如果 DataTables 将draw的新值发送到您的服务器 - 只需读取该值并将其发回即可:

@app.route("/api/result")
def result_json():
return jsonify(z)

可能会变成(如果 DataTables 以其他方式发送值,请调整代码):

@app.route("/api/result")
def result_json():
z.update({'draw': request.form.get('draw')})
return jsonify(z)

我并不是说您的代码似乎没有执行任何过滤或搜索操作,但至少它为您提供了一个构建的起点。

更新

从您粘贴的 XHR 代码来看 - 看起来 DataTables 正在通过查询字符串传递值 - 所以 request.args.get('draw') 将是访问该 绘制数据值。

关于python - DataTables 服务器端处理 - 回显 draw() 参数 (Python/Flask),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52166475/

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