Python+Flask实现自定义分页的示例代码

笔者将为你详细讲解“Python+Flask实现自定义分页的示例代码”的完整攻略。

简介

在Flask开发Web应用过程中,实现分页功能可能会涉及到数据库查询、分页计算等多种操作,本文将介绍使用Python+Flask框架实现自定义分页的示例代码并解释实现细节。

示例1:自定义分页函数

实现思路

自定义分页函数主要的目的是减少重复代码,实现通用分页逻辑,具体的实现思路如下:

  1. 获取每一页需要展示的数据,这里可以通过查询数据库来实现;
  2. 根据传入的参数计算出该页的起始下标和终止下标;
  3. 返回当前页需要展示的数据和当前页的其他信息。

实现步骤

步骤一:导入Flask框架和相关模块

首先需要导入需要使用到的Flask框架和相关模块,具体代码如下:

from flask import Flask, request, jsonify
import math
import random

步骤二:定义分页函数

根据实现思路中的步骤1至3,我们可以定义一个自定义分页函数paginate,具体代码如下:

def paginate(data_list, page, per_page):
    # 计算总页数
    total_page = math.ceil(len(data_list) / per_page)

    # 确认page值有效性, 超出边界取最后一页
    page = min(page, total_page)
    page = max(page, 1)

    # 计算当前页的起始下标和终止下标
    start_index = (page - 1) * per_page
    end_index = min(start_index + per_page, len(data_list))

    # 获取当前页需要展示的数据
    paginated_data_list = data_list[start_index:end_index]

    # 返回包含所有相关分页信息的json对象
    return {
        'total_page': total_page,
        'current_page': page,
        'per_page': per_page,
        'total': len(data_list),
        'data': paginated_data_list
    }

步骤三:定义Flask路由和对应处理函数

最后,我们需要在Flask中定义一个路由,并在对应的处理函数中调用自定义分页函数paginate,将查询得到的数据传入分页函数中计算分页信息并返回。具体代码如下:

app = Flask(__name__)

@app.route('/data', methods=['GET'])
def data():
    # 假设这里查询得到了1000条数据
    data_list = [random.randint(1, 100) for i in range(1000)]
    page = int(request.args.get('page', 1))
    per_page = int(request.args.get('per_page', 10))
    result = paginate(data_list, page, per_page)
    return jsonify(result)

步骤四:运行Flask应用

最后,我们需要运行Flask应用,具体可以使用以下代码:

if __name__ == '__main__':
    app.run(debug=True, port=5000)

测试分页功能

使用Python的requests库可以对实现的分页功能进行测试:

import requests

url = 'http://127.0.0.1:5000/data?page=1&per_page=10'
response = requests.get(url)
print(response.json())

运行以上代码,可以在控制台输出包含分页信息的json对象:{'current_page': 1, 'data': [83, 99, 75, 20, 77, 20, 2, 26, 85, 60], 'per_page': 10, 'total': 1000, 'total_page': 100}

示例2:自定义分页网页模板

实现思路

自定义分页网页模板的实现思路如下:

  1. 在HTML代码中定义一个分页区域;
  2. 在Flask中定义一个处理函数,根据查询参数计算出当前页需要展示的数据和相关分页信息;
  3. 将查询得到的数据和分页信息传入HTML页面中,展示在分页区域内。

实现步骤

步骤一:定义HTML页面

首先,我们需要在HTML代码中定义一个分页区域。假设我们需要实现的分页功能会用到Bootstrap的样式,那么可以类似以下代码定义分页区域:

...
<body>
    <div class="data-container">
        <table class="table table-striped table-bordered table-hover">
            <thead>
                <tr>
                    <th>ID</th>
                    <th>Value</th>
                </tr>
            </thead>
            <tbody>
                {% for item in data %}
                <tr>
                    <td>{{ item.id }}</td>
                    <td>{{ item.value }}</td>
                </tr>
                {% endfor %}
            </tbody>
        </table>
    </div>
    <nav aria-label="...">
        <ul class="pagination">
            {% if data %}
            <li class="page-item {% if current_page == 1 %}disabled{% endif %}">
                <a class="page-link" href="{{ url_for('page', page=current_page-1) }}" tabindex="-1">Previous</a>
            </li>
            {% endif %}

            {% for i in range(1, total_page+1) %}
            {% if i == current_page %}
            <li class="page-item active">
                <span class="page-link">{{ i }}</span>
            </li>
            {% else %}
            <li class="page-item">
                <a class="page-link" href="{{ url_for('page', page=i) }}">{{ i }}</a>
            </li>
            {% endif %}
            {% endfor %}

            {% if data %}
            <li class="page-item {% if current_page == total_page %}disabled{% endif %}">
                <a class="page-link" href="{{ url_for('page', page=current_page+1) }}">Next</a>
            </li>
            {% endif %}
        </ul>
    </nav>
</body>
...

步骤二:定义Flask路由和对应处理函数

