Python利用flask sqlalchemy实现分页效果

下面为你详细讲解如何利用flask sqlalchemy实现分页效果。

准备工作

首先,我们需要安装flask sqlalchemy包,可以通过 pip install flask_sqlalchemy 命令进行安装。另外,我们还需要创建一个用于存储数据的数据库。这里我们使用sqlite作为数据库,创建一个名为example.db的数据库文件,以存储数据。

创建model

在创建分页效果之前,我们需要先创建一个模型来描述我们要分页查询的数据。在本例中,我们以文章作为数据来源,创建一个名为Article的Model,如下所示:

from app import db

class Article(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100))
    content = db.Column(db.Text)

在这个模型中,我们定义了id、title和content三个字段,分别用于存储文章的编号、标题和内容。

创建视图函数

接下来,我们需要创建一个视图函数,用于处理分页请求。在这个函数中,我们需要获取当前页码、每页显示的文章数量,计算出该页面应显示的文章范围,再从数据库中获取相关文章,并返回给客户端。

from flask import Blueprint, render_template, request
from app.models import Article

pagination = Blueprint('pagination', __name__)

@pagination.route('/')
def index():
    # 获取当前页码,默认为1
    page = request.args.get('page', 1, type=int)

    # 获取每页显示的文章数量,默认为10
    per_page = request.args.get('per_page', 10, type=int)

    # 计算当前页面应显示的文章范围
    start = (page - 1) * per_page
    end = start + per_page

    # 从数据库中获取相关文章
    articles = Article.query.slice(start, end)

    # 计算总文章数
    total = Article.query.count()

    return render_template('index.html', articles=articles, total=total, page=page, per_page=per_page)

在这个视图函数中,我们首先通过request.args.get()方法获取当前页码和每页显示的文章数量,在没有指定的情况下,分别默认设为1和10。接着,我们根据当前页码和每页显示的文章数量,计算出该页面应显示的文章范围,使用slice()方法从数据库中获取相关文章。最后,我们还需要通过query.count()方法计算出总共有多少篇文章,以便于在页面中计算页数和显示分页控件。

编写模板页面

最后,我们需要编写模板页面,将获取到的文章列表渲染到页面上。在模板中,我们可以使用flask自带的分页控件,来快速实现分页效果。具体代码如下:

{% extends 'base.html' %}

{% block content %}
    <h1>文章列表</h1>
    <ul>
        {% for article in articles %}
            <li>{{ article.title }}</li>
            <p>{{ article.content }}</p>
        {% endfor %}
    </ul>

    {% if total > per_page %}
        <div class="pagination">
            {% if page > 1 %}
                <a href="{{ url_for('pagination.index', page=page-1) }}">上一页</a>
            {% endif %}

            {% if page > 2 %}
                <a href="{{ url_for('pagination.index', page=1) }}">1</a>
                {% if page > 3 %}
                    <span>...</span>
                {% endif %}
            {% endif %}

            {% if page-1 > 0 %}
                <a href="{{ url_for('pagination.index', page=page-1) }}">{{ page-1 }}</a>
            {% endif %}

            <a href="{{ url_for('pagination.index', page=page) }}" class="active">{{ page }}</a>

            {% if page+1 <= total_pages %}
                <a href="{{ url_for('pagination.index', page=page+1) }}">{{ page+1 }}</a>
            {% endif %}

            {% if total_pages-page > 2 %}
                {% if page+2 < total_pages %}
                    <span>...</span>
                {% endif %}
                <a href="{{ url_for('pagination.index', page=total_pages) }}">{{ total_pages }}</a>
            {% endif %}

            {% if page < total_pages %}
                <a href="{{ url_for('pagination.index', page=page+1) }}">下一页</a>
            {% endif %}
        </div>
    {% endif %}
{% endblock %}

在这个模板页面中,我们首先循环遍历文章列表,将每篇文章的标题和内容渲染到页面上。接着,我们判断总文章数是否大于每页显示的文章数量,如果是,则显示分页控件。在分页控件中,我们通过跳转不同的url,实现页面跳转,并计算出当前页面对应的页码。其中,上一页、下一页、第一页和最后一页的跳转url,分别对应pagination.index的不同参数。而中间的页码,通过计算上一页和下一页的页码,以及当前页码,来计算得出。

示例演示

以下是两条示例说明,欢迎查看。

示例1

