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

5 篇文章 0 订阅

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

<!-- jQuery 3 -->
<script src="../static/jquery/dist/jquery.min.js"></script>
<!-- DataTables -->
<script src="../static/js/jquery.dataTables.min.js"></script>
<!-- DataTables -->
<link rel="stylesheet" href="../static/css/dataTables.bootstrap.min.css">

前端中使用

<div class="box-body">
    <table class="table table-bordered table-striped table-vcenter"       style="width:100%"></table>
</div>

<script>
    var columns = [
        {
            title: 'name',
            target: 0,
            data: function (item) {
                return item.name;
            }
        },
        {
            title: 'age',
            target: 1,
            data: function (item) {
                return item.age;
            }
        },
    ];

    main.initDataTables($(".table"), {
    "ajax": '127.0.0.1:8000/index/data'
    "columns": columns
        });
    });
</script>

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

后端

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

安装datatables

pip install sqlalchemy-datatables

简单使用

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

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

多表查询

  • 方法1 outerjoin
from datatables import ColumnDT, DataTables
from flask import jsonify, request
from .models.user import User    # 模型
from .models.category import Category    # 模型

@blueprint.route('/index/data')
def index_data():
    columns = [
        ColumnDT(User.name, mData='name'),
        ColumnDT(User.age, mData='age'),
        ColumnDT(Category.name, mData='gender'),
    ]  # 表示每列展示的数据
    query = db.session.query().select_from(User)\
        .outerjoin(Category, Category.id == User.id).group_by(User.id)  # 表示数据的来源
    params = request.args.to_dict()  # 表示查询的参数
    tables = DataTables(params, query, columns)  # 对数据进行处理成表格需要的
    return jsonify(tables.output_result())  # 将处理后的数据输出结果转为json格式并返回

outerjoin表示连接查询。

  • 方法2 执行查询表达式
from datatables import ColumnDT, DataTables
from flask import jsonify, request
from sqlalchemy import distinct, func
from .models.user import User
from .models.category import Category


@blueprint.route('/index/data')
def index_data():
    columns = [
        ColumnDT(User.name, mData='name'),
        ColumnDT(User.age, mData='age'),
        ColumnDT(func.group_concat(distinct(Category.query.filter_by(id=User.id)[0].name)),
                 mData='gender'),
    ]  # 表示每列展示的数据
    query = db.session.query().select_from(User).group_by(User.id) # 表示数据的来源
    params = request.args.to_dict()  # 表示查询的参数
    tables = DataTables(params, query, columns)  # 对数据进行处理成表格需要的
    return jsonify(tables.output_result())  # 将处理后的数据输出结果转为json格式并返回

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

多对多关系查询

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

from datatables import ColumnDT, DataTables
from flask import jsonify, request
from sqlalchemy import distinct, func
from .models.user import User
from .models.testItemsApparatus import TestItemsApparatus
from .models.apparatus import Apparatus


@blueprint.route('/index/data')
def index_data():
    columns = [
        ColumnDT(User.name, mData='name'),
        ColumnDT(User.age, mData='age'),
        ColumnDT(func.group_concat(distinct(Apparatus.name)), global_search=False, mData='gender'),
        ColumnDT(Apparatus.name),  # 只用于过滤
    ]  # 表示每列展示的数据
    query = db.session.query().select_from(User).outerjoin(TestItemsApparatus).outerjoin(Apparatus).group_by(
        User.id)  # 表示数据的来源
    params = request.args.to_dict()  # 表示查询的参数
    tables = DataTables(params, query, columns)  # 对数据进行处理成表格需要的
    return jsonify(tables.output_result())  # 将处理后的数据输出结果转为json格式并返回

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HHYZBC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值