实战篇:用户管理模块开发

实战篇:用户管理模块开发

用户管理模块简介

用户管理模块是大多数Web应用的核心组件之一,它负责处理用户的注册、登录、信息展示、编辑和删除等操作。

项目结构

假设你已经根据之前讨论的结构组织了你的Flask项目。

第1步:定义用户模型

app/models/models.py中定义用户模型。

python 复制代码
from app import db
from werkzeug.security import generate_password_hash, check_password_hash

class User(db.Model):
    __tablename__ = 'users'
    
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    password_hash = db.Column(db.String(128))

    def set_password(self, password):
        self.password_hash = generate_password_hash(password)

    def check_password(self, password):
        return check_password_hash(self.password_hash, password)

    def __repr__(self):
        return '<User %r>' % self.username
第2步:创建数据库迁移

使用Flask-Migrate来创建新的数据库迁移。

bash 复制代码
flask db init  # 初始化迁移目录
flask db migrate -m "Add user table"
flask db upgrade  # 应用迁移
第3步:注册和登录路由

app/routes/routes.py中创建注册和登录的路由。

python 复制代码
from flask import render_template, request, redirect, url_for, flash
from werkzeug.security import generate_password_hash
from app.models.models import User
from app import db

@app.route('/register', methods=['GET', 'POST'])
def register():
    if request.method == 'POST':
        username = request.form['username']
        email = request.form['email']
        password = request.form['password']
        hashed_password = generate_password_hash(password, method='sha256')
        
        new_user = User(username=username, email=email)
        new_user.set_password(hashed_password)
        db.session.add(new_user)
        db.session.commit()
        
        flash('Your account has been created! You are now able to log in', 'success')
        return redirect(url_for('login'))
    return render_template('register.html')

@app.route('/login', methods=['GET', 'POST'])
def login():
    # 登录逻辑
    pass

@app.route('/logout')
def logout():
    # 登出逻辑
    pass
第4步:用户认证

使用Flask-Login来处理用户认证。

python 复制代码
from flask_login import LoginManager, login_user, logout_user, login_required

login_manager = LoginManager()
login_manager.init_app(app)

@login_manager.user_loader
def load_user(user_id):
    return User.query.get(int(user_id))
第5步:用户资料页面

创建一个路由来展示用户的资料。

python 复制代码
@app.route('/profile')
@login_required
def profile():
    user = current_user
    # 展示用户资料逻辑
    pass
第6步:用户编辑页面

允许用户编辑他们的个人信息。

python 复制代码
@app.route('/edit-profile', methods=['GET', 'POST'])
@login_required
def edit_profile():
    user = current_user
    if request.method == 'POST':
        # 更新用户信息逻辑
        pass
    return render_template('edit_profile.html', user=user)
第7步:测试用户管理模块

tests/test_models.pytests/test_routes.py中编写测试用例。

python 复制代码
# 测试用户模型
def test_user_creation(app):
    user = User(username='testuser', email='test@example.com')
    db.session.add(user)
    db.session.commit()
    assert User.query.first() is not None

# 测试注册路由
def test_register_route(client):
    response = client.post('/register', data={'username': 'testuser', 'email': 'test@example.com', 'password': 'testpassword'})
    assert response.status_code == 302  # or the appropriate status code
结语

在本实战篇中,我们开发了一个基本的用户管理模块,包括注册、登录、登出、用户资料展示和编辑功能。每个功能都有对应的路由和模板。


记得在开发过程中编写测试用例,并确保它们通过。这将帮助你确保代码的质量,并在将来重构或添加新功能时提供安全网。此外,考虑使用Flask-Security或Flask-User等扩展来简化用户认证和管理工作。

相关推荐
万少3 小时前
用腻了 WorkBuddy 的默认界面?这个开源小工具给它换上了毛玻璃
前端·javascript·后端
皮皮林5515 小时前
代码越“整洁”,性能越“拉胯”?
后端
benchmark_cc5 小时前
如何用 Python + QuantDash 快速构建高胜率“配对交易(Pairs Trading)”策略?
开发语言·人工智能·python·pandas·量化交易·quantdash
金金金__6 小时前
一篇文章带你入门OpenSpec
后端
阿维的博客日记6 小时前
MultipartFile 是不是表示仅仅是一个分片?
java·后端·spring·multipartfile
海上彼尚6 小时前
Nodejs也能写Agent - 16.LangGraph篇 - 条件分支与循环
前端·后端·langchain·node.js
Python+997 小时前
Java 枚举类(Enum)详解:从基础到高级应用
java·开发语言·python
dunge20268 小时前
2026年7月最新ChatGPT Plus / Pro 与 Codex:当 AI Agent 最新5.6版本来袭,必须理解事务、幂等与补偿
开发语言·人工智能·python
Dovis(誓平步青云)8 小时前
远程办公软件文件传输实测:6 款工具的速度、稳定性和办公体验对比
linux·运维·服务器·后端·生成对抗网络
凌虚9 小时前
AI 时代,程序员会消失吗?
人工智能·后端·程序员