先看源码:

@app.route('/movie', methods=['GET', 'POST'])
@app.route('/home', methods=['GET', 'POST'])
@app.route('/index', methods=['GET', 'POST'])
@app.route('/', methods=['GET', 'POST'])
def movie_page():
# user = User.query.first()
if request.method == 'POST': # 判断是否是 POST 请求
if not current_user.is_authenticated: # 如果当前用户未认证
flash('未登录无法添加.')
return redirect(url_for('login')) # 重定向到主页
# 获取表单数据
title = request.form.get('title') # 传入表单对应输入字段的 name 值
title = "%s" % escape(title) year = request.form.get('year')
year = "%s" % escape(year)
# 验证数据
if not title or not year or len(year) != 4 or len(title) > 60:
flash('Invalid input.') # 显示错误提示
return redirect(url_for('movie_page')) # 重定向回主页
# 保存表单数据到数据库
movie = Movie(title=title, year=year) # 创建记录
db.session.add(movie) # 添加到数据库会话
db.session.commit() # 提交数据库会话
flash('Item created.') # 显示成功创建的提示
return redirect(url_for('movie_page')) # 重定向回主页
movies = Movie.query.order_by(db.desc(Movie.id)).all() data = request.args.to_dict()
page = int(data.get('page', 1))
res = Movie.query.order_by(db.desc(Movie.id)).paginate(page, POSTS_PER_AGE)
return render_template('index.html', res=res, movies=movies)

 

flask-sqlalchemy获取分页数据

在flask-sqlalchemy操作的数据模型的过程中,使用paginate()方法将结果返回为一个翻页对象,不同于all()first()可以直接获得数据,paginate返回的结果是一个对象,paginate接收三个参数,第一个是从第几页开始(从1开始),默认是第一页,第二个参数是每页多少条数据,默认是20,第三个参数处理页数越界默认为True,如果是True则页数小于等于0或者大于最大页数都会报404错误,如果设置为False,页数小于等于0会跳回第一页,页数大于最大值会返回空列表,paginate对象有以下方法

  • items: 获取这一页的数据,返回一个列表,每个元素是各字段数据组成的元组
  • has_next:是否有下一页,True/False
  • has_prev:是否有上一页,True/False
  • total:总数据条数,int
  • page:当前页码数,int
  • pages:总页码数,int
  • next_num:下一页页码,int
  • prev_num:上一页页码,int
  • next():下一页的翻页对象,可以继续调用对象的其他方法和属性
  • prev():上一页的翻页对象,可以继续调用对象的其他方法和属性

数据库数据:

>>> from watchlist.models import User, Movie
>>> from watchlist import app, db
>>> res.items
[<Movie 12>, <Movie 11>, <Movie 10>, <Movie 9>, <Movie 8>]
>>> res = Movie.query.order_by(db.desc(Movie.id)).paginate(1, 10)
>>> res.items
[<Movie 31>, <Movie 30>, <Movie 29>, <Movie 28>, <Movie 27>, <Movie 26>, <Movie 25>, <Movie 24>, <Movie 23>, <Movie 22>]
>>> res.items[0]
<Movie 31>
>>> res.items[0].title
'速度与激情10'
>>> res.items[0].year
'2022'
>>> res.has_next
True
>>> res.has_prev
False
>>> res.total
31
>>> res.page
1
>>> res.pages
4
>>> res.next_num
2
>>> res.prev_num>>> res.next().items
[<Movie 21>, <Movie 20>, <Movie 19>, <Movie 18>, <Movie 17>, <Movie 16>, <Movie 15>, <Movie 14>, <Movie 13>, <Movie 12>]
>>> res.next().next().items
[<Movie 11>, <Movie 10>, <Movie 9>, <Movie 8>, <Movie 7>, <Movie 6>, <Movie 5>, <Movie 4>, <Movie 3>, <Movie 2>]
>>>

