前后端配合实现简单的分页功能

简介: 前后端配合实现简单的分页功能

前言


最近在开发QA平台的时候,有这样一个需求,就是将后端的数据实现分页,同时前端使用分页参数实现分页数据的获取和渲染。


环境准备


项目结构


网络异常,图片无法展示
|


后端


后端我们采用flask实现,结合peewee实现SQLite的分页查询。使用flask-cors解决跨域问题。


# dev_env:python@3
# 安装flask和flask-cors
pip install flask
pip install flask-cors
复制代码


代码web/DbAction/User.py


from peewee import *
from datetime import date
from playhouse.migrate import *
# 如果db不存在,会自动创建
db = SqliteDatabase('datastore.db')
class people(Model):
    # 默认会有ID作为主键自增
    name = CharField()
    birth = DateField()
    people_status = BooleanField(default=True)
    class Meta:
        database = db
if __name__=='__main__':
    for i in range(1,32):
    pp = people.create(name=f'phyger{i}',birth=date(1991,1,int(f'{i}')))
    pp.save()
复制代码


我们执行以上代码,向数据库中插入31条数据。


网络异常,图片无法展示
|


代码web/app.py


# -*- coding: utf-8 -*-
from flask import Flask
from flask import render_template,request
from flask_cors import cross_origin,CORS
app = Flask(__name__)
# 打开跨域
CORS(app)
@app.route('/')
@app.route('/<name>')
def hello(name=None):
    return render_template('index.html', name=name)
@app.route('/js')
def js():
    return {'name':'phyger'}
#  后端分页的实现
from peewee import *
from DbAction.User import people
@app.route('/user')
def user():
    # 如果没有传参数,则提示
    if not request.args.get('page') or not request.args.get('limit'):
        return 'check params!'
    # 开启分页
    page = int(request.args.get('page'))
    size = int(request.args.get('limit'))
    print(f'page is {page} | page_size is {size}')
    # 使用这个列表存放数据
    tmp=[]
    # 循环遍历将数据添加到上面的列表中
    for pp in people.select().order_by(people.id).paginate(page,size):
        tmp_date = f'{pp.birth.year}-{pp.birth.month}-{pp.birth.day}'
        tmp.append({'id':pp.id,'name':pp.name,'birth':tmp_date,'status':pp.people_status})
    return {'code':0,'msg':'success!','data':tmp,'count':len(people.select())}
if __name__ == '__main__':
    app.run(host='0.0.0.0')
复制代码


启动后端


python3 app.py
复制代码


测试下,/user?page=1&limit=5


网络异常,图片无法展示
|


到此,后端服务准备就绪。


前端


前端我们依然采用对后端友好的LayUI框架,直接在html中引用LayUI的CDN加速。逻辑JS直接内嵌在html页面。


代码layui/index.html


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>layui分页效果</title>
    <link rel="stylesheet" href="https://www.layuicdn.com/layui-v2.6.8/css/layui.css">
</head>
<body>
    <table id="test"></table>
    <script type="text/javascript" src="https://www.layuicdn.com/layui-v2.6.8/layui.js"></script>
    <script>
        layui.use(['table','layer'], function(){
          var table = layui.table;
          var layer = layui.layer;
          table.render({
            elem: '#test'
            ,url: 'https://backend.io/user'
            ,cellMinWidth: 80 //全局定义常规单元格的最小宽度,layui 2.2.1 新增
            ,cols: [[
              {field:'id', title: 'ID', sort: true}
              ,{field:'name', title: '姓名'}
              ,{field:'birth', title: '生日'}
              ,{field:'status', title: '状态', sort: true}
            ]]
            ,page: true
            ,done: function(res, curr, count){
                //如果是异步请求数据方式,res即为你接口返回的信息。
                //如果是直接赋值的方式,res即为:{data: [], count: 99} data为当前页数据、count为数据总长度
                console.log('当前的数据',res);
                //得到当前页码
                console.log('当前的页码',curr); 
                //得到数据总量
                console.log('当前的总数',count);
                layer.msg("查询成功!");
                }
          });
        });
        </script>
</body>
</html>
复制代码


启动前端(nginx、python、caddy、httpd都可)


python -m http.server 9999
复制代码


查看效果-1


网络异常,图片无法展示
|


查看效果-2


网络异常,图片无法展示
|


最后


后端我们使用ORM框架可以实现很简单的实现分页效果,前端我们使用分页组件也可以快速实现分页效果。虽然各个框架各有特点,但是原理都是一致的。希望本文能够对你的工作学习带来帮助。

相关文章
|
6月前
|
SQL 前端开发 Java
通用分页-后台
通用分页-后台
72 0
|
4月前
|
前端开发
SSM整合-前后台协议联调(列表功能、添加功能、添加功能状态处理、修改功能、删除功能)
SSM整合-前后台协议联调(列表功能、添加功能、添加功能状态处理、修改功能、删除功能)
35 0
|
1月前
|
前端开发 JavaScript
vue实现通用分页控件,支持前端分页、后端分页。
vue实现通用分页控件,支持前端分页、后端分页。
38 1
|
3月前
|
前端开发 JavaScript
工作这么久了,还不懂如何使用纯前端实现分页吗?-假如后端一股脑返回给你所有数据,让你自个实现分页该怎么办
工作这么久了,还不懂如何使用纯前端实现分页吗?-假如后端一股脑返回给你所有数据,让你自个实现分页该怎么办
73 0
|
3月前
|
前端开发
若依框架---分页功能
若依框架---分页功能
103 0
|
4月前
|
SQL Java 关系型数据库
通用分页详细讲解(后端)
通用分页详细讲解(后端)
30 0
|
4月前
|
存储 前端开发 Java
详解通用分页(前端)
详解通用分页(前端)
16 0
|
5月前
|
Java 测试技术 数据库
通用分页【上】之后端代码
通用分页【上】之后端代码
43 0
|
5月前
|
Java 测试技术 数据库连接
通过分页的详解(后端)2
通过分页的详解(后端)
35 0
|
5月前
|
NoSQL Java 关系型数据库
通过分页的详解(后端)1
通过分页的详解(后端)
34 0