Python Flask使用Pagination实现分页展示数据

导读:本篇文章讲解 Python Flask使用Pagination实现分页展示数据,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

前提:

  • 不使用Flask-SQLAlchemy来操作数据库及分页等,直接使用pymysql连接数据库
  • 使用pymysql连接到数据库后,通过执行查询语句获取到数据库字段值

连接数据库

  • __init__.py
version = 'Release'
Release = {
    'Mysql': {'username': '用户名', 'password': '密码', 'dbName': '数据库名'},
    ...
    'Host': {'address': 'ip地址(可以是127也可以是0)', 'port': '端口号'},
    ...
}
...
  • connMysql.py
## 自定义一个连接数据库的方法(新建一个py文件)
# 分页获取数据
def test1(table_name, data):
	## Release['MysqlIpOut']['HOST']:需要在__init__.py中定义好,写上后会提示需要导入
    dbIP = Release['MysqlIpOut']['HOST']
    # 连接数据库
    mysql_connect = pymysql.connect(host=dbIP,
                                    user=Release['Mysql']['username'],
                                    password=Release['Mysql']['password'],
                                    database=Release['Mysql']['dbName'],
                                    charset="utf8",
                                    port=3306,
                                    cursorclass=pymysql.cursors.DictCursor)
    cursor = mysql_connect.cursor()
    # 查询语句
    sql = "SELECT" + data + "FROM `" + table_name + "`"
    try:
    	# 执行sql语句
        cursor.execute(sql)
        # 提交更改为稳定存储
        mysql_connect.commit()
        # fetchall:获取所有行
        results = cursor.fetchall()
    except:
        results = {'code': '102'}
    finally:
    # 关闭连接
        mysql_connect.close()
    return results

实现分页

  • app.py
    • 通过参考网上案例实现
    • http://t.csdn.cn/HKoh0
# 测试分页
@app1.route('/test')
def page_test():
    # 获取数据库中的数据(使用connMysql.py中写好的方法来查)
    content = test1('demo', '*')
    # print(len(content), type(content), content)		# 测试输出
    # 每一页显示记录数
    pageSize = 5
	
    page = request.args.get('page', 1, type=int)
    # 为了处理用户输入的超出页码范围的数字,添加以下代码
    if page > len(content) or page < 1:
        page = 1

    # 对获取到的数据进行切片
    start = (page - 1) * pageSize	# 开始,每一页开始位置
    end = start + pageSize			# 结束,每一页结束位置
    slices = slice(start, end)
    slicontent = content[slices]	# 切片

    """
    query: 我们要分页的集合对象,content为要分页的对象
    page:当前请求的页码
    per_page:每页的数据个数,自定义
    total:数据总量,也就是共有19条数据
    items:当前页需要显示的数据,因为页码是从1开始的,而列表的索引是从0开始的,所以要处理好这种转化关系。我们的例子是每页只显示5条数据,还比较好计算,如果是多条数据,计算的时候要细心一些
    """
    # 下面就是得到的某一页的分页对象
    current_page = Pagination(content, page=page, per_page=pageSize, total=len(content), items=content[page-1])
    # print(type(current_page), current_page)		# 测试输出

    total_page = current_page.total     # 共有几条数据

    context = {
        'content': content,           # 获取到的数据库的数据
        'total_page': total_page,     # 共有几条数据
        'slicontent': slicontent,		# 数据切片显示
    }

    return render_template("test.html", **context)

前端页面

分页栏使用的是Bootstrap框架封装好的分页效果
参考:http://t.csdn.cn/7lVQG

  • test.html
<!DOCTYPE html>
<html lang="en">
    <head>
        <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css">
        <meta charset="UTF-8">
        <title>分页展示</title>
    </head>

    <body>
        <div align="center">
            <h2>用户信息</h2>
            <br><br>
            {% for cu in slicontent %}
                编号:{{ cu['id'] }},姓名:{{ cu['name'] }},年龄:{{ cu['age'] }}    <br><br>
            {% endfor %}
            <div>
                {{ current_page.links }}	{# 分页栏 #}
                共有{{ total_page }}条数据
            </div>

        </div>
    </body>
</html>

实现效果

通过输入 ip:开放的端口/test 进行访问

在这里插入图片描述

补充:flask_paginate相关参数介绍

参数 作用
items 当前页面中的记录信息,也就是分页查出来的数据
query 分页的源查询
page 当前页数
prev_num 上一页的页数
next_num 下一页的页数
has_next 是否有下一页,如果有返回true
has_prev 是否有上一页,如果有返回true
pages 按照每页显示的记录条数得出的总页数
per_page 每页显示的记录条数
total 查询返回的记录总数

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/114870.html

(0)
Java光头强的头像Java光头强

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!