如果我们想要在我们的flask应用中使用分页效果,可以按照以下步骤操作:

  1. 安装flask_sqlalchemy包,并创建一个用于存储数据的sqlite数据库文件。
  2. 创建一个名为Article的model,描述我们要分页查询的数据。
  3. 创建一个视图函数,处理分页请求,并返回相应的数据。
  4. 创建一个模板页面,将获取到的文章列表渲染到页面上,显示分页控件。

通过以上步骤,我们就可以实现分页效果了。

示例2

以下是一个完整的代码演示:

from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)

class Article(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100))
    content = db.Column(db.Text)

@app.route('/')
@app.route('/<int:page>')
def index(page=1):
    PER_PAGE = 10
    articles = Article.query.order_by(Article.id.desc()).paginate(page, PER_PAGE)
    return render_template('index.html', articles=articles)

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

在这个示例中,我们创建了一个名为Article的Model,并在视图函数中调用paginate()方法来获取相关文章,并将结果渲染到页面上。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python利用flask sqlalchemy实现分页效果 - Python技术站

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

相关文章

  • Flask如何接收前端ajax传来的表单(包含文件)

    要让Flask能够接收前端Ajax传来的表单数据(包括文件),需要注意以下几个步骤: 在前端使用ajax请求时,需要将请求内容以FormData的形式打包,以支持传输文件。 在Flask后端,需要使用request.form和request.files两个对象分别获取表单字段和文件数据。 某些情况下,上传文件时需要设置Flask应用程序的配置,以支持文件上传…

    Flask 2023年5月16日
    00
  • Flask的图形化管理界面搭建框架Flask-Admin的使用教程

    下面是详细讲解 Flask-Admin 工具的使用教程: 一、Flask-Admin 简介 Flask-Admin 是一个为 Flask 应用程序提供图形化管理界面的插件。Flask-Admin 可以轻松添加表单、搜索、过滤以及图表等多种功能,并提供各种插件,方便开发人员快速开发管理页面。 二、安装 Flask-Admin 首先,我们需要通过 pip 安装 …

    Flask 2023年5月15日
    00
  • python:动态路由的Flask程序代码

    我将为您详细讲解“python:动态路由的Flask程序代码”的完整攻略。在本攻略中,我们将以 Flask 框架为基础,使用 Python 语言开发一个具备动态路由功能的 Web 应用程序。 准备工作 在开始编写 Flask 程序之前,我们需要安装 Flask 并导入所需的模块。可以使用 Pip 工具来安装 Flask: pip install Flask …

    Flask 2023年5月15日
    00
  • Flask之请求钩子的实现

    Flask中有四个请求钩子,分别是before_first_request、before_request、after_request和teardown_request。这些钩子可以使得我们在请求处理的过程中,注入自己的代码逻辑,比如在请求之前或之后进行操作。 下面我们就逐个讲解这四个请求钩子的实现。 1. before_first_request befor…

    Flask 2023年5月15日
    00
  • Python Flask框架实现简单加法工具过程解析

    接下来我将详细讲解“Python Flask框架实现简单加法工具过程解析”的完整攻略。 Python Flask框架实现简单加法工具过程解析 什么是Python Flask框架 Flask是Python的一个微框架,它的核心是Werkzeug和Jinja2。 Flask的设计非常简单,代码易读易理解,适合用于小型Web应用的开发。它是一个轻量级的框架,具有易…

    Flask 2023年5月15日
    00
  • 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
  • 在Python的Flask框架下使用sqlalchemy库的简单教程

    如果你准备使用Python Flask框架来开发web应用程序,那么SQLAlchemy库可以帮助你轻松与数据库进行交互。下面是一个基于Python Flask框架和SQLAlchemy库的简单教程: 安装依赖 在开始之前,请确保已经安装了Python和pip工具。然后,你需要使用pip安装Flask和SQLAlchemy库,你可以在命令行中输入以下命令: …

    Flask 2023年5月15日
    00
  • Flask框架学习笔记(一)安装篇(windows安装与centos安装)

    下面我来详细讲解一下“Flask框架学习笔记(一)安装篇(Windows安装与CentOS安装)”这篇文章的完整攻略。 安装篇 1. Windows安装 1.1 安装Python环境 首先,我们需要在Windows系统中安装Python环境。进入Python官网(https://www.python.org/downloads/windows/),选择最新版…

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