• Datatables插件的使用(从前台到后台完整流程)


    下载并引入Datatables插件Datatables 中文网http://datatables.club/

    1. <script src="../static/jquery/dist/jquery.min.js">script>
    2. <script src="../static/js/jquery.dataTables.min.js">script>
    3. <link rel="stylesheet" href="../static/css/dataTables.bootstrap.min.css">

    前端中使用

    1. <div class="box-body">
    2. <table class="table table-bordered table-striped table-vcenter" style="width:100%"></table>
    3. </div>
    4. <script>
    5. var columns = [
    6. {
    7. title: 'name',
    8. target: 0,
    9. data: function (item) {
    10. return item.name;
    11. }
    12. },
    13. {
    14. title: 'age',
    15. target: 1,
    16. data: function (item) {
    17. return item.age;
    18. }
    19. },
    20. ];
    21. main.initDataTables($(".table"), {
    22. "ajax": '127.0.0.1:8000/index/data'
    23. "columns": columns
    24. });
    25. });
    26. </script>

    在这里我是使用ajax向后台发送请求获取数据。columns表示每列展示的数据。前端就处理完毕,接下来处理后端请求数据即可。

    后端

    需要注意的是,后端我是在flask框架中进行编写的。可以使用datatables模块快速对数据进行处理

    安装datatables

    pip install sqlalchemy-datatables
    

    简单使用

    1. from datatables import ColumnDT, DataTables
    2. from flask import jsonify, request
    3. from .models.user import User # 模型
    4. @blueprint.route('/index/data')
    5. def index_data():
    6. columns = [
    7. ColumnDT(User.name, mData='name'),
    8. ColumnDT(User.age, mData='age'),
    9. ] # 表示每列展示的数据
    10. query = db.session.query().select_from(User).group_by(User.id) # 表示数据的来源
    11. params = request.args.to_dict() # 表示查询的参数
    12. tables = DataTables(params, query, columns) # 对数据进行处理成表格需要的
    13. return jsonify(tables.output_result()) # 将处理后的数据输出结果转为json格式并返回

     select_from方法表示需要查询的模型。group_by表示排序

    多表查询

    • 方法1 outerjoin
    1. from datatables import ColumnDT, DataTables
    2. from flask import jsonify, request
    3. from .models.user import User # 模型
    4. from .models.category import Category # 模型
    5. @blueprint.route('/index/data')
    6. def index_data():
    7. columns = [
    8. ColumnDT(User.name, mData='name'),
    9. ColumnDT(User.age, mData='age'),
    10. ColumnDT(Category.name, mData='gender'),
    11. ] # 表示每列展示的数据
    12. query = db.session.query().select_from(User)\
    13. .outerjoin(Category, Category.id == User.id).group_by(User.id) # 表示数据的来源
    14. params = request.args.to_dict() # 表示查询的参数
    15. tables = DataTables(params, query, columns) # 对数据进行处理成表格需要的
    16. return jsonify(tables.output_result()) # 将处理后的数据输出结果转为json格式并返回

    outerjoin表示连接查询。

    • 方法2 执行查询表达式
    1. from datatables import ColumnDT, DataTables
    2. from flask import jsonify, request
    3. from sqlalchemy import distinct, func
    4. from .models.user import User
    5. from .models.category import Category
    6. @blueprint.route('/index/data')
    7. def index_data():
    8. columns = [
    9. ColumnDT(User.name, mData='name'),
    10. ColumnDT(User.age, mData='age'),
    11. ColumnDT(func.group_concat(distinct(Category.query.filter_by(id=User.id)[0].name)),
    12. mData='gender'),
    13. ] # 表示每列展示的数据
    14. query = db.session.query().select_from(User).group_by(User.id) # 表示数据的来源
    15. params = request.args.to_dict() # 表示查询的参数
    16. tables = DataTables(params, query, columns) # 对数据进行处理成表格需要的
    17. return jsonify(tables.output_result()) # 将处理后的数据输出结果转为json格式并返回

    如果在查询过程中遇到了多个模型名相同的情况时,则可以使用flask模块中的aliased方法,表示给这个模型起一个别名。

    多对多关系查询

    由于在flask中,多对多关系是使用到的中间表的方法实现的,所以在使用中也依次连接即可

    1. from datatables import ColumnDT, DataTables
    2. from flask import jsonify, request
    3. from sqlalchemy import distinct, func
    4. from .models.user import User
    5. from .models.testItemsApparatus import TestItemsApparatus
    6. from .models.apparatus import Apparatus
    7. @blueprint.route('/index/data')
    8. def index_data():
    9. columns = [
    10. ColumnDT(User.name, mData='name'),
    11. ColumnDT(User.age, mData='age'),
    12. ColumnDT(func.group_concat(distinct(Apparatus.name)), global_search=False, mData='gender'),
    13. ColumnDT(Apparatus.name), # 只用于过滤
    14. ] # 表示每列展示的数据
    15. query = db.session.query().select_from(User).outerjoin(TestItemsApparatus).outerjoin(Apparatus).group_by(
    16. User.id) # 表示数据的来源
    17. params = request.args.to_dict() # 表示查询的参数
    18. tables = DataTables(params, query, columns) # 对数据进行处理成表格需要的
    19. return jsonify(tables.output_result()) # 将处理后的数据输出结果转为json格式并返回

    global_search=False参数表示该字段在搜索中不会使用到该字段,默认为True

  • 相关阅读:
    基于强化学习的机器人抓取之 stochastic search
    tomcat 7 任意文件上传漏洞(信息搜集与漏洞探测)
    【人脸检测 FPS 1000+】ubuntu下libfacedetection tensorrt部署
    【红外双目有监督】CATS系列数据集探索&加载器
    C中的strtol()函数
    使用Git进行版本控制,不同的项目怎么设置不同的提交用户名和邮箱呢?
    BI数据可视化:不要重复做报表,只需更新数据
    Transformer英语-法语机器翻译实例
    CDN网络科普小文(故事版)
    基于RocketMQ实现分布式事务
  • 原文地址:https://blog.csdn.net/HHYZBC/article/details/126917410