Python利用flask sqlalchemy实现分页效果


Posted in Python onAugust 02, 2020

Flask-sqlalchemy是关于flask一个针对数据库管理的。文中我们采用一个关于员工显示例子。

首先,我们创建SQLALCHEMY对像db。

from flask import Flask, render_template,request
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__,static_url_path='')
app.debug = True
app.secret_key = "faefasdfaf"
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///./db/personal.db' # app的配置,指定数据库路径
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
app.config['SQLALCHEMY_ECHO'] = True 

db = SQLAlchemy(app)

然后我们利用db创建员工表:

from datetime import datetime

class Employee(db.Model):
 '''员工'''
 __tablename__ = 'employee'

 id = db.Column(db.Integer, primary_key=True)
 name = db.Column(db.String(50))
 gender = db.Column(db.String)
 job = db.Column(db.String)
 birthday = db.Column(db.DateTime)
 idcard = db.Column(db.String)
 address = db.Column(db.String)
 salary = db.Column(db.String)
 release_time = db.Column(db.DateTime)

 def __init__(self, name, gender, job, birthday, idcard, address, salary, release_time=None):
  self.name = name
  self.gender = gender
  self.job = job
  self.birthday = birthday
  self.idcard = idcard
  self.address = address
  self.salary = salary
  self.release_time = release_time if release_time else datetime.now()

 def __repr__(self):
  return '<员工{},{},{},{}>'.format(self.id, self.name, self.salary, self.address)

表创建好之后,我们可以从表中查询数据了。

from flask import render_template
from flask.views import MethodView
class EmployeeListView(MethodView): # 获取员工信息
 def get(self,page=1):
  employees = Employee.query.paginate(page,per_page=10)
  return render_template('employeelist.html', employees=employees)

以上我们通过查询,查询出员工信息,然后传给前台一个模板。(以上我们采用了flask的蓝图进行了分模块,假设我们把上面这个定义为视图函数为:employee.list)

注:paginate是分页的方法,第一个参数是页码,第二个是每页显示多少条。但是这样得到的结果不是一列表,需要在传到前台的值加一个 .items,下面举例说明。(利用jinja2模板)

 {% for item in employees.items %}

如上所示,在利用Jinja2去取值时,需要在后台传过来的值后面,加上.items。

继续上面的分页,这里我们要再次利用jinja2模板来定义一个方法,以实现分页的功能,这个页面名字就叫:helper.html。

{% macro render_page_data(page_data,page_function) %}
 <div class="text-center">
  <ul class="page_data">
   <li><a href="{{ url_for(page_function,page = 1) }}">首页</a></li>
   {% if page_data.has_prev %}
    <li><a href="{{ url_for(page_function,page = page_data.prev_num) }}">«</a></li>
   {% endif %}
   {% for page in page_data.iter_pages() %}
    {% if page %}
     {% if page !=page_data.page %}
      <li><a href="{{ url_for(page_function,page = page) }}">{{ page }}</a></li>
     {% else %}
      <li class="active"><a href="#">{{ page }}</a></li>
     {% endif %}
    {% endif %}
   {% endfor %}
   {% if page_data.has_next %}
    <li><a href="{{ url_for(page_function,page = page_data.next_num) }}">»</a></li>
   {% endif %}
   <li><a href="{{ url_for(page_function,page = page_data.pages) }}">末页</a></li>
  </ul>
 </div>
{% endmacro %}

以上是我们利用jinja2的语法定义了一个分布的方法,这个方法,我们传了二个参数,第一个是后台传过来通过db分页查询出来的数据。第二个是我们查询的数据的方法。

这里需要特别说明一下,分页的数据有几个重要的方法:

  • has_next:如果在目前页后至少还有一页的话,返回 True
  • has_prev:如果在目前页之前至少还有一页的话,返回 True
  • next_num:下一页的页面数
  • prev_num:前一页的页面数

通过上面的工作之后,最后就只差一步了,我们需要在我们的模板页通过Jinja2导入我们刚刚定义的方法,也就是在上面我们的employeelist.html中导入。

{% import 'helper.html' as helper %}

导入之后,我们就可以在我们需要的地方调用就可以了。

{{ helper.render_pagination(employees,'employee.list') }}

