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日

相关文章

  • 详解Python flask的前后端交互

    本文将详细讲解如何使用Python flask实现前后端交互。主要分为以下几个部分: 安装Flask框架 创建Flask应用 构建接口 前端页面的编写 进行前后端交互 1. 安装Flask框架 在安装Flask之前,请确保你已经安装了Python环境。安装Flask的方法有多种,这里介绍pip安装方式。 可以运行以下命令来安装Flask: pip insta…

    Flask 2023年5月15日
    00
  • pyecharts结合flask框架的使用

    Pyecharts是一款基于Echarts的Python可视化库,可以快速地生成丰富、交互性强的数据可视化图表。Flask是一款使用Python编写的轻量级Web框架,可实现快速构建Web应用程序。结合Pyecharts和Flask,可以非常方便地搭建可视化Web应用程序,使得数据可视化和Web开发更加紧密地结合在一起。 下面介绍一下如何使用Pyechart…

    Flask 2023年5月15日
    00
  • 10款最好的Web开发的 Python 框架

    为了详细地讲解 “10款最好的Web开发的 Python 框架”的完整攻略,我们可以分成以下几个方面来介绍。 简介 首先,我们需要概述一下什么是Python框架。Python框架是指一套可用于Web应用程序的API(应用程序编程接口)。它们可以帮助Python开发人员更好地处理Web请求、路由URL、管理安全性、处理输入输出等应用程序功能。 Web开发常见的…

    Flask 2023年5月16日
    00
  • Flask sqlalchemy一对多与多对一与一对一及多对多关系介绍

    下面给您详细讲解“Flask sqlalchemy一对多与多对一与一对一及多对多关系介绍”的完整攻略。 一对多关系 一对多关系适用于一个模型拥有多个其他模型的实例,但是其他模型的实例只属于一个模型实例。比如一个用户可以拥有多篇文章,但是一篇文章只属于一个用户。 在 Flask sqlalchemy 中可以使用 relationship 属性来建立一对多关系,…

    Flask 2023年5月15日
    00
  • 基于flask实现五子棋小游戏

    下面我就来详细讲解“基于flask实现五子棋小游戏”的完整攻略。 1. 确定游戏规则 在开发五子棋小游戏之前,需要明确游戏规则。五子棋规则简述:两人轮流在棋盘上落子,黑方先行。当一方先在横、竖或斜行连续放置五个棋子时,游戏结束,该方胜利。 2. 创建项目及相关文件 在命令行下进入项目文件夹,执行以下命令创建项目: mkdir flask_gobang cd …

    Flask 2023年5月15日
    00
  • flask解析海康摄像头视频的使用

    首先,需要明确一下什么是Flask。Flask是一个基于Python的轻量级Web框架,开发者可以使用Flask快速构建Web应用程序。这里将介绍如何使用Flask解析海康摄像头视频。 步骤一:安装Flask和相关依赖 在开始之前,需要先安装Flask以及相关依赖。可以使用pip安装,执行以下命令: pip install flask flask-cors …

    Flask 2023年5月16日
    00
  • Python Tornado之跨域请求与Options请求方式

    下面是针对“Python Tornado之跨域请求与Options请求方式”的完整攻略,包含两条示例说明: 背景 在开发Web应用中,经常会遇到前后端分离的开发模式。面对前后端分离开发,跨域请求就成了常见问题之一。本篇攻略将详细介绍如何使用Python Tornado进行跨域请求。 跨域请求 跨域请求是指从一个域的应用中执行JavaScript代码去请求另一…

    Flask 2023年5月15日
    00
  • flask 框架操作MySQL数据库简单示例

    下面是详细的“flask 框架操作MySQL数据库简单示例”教程: 1. 准备工作 在开始之前,你需要先安装好Python和MySQL,同时安装好以下两个Python库:- Flask:一个基于 Python 的轻量级 Web 应用框架- Flask-MySQLdb:一个用于在 Flask 应用中连接和操作 MySQL 数据库的库 以macOS系统为例,可以…

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