当前位置: 首页 > 知识库问答 >
问题:

DataTables-Python/Flask中的服务器端处理-与服务器端脚本的连接不起作用

长孙逸仙
2023-03-14

我为此挣扎了好几天。我正在尝试将Sergio Llana的服务器端解决方案应用到我现有的项目中。

Sergio的数据表服务器端处理

这是我的实现:

我的数据表服务器端处理

不同的是,我的解决方案从MySQL数据库抓取数据,而不是本地文件。我认为我很接近使它工作,从数据库的数据显示在表中正确。当我关闭服务器端选项,排序和搜索工作正常,但当我打开它,每次我点击列,搜索或其他任何东西,我得到的只是"处理..."烧瓶调试模式开启。浏览器的开发工具或烧瓶开发服务器没有错误。

我的JSON XHR(响应):

{
  "data": [
    {
      "cola": "Hello", 
      "colb": "How is it going", 
      "colc": 1, 
      "cold": 4
    }, 
    {
      "cola": "Sample text", 
      "colb": "Another sample", 
      "colc": 2, 
      "cold": 9
    }, 
    {
      "cola": "Kurnik hosi", 
      "colb": "Guten tag", 
      "colc": 3, 
      "cold": 3
    }, 
    {
      "cola": "Achiles", 
      "colb": "Patus", 
      "colc": 4, 
      "cold": 1
    }, 
    {
      "cola": "Kim", 
      "colb": "Kiduk", 
      "colc": 5, 
      "cold": 8
    }, 
    {
      "cola": "Pastina", 
      "colb": "Zavada", 
      "colc": 6, 
      "cold": 9
    }, 
    {
      "cola": "Dolna", 
      "colb": "Marikova", 
      "colc": 7, 
      "cold": 9
    }
  ], 
  "draw": 1, 
  "recordsFiltered": 10, 
  "recordsTotal": 7
}

我认为问题在于从浏览器发送的请求,但这是我的第一个Python/Flask项目,所以我不确定。谢谢你的建议。

使用的技术:OS Debian 9, DB MariaDB 10, Flask-SQLAlChemy

共有1个答案

訾高飞
2023-03-14

与原始文件相比,我有点不清楚您到底更改了什么,所以我继续尝试向Sergio的原始项目添加SQLAlchemy支持。

__init__. py更改:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

flask_app = Flask(__name__)
db = SQLAlchemy(flask_app)

from app.mod_tables.models import TableBuilder, SomeTable, add_some_random_db_entries
db.create_all()
add_some_random_db_entries()
table_builder = TableBuilder()

模型。py更改:

from app.mod_tables.serverside.serverside_table import ServerSideTable
from app.mod_tables.serverside import table_schemas
from app import db

DATA_SAMPLE = [
    {'A': 'Hello!', 'B': 'How is it going?', 'C': 3, 'D': 4},
    {'A': 'These are sample texts', 'B': 0, 'C': 5, 'D': 6},
    {'A': 'Mmmm', 'B': 'I do not know what to say', 'C': 7, 'D': 16},
    {'A': 'Is it enough?', 'B': 'Okay', 'C': 8, 'D': 9},
    {'A': 'Just one more', 'B': '...', 'C': 10, 'D': 11},
    {'A': 'Thanks!', 'B': 'Goodbye.', 'C': 12, 'D': 13}
]

class SomeTable(db.Model):
    __tablename__ = 'some_table'
    cola = db.Column('A', db.String(2))
    colb = db.Column('B', db.String(2))
    colc = db.Column('C', db.Integer, primary_key=True)
    cold = db.Column('D', db.Integer)

    def __init__(self, cola, colb, colc, cold):
        self.cola = cola
        self.colb = colb
        self.colc = colc
        self.cold = cold

    @property
    def serialize(self):
        return {
             'A': self.cola,
             'B': self.colb,
             'C': self.colc,
             'D': self.cold
        }


def add_some_random_db_entries():
    letters = 'arstarstarstarstaars'
    for i in range(10):
        item = SomeTable(letters[i], letters[i + 1: i + 3], i, i + 1)
        db.session.add(item)
    db.session.commit()


def make_data_sample_from_db():
    newlist = []
    for row in SomeTable.query.all():
        newlist.append(row.serialize)
    return newlist


class TableBuilder(object):

    def collect_data_clientside(self):
        return {'data': DATA_SAMPLE}

    def collect_data_serverside(self, request):
        columns = table_schemas.SERVERSIDE_TABLE_COLUMNS
        data = make_data_sample_from_db()
        return ServerSideTable(request, data, columns).output_result()

您应该能够只添加数据库URL,并且从那里开始它应该同样工作。

然而,这种获取过滤结果的方法效率很低,尤其是对于大型数据库。它只适用于小型数据库,因为您必须查询整个表,并使用字典对其进行筛选。

我可能会签出flask admin。它使用SQLAlchemy的过滤支持在包中构建了很多过滤功能,这意味着它比这种方法快得多。

这是修改后的github回购。

 类似资料:
  • 我正在尝试使用jQuery DataTables AJAX服务器端脚本。。。 我需要将wp_usermeta表与wp_users表连接起来。。。 如何使用示例服务器端处理脚本加入wp_usermeta表?脚本可以在https://datatables.net/examples/server_side/simple.html找到 相关代码是

  • 问题内容: 问题: 使用ASP.NET WebForms的jQuery DataTables服务器端处理。 解: 达林·迪米特洛夫(Darin Dimitrov)使用一个分页和排序但不进行任何搜索的示例回答了这个问题。这是我对他的作品进行的“基本”修改,以使他的示例可以进行搜索: 问题答案: 我写了一个简单的例子来说明这个想法。 首先,编写用于在服务器端处理数据的通用处理程序(但这可以是网页,We

  • SRS不支持服务器端脚本,所谓服务器端脚本,指的是服务器可以加载外部脚本文件,解释并执行。 支持服务器脚本的服务器有FMS,语言是actionscript1.0;nginx支持的是lua。 SRS不支持服务器脚本的原因有: 不Simple:违反了SRS(Simple RTMP Server)的第一个S,支持扩展脚本,出错的几率也扩展了。 实际用处很小:我在国内知名的CDN公司工作时,所在部门就是用

  • C:\用户\跨度t 2\下载\apache-cassandra-3.11.5\bin 启动 Cassandra 服务器 C:\用户\跨度t 2\下载\apache-cassandra-3.11.5\bin 连接错误:('无法连接到任何服务器',{'127.0.0.1':错误(10061,"尝试连接到[('127.0.0.1',9042)]。最后一个错误:无法进行连接,因为目标机器主动拒绝它")})

  • 在我的文件中,我有... 我知道文件正在正确加载,因为服务器在端口8086上运行。 在应用程序中,我有一个 当我调用endpoint时,请求永远不会超时,它只是无限期地挂起。 我错过了什么吗? 注意:我还被告知,Tomcat使用这个字段是以分钟为单位,而不是以毫秒为单位(这在我看来是相当不寻常的选择)。我试着将它设置为< code > server . connection-time out =

  • 我有一个示例Spring启动应用程序来运行图形QL服务器,具有作为客户端,我的pom有以下依赖项: 当我尝试从客户端连接时,出现以下错误: 狩猎决议好心建议。 我还有几个问题: 我应该使用SimpleGraphQLHttpServlet将请求路由到endpoint吗 我正在React UI上使用apollo client,那么它是强制使用apollo server还是spring boot可以工作