• 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

  • 相关阅读:
    c++:算术运算符、赋值运算符、比较运算符、逻辑运算符
    离线量化(后量化)算法研究-----脉络梳理
    java 数组及方法
    一些文本在CSS上的作用
    【数据结构】逻辑结构与物理结构
    JAVA毕业设计服装连锁店后台管理系统计算机源码+lw文档+系统+调试部署+数据库
    【COMP305 LEC6 LEC 7】
    宝塔服务器配置提示No input file specified
    【密码学】RSA的攻与防_2.0
    代码随想录算法训练营第十一天|20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值
  • 原文地址:https://blog.csdn.net/HHYZBC/article/details/126917410