flask分页功能:基于flask-sqlalchemy和jinja2的更多相关文章

  1. Flask学习之旅--分页功能:分别使用 flask--pagination 和分页插件 layPage

    一.前言 现在开发一个网站,分页是一个很常见的功能了,尤其是当数据达到一定量的时候,如果都显示在页面上,会造成页面过长而影响用户体验,除此之外,还可能出现加载过慢等问题.因此,分页就很有必要了. 分页 ...

  2. 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(上)

    目录 前言 第1章 安装 第2章 程序的基本结构 第3章 模板 第4章 Web表单 第5章 数据库 第6章 电子邮件 第7章 大型程序的结构   前言 学习Python也有一个半月时间了,学到现在感觉 ...

  3. Flask的插件session、SQLAlchemy、Script、Migrate

    一.flask-session 1.为什么要使用flask-session 因为flask默认的session是通过请求上下文放入到Local中的,是存在内存的,而使用flask-session可以更 ...

  4. python 全栈开发,Day142(flask标准目录结构, flask使用SQLAlchemy,flask离线脚本,flask多app应用,flask-script,flask-migrate,pipreqs)

    昨日内容回顾 1. 简述flask上下文管理 - threading.local - 偏函数 - 栈 2. 原生SQL和ORM有什么优缺点? 开发效率: ORM > 原生SQL 执行效率: 原生 ...

  5. Python flask 基于 Flask 提供 RESTful Web 服务

    转载自 http://python.jobbole.com/87118/ 什么是 REST REST 全称是 Representational State Transfer,翻译成中文是『表现层状态转 ...

  6. 基于Flask的Web应用程序插件式结构开发

    事实上,很多应用程序基于插件式结构开发,可以很方便了扩展软件的功能,并且这些功能完全可以依托于第三方开发者,只要提供好接口和完备文档,比如wordpress.谷歌火狐浏览器等. Python这样的动态 ...

  7. Flask最强攻略 - 跟DragonFire学Flask - 第四篇 Flask 中的模板语言 Jinja2 及 render_template 的深度用法

    是时候开始写个前端了,Flask中默认的模板语言是Jinja2 现在我们来一步一步的学习一下 Jinja2 捎带手把 render_template 中留下的疑问解决一下 首先我们要在后端定义几个字符 ...

  8. 使用Flask+MongoDB实现基于REST的接口简单操作

    目录 前言 1 准备工作 2 具体实现 前言 最近在捣鼓如何使用阿里云服务器搭建一个简单的基于Flask框架的后端接口,刚开始为了图方便,就直接买了一个Windows Server 2008系统服务器 ...

  9. 基于flask的网页聊天室(四)

    基于flask的网页聊天室(四) 前言 接前天的内容,今天完成了消息的处理 具体内容 上次使用了flask_login做用户登录,但是直接访问login_requare装饰的函数会报401错误,这里可 ...

随机推荐

  1. Noip模拟30 2021.8.4

    T1 毛一琛 考场上打的稳定的$O((2^n)^2)$的暴力.其实再回忆一下上次那道用二进制枚举的题$y$ 就可以知道一样的道理,使用$\textit{Meet In the Middle}$, 按照 ...

  2. C/C++编程笔记:浪漫流星雨表白装b程序

    作为一个未来可能会成为一个专业程序员的小伙们,不知道你们现在学到哪里了,学了点东西之后有没有想在你女朋友面前装个大大的b呢,今天小编就给你一个机会来研究一下下边的代码吧,保证大写的N,当然大佬是排除在 ...

  3. Linux修改bashrc

    .bashrc是一个隐藏的文件,要打开并修改该文件需要: (1) 查看:ll -a 找到文件 .bashrc: (2) 打开:vi .bashrc (或者 vim .bashrc) 打开文件: (3) ...

  4. 转:(WIN)S04-CH01 PCIE XDMA开发环境搭建以及环路测试

    摘要: 这一章开始主要介绍 XILINX FPGA PICE IP XDMA IP的使用.XDMA IP使用部分教程分LINUX 篇和WINDOWS篇两个部分.通过实战,面向应用,提供给大家 XILI ...

  5. Python matplotlib pylot和pylab的区别

    matplotlib是Python中强大的绘图库. matplotlib下pyplot和pylab均可以绘图. 具体来说两者的区别 pyplot 方便快速绘制matplotlib通过pyplot模块提 ...

  6. Ubuntu virtualenv 创建 python2 虚拟环境 激活 退出

    首先默认安装了virtualenv 创建python2虚拟环境 your-name@node-name:~/virtual_env$ virtualenv -p /usr/bin/python2 py ...

  7. 第07课 OpenGL 光照和键盘(1)

    光照和键盘控制: 在这一课里,我们将添加光照和键盘控制,它让程序看起来更美观. 这一课我会教您如何使用三种不同的纹理滤波方式.教您如何使用键盘来移动场景中的对象,还会教您在OpenGL场景中应用简单的 ...

  8. Iptables 代理局域网内的主机上网

    参考连接:https://developer.aliyun.com/article/607330 环境为云环境,有外网主机的IP为192.168.0.39,无外网主机的IP为192.168.0.228 ...

  9. springcloud3(六) 服务降级限流熔断组件Resilience4j

    代码地址:https://github.com/showkawa/springBoot_2017/tree/master/spb-demo/spb-gateway/src/test/java/com/ ...

  10. k8s入坑之路(9)k8s网络插件详解

    Flannel: 最成熟.最简单的选择 Calico: 性能好.灵活性最强,目前的企业级主流 Canal: 将Flannel提供的网络层与Calico的网络策略功能集成在一起. Weave: 独有的功 ...