flask sqlite 分页
2023-05-04 本文已影响0人
追梦人在路上不断追寻
在 Flask 中使用 SQLite 实现分页也是十分简单的,可以通过 Flask-SQLAlchemy 扩展来实现。以下是一个简单的 Flask-SQLAlchemy 分页示例:
首先,安装 Flask 和 Flask-SQLAlchemy:
pip install Flask Flask-SQLAlchemy
然后,在 Flask 应用程序中创建一个 SQLAlchemy 实例:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'
db = SQLAlchemy(app)
接下来,定义一个数据模型,这里以一个简单的用户模型为例:
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
然后,定义一个视图函数来处理分页请求:
from flask import render_template, request
@app.route('/users')
def users():
page = request.args.get('page', 1, type=int)
per_page = request.args.get('per_page', 10, type=int)
users = User.query.paginate(page=page, per_page=per_page)
return render_template('users.html', users=users)
这个视图函数接受两个参数:page 和 per_page。page 表示当前页码,per_page 表示每页显示的记录数。默认情况下,page 和 per_page 分别为 1 和 10。
最后,创建一个模板 users.html 来显示分页数据:
{% extends "base.html" %}
{% block content %}
<table>
<tr>
<th>ID</th>
<th>Username</th>
<th>Email</th>
</tr>
{% for user in users.items %}
<tr>
<td>{{ user.id }}</td>
<td>{{ user.username }}</td>
<td>{{ user.email }}</td>
</tr>
{% endfor %}
</table>
{% if users.has_prev %}
<a href="{{ url_for('users', page=users.prev_num, per_page=users.per_page) }}">Prev</a>
{% endif %}
{% if users.has_next %}
<a href="{{ url_for('users', page=users.next_num, per_page=users.per_page) }}">Next</a>
{% endif %}
{% endblock %}
这个模板使用了 Jinja2 模板引擎,通过 users.items 来遍历分页数据,使用 users.has_prev 和 users.has_next 来判断是否有上一页和下一页的链接。
总的来说,Flask-SQLAlchemy 提供了非常方便的分页功能,可以轻松地实现分页功能。