定义Flask路由和对应处理函数,根据查询参数计算出当前页需要展示的数据和相关分页信息,并将数据和分页信息传入HTML页面中。具体代码如下:

from flask import Flask, render_template, request
import sqlalchemy
from sqlalchemy import create_engine, Column, Integer
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

# 创建数据库连接
engine = create_engine('sqlite:///test.db')

# 创建Session
Session = sessionmaker(bind=engine)
session = Session()

# 定义数据模型
Base = declarative_base()
class Data(Base):
    __tablename__ = 'data'
    id = Column(Integer, primary_key=True)
    value = Column(Integer)
    def __repr__(self):
        return '<Data id=%d, value=%d>' % (self.id, self.value)

# 插入测试数据
Base.metadata.create_all(engine)
for i in range(1000):
    data = Data(value=i)
    session.add(data)
session.commit()

# Flask应用
app = Flask(__name__)

@app.route('/')
@app.route('/page')
def page():
    page = int(request.args.get('page', 1))
    per_page = 10
    data_list = session.query(Data).order_by(Data.id).all()
    result = paginate(data_list, page, per_page)
    return render_template('page.html', **result)

步骤三:运行Flask应用

最后,运行Flask应用即可在浏览器中查看分页效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python+Flask实现自定义分页的示例代码 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • flask后端request获取参数的几种方式整理

    下面是“flask后端request获取参数的几种方式整理”的完整攻略。 一、从URL中获取参数 1.1 直接从URL中获取参数 当请求类型为GET时,可以直接从URL的query string中获取参数。例如有一个URL:http://127.0.0.1:5000/?name=Tom&age=20,读取页面时,可以使用以下代码获取这两个参数的值: …

    Flask 2023年5月15日
    00
  • Flask框架web开发之零基础入门

    下面我将详细讲解“Flask框架web开发之零基础入门”的完整攻略,并且提供两条示例说明。 标题一:Flask框架web开发之零基础入门 1. Flask框架简介 Flask是一款Python web框架,使用简单灵活,受到了广大开发者的喜爱。它以微框架的形式出现,核心只包含了路由、调试等核心组件,避免了臃肿的代码。另外,Flask有着强大的扩展支持,也非常…

    Flask 2023年5月15日
    00
  • 使用flask如何获取post请求参数

    获取POST请求参数是常见的需求,在使用Flask框架开发Web应用时,也需要处理POST请求中携带的参数,本文将详细讲解使用Flask如何获取POST请求参数的完整攻略,并提供两条相关的示例,方便读者参考。 获取POST请求参数的方法 Flask中获取POST请求参数的方法主要有以下三种: 使用request.form对象 使用request.get_js…

    Flask 2023年5月16日
    00
  • 在DigitalOcean的服务器上部署flaskblog应用

    在DigitalOcean的服务器上部署flaskblog应用需要以下步骤: 1.购买DigitalOcean服务器 首先需要在DigitalOcean官网上购买一台服务器。选择适合的配置和地区,然后创建完成后,需要记录下服务器的IP地址和root用户的密码或者SSH密钥。 2.登录服务器 使用ssh命令连接到服务器: ssh root@服务器IP地址 如果…

    Flask 2023年5月16日
    00
  • 一个基于flask的web应用诞生 记录用户账户登录状态(6)

    以下是“一个基于flask的web应用诞生 记录用户账户登录状态(6)”的完整攻略: 1. 添加用户注销功能 在用户登录成功后,我们需要给出注销的入口。在html文件中添加以下代码,链接到注销路由: {% if current_user.is_authenticated %} <li class="nav-item"> &lt…

    Flask 2023年5月15日
    00
  • Python的Flask开发框架简单上手笔记

    针对你提供的主题“Python的Flask开发框架简单上手笔记”,我会详细讲解以下内容: Flask开发框架的概述 Flask框架的安装 Flask配置和运行实例 Flask的路由和视图函数 模板的应用 Flask的扩展和数据库处理 示例1:使用Flask框架构建一个简单的在线商城 示例2:使用Flask框架构建一个简单的博客网站 以下是具体的讲解: Fla…

    Flask 2023年5月16日
    00
  • 深入理解python中的ThreadLocal

    深入理解Python中的ThreadLocal 什么是ThreadLocal ThreadLocal是Python中的threading模块提供的一种线程本地存储方式,它可以让每个线程都拥有独立的数据副本,保证了线程之间的数据互相隔离,不会相互干扰。 在多线程处理共享数据时,为了避免并发访问带来的问题,我们通常会采用锁的方式来保护共享数据。但是在使用Thre…

    Flask 2023年5月15日
    00
  • 在Python的Flask中使用WTForms表单框架的基础教程

    下面我将为您讲解在Python的Flask中使用WTForms表单框架的基础教程。 一、安装WTForms 在Python命令行中使用pip命令安装WTForms框架,方法如下: pip install WTForms 二、使用WTForms 1.创建表单类 首先,我们需要创建一个表单类来描述我们的表单。在这个表单类中,我们需要定义表单的字段类型、验证规则以…

    Flask 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部