上面就是我们调用我们之前定义的方法。第一个参数,我们从后台传过来的值,第二个就是后台的那个视图函数。

进行了以上操作后,我们就大功告成了,下面看一下,我们实现了的效果图。

Python利用flask sqlalchemy实现分页效果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中将字典转换成其json字符串
Jul 16 Python
用实例解释Python中的继承和多态的概念
Apr 27 Python
在Python中操作文件之seek()方法的使用教程
May 24 Python
python中set常用操作汇总
Jun 30 Python
Python内置函数OCT详解
Nov 09 Python
python3读取csv和xlsx文件的实例
Jun 22 Python
Python 共享变量加锁、释放详解
Aug 28 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
Sep 06 Python
如何搭建pytorch环境的方法步骤
May 06 Python
浅析Python中字符串的intern机制
Oct 03 Python
python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)
Dec 10 Python
Python实现双向链表
May 25 Python
Python实现发送QQ邮件的封装
Jul 14 #Python
python记录程序运行时间的三种方法
Jul 14 #Python
python运行其他程序的实现方法
Jul 14 #Python
Python利用递归和walk()遍历目录文件的方法示例
Jul 14 #Python
Python学习教程之常用的内置函数大全
Jul 14 #Python
python与C互相调用的方法详解
Jul 14 #Python
Python django实现简单的邮件系统发送邮件功能
Jul 14 #Python
You might like
PHP的基本常识小结
2013/07/05 PHP
php5.3不能连接mssql数据库的解决方法
2014/12/27 PHP
Laravel5权限管理方法详解
2016/07/26 PHP
PHP使用标准库spl实现的观察者模式示例
2018/08/04 PHP
php链式操作的实现方式分析
2019/08/12 PHP
JavaScript 组件之旅(四):测试 JavaScript 组件
2009/10/28 Javascript
用Javascript实现Sleep暂停功能代码
2010/09/03 Javascript
JavaScript中按位“异或”运算符使用介绍
2014/03/14 Javascript
Javascript动态引用CSS文件的2种方法介绍
2014/06/06 Javascript
详解BootStrap中Affix控件的使用及保持布局的美观的方法
2016/07/08 Javascript
如何写好你的JavaScript【推荐】
2017/03/02 Javascript
javascript 玩转Date对象(实例讲解)
2017/07/11 Javascript
微信小程序 获取session_key和openid的实例
2017/08/17 Javascript
iview中Select 选择器多选校验方法
2018/03/15 Javascript
VUE v-for循环中每个item节点动态绑定不同函数的实例
2018/09/26 Javascript
使用Three.js实现太阳系八大行星的自转公转示例代码
2019/04/09 Javascript
vue + typescript + 极验登录验证的实现方法
2019/06/27 Javascript
原生js实现3D轮播图
2020/03/21 Javascript
JavaScript 常见的继承方式汇总
2020/09/17 Javascript
原生js实现简单轮播图
2020/10/26 Javascript
python列表的常用操作方法小结
2016/05/21 Python
django中账号密码验证登陆功能的实现方法
2019/07/15 Python
Python绘制二维曲线的日常应用详解
2019/12/04 Python
Pandas时间序列重采样(resample)方法中closed、label的作用详解
2019/12/10 Python
Python底层封装实现方法详解
2020/01/22 Python
解决Django响应JsonResponse返回json格式数据报错问题
2020/08/09 Python
CSS实现鼠标滑过鼠标点击代码写法
2016/12/26 HTML / CSS
CSS3实战第一波 让我们尽情的圆角吧
2010/08/27 HTML / CSS
HTML5声音录制/播放功能的实现代码
2018/05/03 HTML / CSS
Brasty罗马尼亚:购买手表、香水、化妆品、珠宝
2020/04/21 全球购物
丝芙兰墨西哥官网:Sephora墨西哥
2020/05/30 全球购物
日语专业个人的求职信
2013/12/03 职场文书
中学生团员自我评价分享
2013/12/07 职场文书
电脑售后服务承诺书
2014/03/27 职场文书
大学生志愿者心得体会
2016/01/15 职场文书
Python中Schedule模块使用详解 周期任务神器
2022/04/19 Python