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简单实现旋转图片的方法
May 30 Python
Anaconda多环境多版本python配置操作方法
Sep 12 Python
python中itertools模块zip_longest函数详解
Jun 12 Python
使用python 3实现发送邮件功能
Jun 15 Python
python3学习之Splash的安装与实例教程
Jul 09 Python
python实现转圈打印矩阵
Mar 02 Python
Python中的random.uniform()函数教程与实例解析
Mar 02 Python
python可视化篇之流式数据监控的实现
Aug 07 Python
PyCharm刷新项目(文件)目录的实现
Feb 14 Python
python模拟斗地主发牌
Apr 22 Python
Python如何优雅删除字符列表空字符及None元素
Jun 25 Python
Python sklearn中的.fit与.predict的用法说明
Jun 28 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数组及条件,循环语句学习
2012/11/11 PHP
PHP生成不同颜色、不同大小的tag标签函数
2013/09/23 PHP
教你如何快捷的使用cmd访问mysql小技巧
2014/05/26 PHP
完美解决phpdoc导出文档中@package的warning及Error的错误
2016/05/17 PHP
PHP执行shell脚本运行程序不产生core文件的方法
2016/12/28 PHP
showModelessDialog()使用详解
2006/09/21 Javascript
测试JavaScript字符串处理性能的代码
2009/12/07 Javascript
用jQuery实现的智能隐藏、滑动效果的返回顶部代码
2014/03/18 Javascript
jQuery实现友好的轮播图片特效
2015/01/12 Javascript
原生javascript实现的一个简单动画效果
2016/03/30 Javascript
JS 对象(Object)和字符串(String)互转方法
2016/05/20 Javascript
微信小程序使用第三方库Underscore.js步骤详解
2016/09/27 Javascript
jQuery制作input提示内容(兼容IE8以上)
2017/07/05 jQuery
JS实现按钮控制计时开始和停止功能
2017/07/27 Javascript
angularjs 的数据绑定实现原理
2018/07/02 Javascript
微信小程序支付前端源码
2018/08/29 Javascript
react 国际化的实现代码示例
2018/09/14 Javascript
js限制输入框只能输入数字(onkeyup触发)
2018/09/28 Javascript
ndm:NPM的桌面GUI应用程序
2018/10/15 Javascript
如何检测JavaScript中的死循环示例详解
2020/08/30 Javascript
详解vue父子组件状态同步的最佳方式
2020/09/10 Javascript
详解webpack的文件监听实现(热更新)
2020/09/11 Javascript
python中map()函数的使用方法示例
2017/09/29 Python
python绘制封闭多边形教程
2020/02/18 Python
Python接口测试数据库封装实现原理
2020/05/09 Python
地图可视化神器kepler.gl python接口的使用方法
2020/12/22 Python
一款纯css3实现的鼠标经过按钮特效教程
2014/11/09 HTML / CSS
HTML5 Canvas图像模糊完美解决办法
2018/02/06 HTML / CSS
Canvas 帧动画吃苹果小游戏
2020/08/05 HTML / CSS
Russell Stover巧克力官方网站:美国领先的精美巧克力制造商
2016/11/27 全球购物
医学专业毕业生推荐信
2013/11/14 职场文书
2014信息技术专业毕业生自我评价
2014/01/17 职场文书
小学师德师风演讲稿
2014/09/02 职场文书
2014收银员工作总结范文
2014/12/16 职场文书
信息技术研修心得体会
2016/01/08 职场文书
小学生优秀作文范文(六篇)
2019/07/10 职场文书