4 Flask扩展

Flask 是一个轻量级的 Python Web 框架,核心功能非常精简,但其强大的扩展生态使得开发者能够轻松构建复杂的 Web 应用。Flask 扩展可以为应用添加数据库 ORM、表单验证、用户认证等功能,让开发更加高效。

本文将介绍几个常用的 Flask 扩展,并演示它们的基本使用方法,包括:

  • Flask-SQLAlchemy(ORM 数据库操作)
  • Flask-WTF(表单处理)
  • Flask-Login(用户身份验证)

1. Flask-SQLAlchemy:数据库 ORM 操作

Flask-SQLAlchemy 是 Flask 官方推荐的 ORM 扩展,它基于 SQLAlchemy,可以让你更方便地管理数据库,而无需手写 SQL 语句。

安装 Flask-SQLAlchemy

pip install flask-sqlalchemy

配置 Flask-SQLAlchemy

app.py 中配置数据库连接(以 SQLite 为例):

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'  # 使用 SQLite 数据库
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

定义数据模型

使用 SQLAlchemy 定义数据模型(如用户表):

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)

    def __repr__(self):
        return f'<User {self.username}>'

创建数据库表

with app.app_context():
    db.create_all()

数据库操作示例

添加数据

new_user = User(username='Alice', email='alice@example.com')
db.session.add(new_user)
db.session.commit()

查询数据

user = User.query.filter_by(username='Alice').first()
print(user.email)

更新数据

user.email = 'newalice@example.com'
db.session.commit()

删除数据

db.session.delete(user)
db.session.commit()

2. Flask-WTF:表单处理与验证

Flask-WTF 是基于 WTForms 的 Flask 扩展,它简化了表单的创建、验证和 CSRF 保护。

安装 Flask-WTF

pip install flask-wtf

配置 Flask-WTF

app.py 中配置 CSRF 保护:

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, Email

app.config['SECRET_KEY'] = 'your_secret_key'  # 必须设置 SECRET_KEY 以启用 CSRF 保护

创建表单类

定义一个用户登录表单:

class LoginForm(FlaskForm):
    email = StringField('Email', validators=[DataRequired(), Email()])
    password = PasswordField('Password', validators=[DataRequired()])
    submit = SubmitField('Login')

在视图函数中处理表单

from flask import render_template, request

@app.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        email = form.email.data
        password = form.password.data
        return f'Login successful for {email}'
    return render_template('login.html', form=form)

在模板中渲染表单

templates/login.html 中:

<form method="POST">
    {{ form.hidden_tag() }}  <!-- CSRF 令牌 -->
    <p>{{ form.email.label }} {{ form.email() }}</p>
    <p>{{ form.password.label }} {{ form.password() }}</p>
    <p>{{ form.submit() }}</p>
</form>

这样,我们就完成了一个简单的登录表单,并使用 Flask-WTF 进行表单验证。


3. Flask-Login:用户身份验证

Flask-Login 是 Flask 的用户认证扩展,它提供了用户登录、登出和会话管理功能。

安装 Flask-Login

pip install flask-login

配置 Flask-Login

app.py 中初始化 Flask-Login:

from flask_login import LoginManager, UserMixin, login_user, logout_user, login_required, current_user

login_manager = LoginManager(app)
login_manager.login_view = 'login'

创建用户模型

class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    password = db.Column(db.String(120), nullable=False)

@login_manager.user_loader
def load_user(user_id):
    return User.query.get(int(user_id))

用户登录

@app.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        user = User.query.filter_by(username=form.email.data).first()
        if user and user.password == form.password.data:  # 这里应该使用哈希加密验证
            login_user(user)
            return 'Login successful'
    return render_template('login.html', form=form)

保护路由(需要登录)

@app.route('/dashboard')
@login_required
def dashboard():
    return f'Welcome, {current_user.username}!'

用户登出

@app.route('/logout')
@login_required
def logout():
    logout_user()
    return 'You have been logged out.'

这样,我们就完成了用户登录、登出和访问保护功能。


4. 其他常见 Flask 扩展

除了上面介绍的 Flask-SQLAlchemy、Flask-WTF 和 Flask-Login,Flask 还有许多其他常用扩展:

Flask 扩展功能
Flask-Migrate数据库迁移管理(基于 Alembic)
Flask-Mail发送邮件功能
Flask-Caching缓存管理,提高应用性能
Flask-RESTful构建 REST API
Flask-JWT-Extended使用 JWT 进行身份验证

Flask 之所以流行,除了其轻量级和易用性外,还因为其丰富的扩展生态,使开发者能够轻松地集成数据库、表单验证、用户认证等功能。

  • Flask-SQLAlchemy:简化数据库操作,提供 ORM 功能
  • Flask-WTF:处理表单数据并进行验证
  • Flask-Login:用户身份验证和会话管理

如果你正在开发 Flask Web 应用,掌握这些扩展能够让你更高效地构建安全、健壮的应用。

如果你有任何问题或建议,欢迎在评论区交流! 🚀

更多请关注wx公众号 “学GIS的小宝同学”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值