先看源码:

@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模拟18 2021.7.17 (文化课专场)

    T1 导弹袭击(数学) 显然,我们要找到最优的A,B使得一组a,b优于其他组那么可以列出: $\frac{A}{a_i}+\frac{B}{b_i}<\frac{A}{a_j}+\frac{B} ...

  2. STL模板

    目录 栈stack 队列queue 列表List 集合set 映射map 多重映射multimap 对pair 元组tuple 容器containers 算法algorithms 仿函数/函数对象fu ...

  3. hdu 1394 Minimum Inversion Number(线段树or树状数组)

    题意: 给你N个数,N个数是0~N-1的一个全排列. 要求统计它的所有形式的逆序对的最小值.它的所有形式的意思是,不断将数组开头的第一个数放到数组的最后面. 逆序对:i<j且ai>aj 思 ...

  4. 【代码更新】单细胞分析实录(21): 非负矩阵分解(NMF)的R代码实现,只需两步,啥图都有

    1. 起因 之前的代码(单细胞分析实录(17): 非负矩阵分解(NMF)代码演示)没有涉及到python语法,只有4个python命令行,就跟Linux下面的ls grep一样的.然鹅,有几个小伙伴不 ...

  5. Spring Cloud Alibaba 使用 feign 和 rebion 进行服务消费

    微服务的服务消费,一般是使用 feign 和 rebion 调用服务提供,进行服务的消费,本文将实战使用代码讲解服务的消费. 微服务环境的搭建 创建一个 springboot 项目,springboo ...

  6. Spark面试题(四)

    1.Spark中的HashShufle的有哪些不足? 1)shuffle产生海量的小文件在磁盘上,此时会产生大量耗时的.低效的IO操作: 2)容易导致内存不够用,由于内存需要保存海量的文件操作句柄和临 ...

  7. mbatis动态sql中传入list并使用

    <!--Map:不单单forech中的collection属性是map.key,其它所有属性都是map.key,比如下面的departmentId --> <select id=&q ...

  8. hdfs command

    hadoop fs -ls hdfs dfs -mkdir -p /user/$(whoami) hdfs dfs -chown -R $(whoami) /user/$(whoami) hdfs d ...

  9. 如何系统学习C 语言(下)之 文件篇

    我们所编写的程序源代码以及编译生成的可执行文件都属于文件.所以文件的实质就是存储在外部存储介质上的一段连续的二进制数据. c 语言程序对文件的处理采用文件流的形式,程序运行在内存中,而文件是存储在外部 ...

  10. Part 20 Create custom service in AngularJS

    Whenever the case changes from lower to upper, a single space character should be inserted. This mea ...