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框架debug与配置项的开启与设置详解

    让我详细讲解一下“Flask框架debug与配置项的开启与设置详解”的完整攻略。这篇攻略将分为两部分:一是debug模式的开启与设置,二是Flask配置项的介绍与设置。 一、Debug模式 1.1 Debug模式的作用 Debug模式是Flask框架中非常重要的一项功能,它可以帮助我们快速定位到出现错误的代码,并提示出错原因。在开发阶段中,通常都会开启Deb…

    Flask 2023年5月16日
    00
  • Flask 入门系列 Cookie与session的介绍

    Flask 入门系列 Cookie与Session的介绍 本文将介绍 Flask 中 Cookie 和 Session 的使用方法,并给出两个示例说明。 Cookie 什么是 Cookie Cookie 是存储在客户端中的数据。它可以在不同请求之间传递,并且可以被服务器读取和修改。Cookie 最常见的应用场景是保存用户的状态信息,比如用户的登录状态。 设置…

    Flask 2023年5月16日
    00
  • Dockerfile构建一个Python Flask 镜像

    Docker 是一款划时代的容器化技术,在使用它的时候,我们会经常需要构建一个自己的 Docker 镜像,下面,我将详细讲解在 Docker 中如何构建一个 Python Flask 镜像。 1. 准备工作: 首先,我们需要在本地安装 Docker 和 Python 环境,如果你的电脑上没有安装,建议使用 Docker Desktop,和官方 Python …

    Flask 2023年5月16日
    00
  • python框架flask入门之路由及简单实现方法

    下面是完整的“Python框架Flask入门之路由及简单实现方法”的攻略,内容包括路由的基本使用和两个简单的实现方法示例。 路由的基本使用 什么是路由 Flask是一个轻量级的Python Web框架,它的核心是Werkzeug和Jinja2。其中Werkzeug是一个WSGI(Web Server Gateway Interface) 工具库,提供了Web…

    Flask 2023年5月15日
    00
  • Flask框架URL管理操作示例【基于@app.route】

    下面我将为您详细讲解”Flask框架URL管理操作示例【基于@app.route】”的完整攻略,其中包括两条示例说明。 Flask框架URL管理操作示例【基于@app.route】 在Flask框架中,基于@app.route装饰器可以实现对URL的管理操作。使用这个装饰器,我们可以非常方便地指定URL地址,并将其与相应的函数绑定起来。下面是两个具体的示例:…

    Flask 2023年5月16日
    00
  • python-Web-flask-视图内容和模板知识点西宁街

    下面就针对“python-Web-flask-视图内容和模板知识点西宁街”的完整攻略进行详细讲解,其中包含两个示例说明。 标题 1. 概述 Flask 是一个轻量级 Web 开发框架,其在视图与模板的处理方面有独特的设计思想和使用方法。 视图(View)是一种用于处理请求并返回响应的函数或方法,而模板(Template)则是一种静态文件,用于构建动态生成的 …

    Flask 2023年5月15日
    00
  • Flask response 对象详情

    Flask框架中的response对象是HTTP响应的一部分,它代表了服务器返回给客户端的的数据。在Flask中,response对象包含响应体、HTTP状态码、消息头等信息。让我们来仔细了解Flask response对象的详细内容。 响应体 响应体指的是返回给客户端的实际数据。可以通过app.route()装饰器的返回值来设置响应体。响应体可以是字符串,…

    Flask 2023年5月16日
    00
  • Python WEB应用部署的实现方法

    Python WEB应用部署的实现方法有很多,这里介绍两种常用的方法:使用Web服务器和使用容器。 使用Web服务器 Web服务器是一种比较传统且常见的部署方式,它的原理是Web服务器作为一个独立的应用程序监听特定的端口,接收HTTP请求并转发给相应的应用程序进行处理。Web服务器通常支持多种环境的应用程序部署,如WSGI、CGI等。 接下来我们以Nginx…

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