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

yizhihongxing

笔者将为你详细讲解“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日

相关文章

  • go-cqhttp权限管理系统的实现代码

    Go-CQHTTP是一个开源的机器人框架,它支持大部分的跨语言插件、多种数据源及事件驱动的机器人开发方案。其中,权限系统是Go-CQHTTP中的一个非常重要的组成部分,这个系统决定了每个用户在机器人中的权限等级及可执行的操作。 权限管理系统的实现代码 Go-CQHTTP使用bolt作为数据源存储权限数据,权限数据存储在bolt的文件中。在Go-CQHTTP启…

    Flask 2023年5月16日
    00
  • flask路由分模块管理及自定义restful响应格式详解

    让我来详细讲解一下 “flask路由分模块管理及自定义restful响应格式详解”。 分模块管理路由 对于复杂的 Flask 应用程序,通常需要将路由根据其功能进行分类和组织。这便是 Flask 蓝图的用处。蓝图可以让我们更好的组织视图函数及其关联的路由。 以下是 Flask 蓝图的使用方式: 导入 Blueprint 类 pythonfrom flask …

    Flask 2023年5月16日
    00
  • Python的Flask框架中集成CKeditor富文本编辑器的教程

    下面我来详细讲解如何在Python的Flask框架中集成CKeditor富文本编辑器。 步骤一:安装Flask和CKEditor库 首先确保已经安装了Flask和CKEditor库。如果没有安装,可以使用以下命令进行安装: pip install flask-ckeditor 步骤二:配置Flask应用 在Flask应用的配置文件中,添加以下代码段: fro…

    Flask 2023年5月16日
    00
  • Python SqlAlchemy动态添加数据表字段实例解析

    下面我将详细讲解“Python SqlAlchemy动态添加数据表字段实例解析”的完整攻略,包含两条示例说明。 1. SqlAlchemy动态添加数据表字段的实现 SqlAlchemy是Python的一个ORM(Object Relational Mapping)框架,用于操作关系型数据库。在SqlAlchemy中实现动态添加数据表字段的方法如下: (1)定…

    Flask 2023年5月16日
    00
  • Flask 让jsonify返回的json串支持中文显示的方法

    要让 Flask 中使用 jsonify 返回的 JSON串支持中文显示,需要进行如下设置: 引入 json_dumps_settings 模块,该模块可以设置序列化 JSON 数据时的一些选项。例如:ensure_ascii 参数可以指示是否对非 ASCII 字符进行转义。默认值是 True,即默认情况下会将非 ASCII 字符转义为 Unicode 对象…

    Flask 2023年5月16日
    00
  • Flask框架各种常见装饰器示例

    下面我将为您详细讲解“Flask框架各种常见装饰器示例”的完整攻略。 Flask框架常见装饰器 在Flask框架中,装饰器是一种常见的编程技术,可以用来修改或者增强函数或类的功能。本文将介绍一些在Flask框架中常见的装饰器的实现方法。 1. @route装饰器 @route 装饰器是Flask框架中最常见的装饰器之一,用于绑定URL到视图函数。下面是一个简…

    Flask 2023年5月15日
    00
  • Python Flask前端自动登录功能实现详解

    下面我将详细讲解“Python Flask前端自动登录功能实现详解”的完整攻略。 一、背景 近年来,随着人们对于前端交互的要求越来越高,前端自动登录也成为了一个重要的需求。Python Flask作为一种轻量级的Web应用框架,也提供了相关的实现方式。 二、实现方法 在Python Flask中,实现前端自动登录的方式一般有两种方法:基于Cookie和基于S…

    Flask 2023年5月15日
    00
  • 推荐值得学习的12款python-web开发框架

    推荐值得学习的12款python-web开发框架 Python作为一种非常流行的编程语言,在web开发的领域也有着广泛的应用。本篇文章将介绍12个可能最值得学习的Python web开发框架。 1. Django Django是一个非常流行的Python web开发框架,它简单易用,构建快速且稳定。Django能够实现快速搭建web应用的目的,并提供管理后台…

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