Python Flask结合MySQL实现分页功能详解
本文介绍如何在Python Flask框架中结合MySQL数据库实现分页功能。通过封装get_page方法计算页码范围,利用SQL的limit关键字获取数据,并生成总页数。前端采用Bootstrap样式渲染分页条,支持首页、上一页、下一页及尾页跳转,同时提供APP端直接返回JSON数据的支持方案,适用于Web与移动端开发场景。
本文展示如何结合MySQL数据库查询语句,在Python Flask应用中实现数据分页效果。
@user.route("/user_list",methods=['POST','GET'])
def user_list():
p = g.args.get("p", '') #页数
show_shouye_status = 0 #显示首页状态
if p =='':
p=1
else:
p=int(p)
if p > 1:
show_shouye_status = 1
mdb = db_session()
limit_start = (int(p)-1)*10#起始
sql ="select * from page_text limit {0},10".format(limit_start)
user_list=mdb.getMany(sql)
sql="select count(id) as total from page_text"
count = mdb.getOne(sql)['total'] #总记录
total = int(math.ceil(count/10.0)) #总页数
dic = get_page(total,p)
datas={
'user_list':user_list,
'p': int(p),
'total': total,
'show_shouye_status': show_shouye_status,
'dic_list': dic
}
return render_template("user_list.html",datas=datas)
核心逻辑封装在一个名为get_page的方法中,用于处理页码范围的计算。
def get_page(total,p):
show_page = 5 # 显示的页码数
pageoffset = 2 # 偏移量
start = 1 #分页条开始
end = total #分页条结束
if total > show_page:
if p > pageoffset:
start = p - pageoffset
if total > p + pageoffset:
end = p + pageoffset
else:
end = total
else:
start = 1
if total > show_page:
end = show_page
else:
end = total
if p + pageoffset > total:
start = start - (p + pageoffset - end)
#用于模版中循环
dic = range(start, end + 1)
return dic
若前端需要使用模板引擎进行页面拼接,可参考以下基于Bootstrap框架的代码实现分页导航栏。
<ul class="pagination">
{% if datas.show_shouye_status==1%}
<li class=''><a href='/user/user_list?p=1'>首页</a></li>
<li class=''><a href='/user/user_list?p={{datas.p-1}}'>上一页</a></li>
{%endif%}
{% for dic in datas.dic_list %}
{% if dic==datas.p%}
<li class="active"><a href="/user/user_list?p={{dic}}" rel="external nofollow" rel="external nofollow" >{{dic}}</a></li>
{%else%}
<li><a href="/user/user_list?p={{dic}}" rel="external nofollow" rel="external nofollow" >{{dic}}</a></li>
{%endif%}
{%endfor%}
{% if datas.p < datas.total%}
<li class=''><a href='/user/user_list?p={{datas.p+1}}'>下一页</a></li>
<li class=''><a href='/user/user_list?p={{datas.total}}'>尾页</a></li>
{%endif%}
共{{datas.total}}页
</ul>
具体的Bootstrap分页样式可参考官方文档或相关教程:http://edu.jb51.net/bootstrap/bootstrap-pagination.html
如果接口是面向APP端调用,无需渲染HTML模板,直接返回包含数据的JSON对象即可。
以上内容为本文的全部分享,希望能为读者的学习提供有益参考,欢迎继续支持本站获取更多技术资源。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













