【问题标题】:Server side processing with datatables and flask使用数据表和烧瓶进行服务器端处理
【发布时间】:2017-07-16 16:04:22
【问题描述】:

我正在尝试在我的 Flask 应用程序上使用来自 sqlite 的数据来实现服务器端处理。我是新手,所以我不知道出了什么问题。到目前为止,我已经做到了:

HTML

<table id="myTable" class="table table-striped" style="width:100%" >
    <thead>  
        <tr>
            <th>Time</th>
            <th>Mean Current</th>
            <th>Vapour Pressure</th>
            <th>Mean Voltage</th>
            <th>Temperature</th>
            <th>Humidity</th>
            <th>Bar Pressure</th>
            <th>RPM</th>
            <th>Wind Sector</th>
            <th>Wind Speed</th>
            <th>Air Density</th>
            <th>DC Voltage</th>
            <th>Power Sector</th>
            <th>Furling Angle</th>
            <th>Yaw angle</th>
        </tr>
    </thead> 
</table>  

Javascript

$(document).ready(function() {
    $('#myTable').DataTable( {
        "processing": true,
        "serverSide": true,
        "ajax": "/page_test"
    } );
});

查看功能

@app.route('/page_test')
def page_test():
    data = json.dumps(meas[2])
    print data
    return data

meas[2] 是我的字典:

[dict((c.description[i][0], value) \
        for i, value in enumerate(row)) for row in c.fetchall()]

在“打印数据”中,所有内容都打印得很好,如下所示:

{"MeanCurrent": 0.05933, "Temperature": 15.095, "YawAngle": 0.0, "MeanVoltage": 0.67367, "VoltageDC": 3.18309, "PowerSec": 0.06923, "FurlingAngle": -0.2266828184, "WindSpeed": 1.884, "VapourPressure": 1649.25948, "Humidity": 0.4266, "WindSector": 0, "AirDensity": 1.23051, "BarPressure": 1020.259, "time": "2015-04-22 20:58:28", "RPM": 0.0, "ID": 1357}

这是乘以行数。

但是,当我运行应用程序并插入查询时,表格只显示&lt;th&gt; 标记,并且在表格顶部写有 "Processing..."显示的数据。在我的烧瓶应用程序的终端,显示了一个巨大的字符串,这是一个小示例:

/page_test?draw=2&columns%5B0%5D%5Bdata%5D=0&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=1&columns%5B1%5D%5Bname%5D=&columns%5B1%5D%5Bsearchable%5

这是一个截图:

每次我单击th 标签时,都会再次出现相同的字符串。似乎我错过了一些重要的东西,但由于这是我的第一个应用程序,我无法弄清楚它是什么。任何有关修改代码的建议将不胜感激。

【问题讨论】:

  • 我也有同样的问题。你解决了吗?

标签: python json flask datatables server-side-scripting


【解决方案1】:

Server-side processing 是一项设置,要求您拥有一个数据库脚本,该脚本能够在您自己的服务器/数据库上复制 DataTables 的许多核心功能,以管理非常大的数据集。

传递给脚本的所有信息(例如,一长串信息)都是您需要用于查询数据库以返回结果以供 DataTables 呈现的输入。

如果您希望 DataTables 从您的 Flask 端点加载数据,然后在内部管理所有处理,请进行以下修改:删除 serverSide 设置并添加列配置,以便您的数据最终位于正确的位置:

Javascript:

$(document).ready(function() {
    $('#myTable').DataTable( {
        "processing": true,
        "ajax": "/page_test",
        // add column definitions to map your json to the table
        "columns": [
            {data: "time"},
            {data: "MeanCurrent"},
            ...
        ]
    } );
});

DataTable Initialization Options:如果您单击“列”按钮,它会显示每个“列”接受的各种配置,无论是可排序的、可排序的、自定义呈现等...

Python:

from flask import jsonify

@app.route('/page_test')
def page_test():
    return jsonify(meas[2])

【讨论】:

  • 如果我删除服务器端设置,它根本不会运行视图功能。因此,我将其保留为 True 并按照您的建议添加了列。同样的事情仍然存在。我认为我应该做更多的事情,比如发送每页的显示数量或类似的东西。它还显示“无法读取未定义的属性长度”。
【解决方案2】:

2 个潜在问题:

1) 确保您使用的不是精简的 jQuery 版本。 Slim jQuery 没有 ajax,所以如果你在浏览器中检查,你会看到一些错误信息,比如“h.ajax if not a function”。这将无限期地显示“处理...”。这让我难过了一阵子,因为 bootstrap 默认使用的是瘦版本的 jQuery,而我使用的是 bootstrap。

2) 无论如何,我都不是数据表方面的专家,但我正在玩弄它。要使用服务器端显示数据,数据的格式必须如下:

return_me = json.dumps({"data": [[1, 1.3478, 23.2223, ...]]})

即,当返回列名字典时,我无法让它工作......我必须专门将它称为字典字段“数据”,然后给出所有值。可能我自己在这里得到了一些不正确的东西,但这是有效的。

【讨论】:

    【解决方案3】:
    Using flask, you will get a faster response than using C#.In Server Side Processing, You can send sorted/searched/header value via form in flask. 
    

    在 Flask 中,您可以使用以下方法获取数据表值:

    Datatabledata= request.form
    

    在 SSP 中,您可以使用以下方式向烧瓶发送附加数据:

    "data":function(data){ 
    data.input="Text"
    } 
    

    【讨论】:

      猜你喜欢
      • 2018-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-06
      • 2016-01-28
      相关资源
      最近更新 更多