Flask 用户认证与授权详细教程(第五阶段)

Flask 用户认证与授权详细教程

在现代Web开发中,用户身份验证和授权是非常重要的要素。这篇教程将会指导你如何使用 Flask 中的 Flask-Login 库来实现用户注册、登录、登出功能,以及如何使用 Flask-Principal 或其他 RBAC(基于角色的访问控制)解决方案来管理用户权限。

一、用户认证

1.1 安装 Flask-Login

在开始之前,我们需要安装 Flask-Login。在命令行中执行以下命令:

pip install Flask-Login

1.2 创建基本的 Flask 应用

首先,创建一个基本的 Flask 应用并配置数据库连接:

import os
from flask import Flask, render_template, redirect, url_for, flash, request
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user, current_user

app = Flask(__name__)
app.secret_key = os.urandom(24)  # 设置随机密钥
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
login_manager = LoginManager(app)
login_manager.login_view = 'login'  # 登录视图

1.3 创建用户模型

创建一个用户模型来存储用户数据。

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

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

1.4 创建数据库

在应用启动时创建数据库。这可以在其他地方执行,例如在命令行交互中。

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

1.5 加载用户回调

实现用户加载回调功能,Flask-Login 会通过用户 ID 加载用户对象。

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

1.6 用户注册

实现用户注册功能:

@app.route('/register', methods=['GET', 'POST'])
def register():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        new_user = User(username=username, password=password)
        db.session.add(new_user)
        db.session.commit()
        flash('User registered successfully!')
        return redirect(url_for('login'))
    return render_template('register.html')

创建 register.html 模板:

<!doctype html>
<html>
<head>
    <title>Register</title>
</head>
<body>
    <h1>Register</h1>
    <form method="POST">
        <label for="username">Username:</label>
        <input type="text" name="username" required>
        <br>
        <label for="password">Password:</label>
        <input type="password" 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值