博客项目需求分析
# 博客项目 ### 需求分析 - 用户注册登录 - 用户信息管理 - 博客发表回复 - 博客列表展示 - 博客分页展示 - 博客收藏 - 搜索、统计、排序、... ### 目录结构 ``` blog/ # 项目根目录 manage.py # 启动控制代码 requirements.txt # 依赖包类表文件 venv/ # 虚拟环境目录 migrations/ # 数据库迁移目录 tests/ # 测试模块目录 app/ # 整个程序目录 templates/ # 模板文件目录 common/ # 通用模板 email/ # 邮件模板 。。。 static/ # 静态文件目录 img/ css/ js/ favicon.ico views/ # 蓝本文件目录 models.py # 数据模型文件 forms.py # 表单类文件 config.py # 配置文件 extensions.py # 扩展文件(存放所有扩展) email.py # 邮件发送功能函数 __init__.py # 包文件 ``` ### 项目准备 - 根据目录结构,创建相关目录及文件 - 书写配置文件(就是书写各种环境的配置类) - 使用工厂方法创建应用实例,并初始化配置 - 添加各种扩展(顺便粘贴邮件发送函数) - 配置蓝本(添加各种蓝本文件,并注册) - 项目基础模板定制(顺便添加消息闪烁及测试) ### 用户管理 - 用户注册激活 - 在基础模板中添加点击跳转的链接 - 在蓝本中添加对应的视图函数,渲染指定模板文件 - 创建用户注册的模板文件 - 设计用户注册表单类,在视图函数中创建,然后模板文件中渲染 - 完成用户注册的校验逻辑 - 设计用户模型类,并完成迁移(别忘记在其他文件中导入一次) - 用户注册及激活邮件的发送流程 - 用户身份token的携带与解析 - 完整的用户注册激活流程 - 用户登录退出(flask-login) - 说明:flask-login是一个专门用来管理用户登录退出的扩展库 - 安装:`pip install flask-login` - 使用: ```python # 第一步:添加扩展 from flask_login import LoginManager login_manager = LoginManager() def config_extensions(app): ... login_manager.init_app(app) # 设置登录端点 login_manager.login_view = 'user.login' # 设置登录信息 login_manager.login_message = '请先登录,然后才能访问' # 第二步:继承自UserMixin类(也可以自己实现相关方法) from flask_login import UserMixin class User(UserMixin, db.Model): ... # 第三步:实现回调 @login_manager.user_loader def load_user(uid): return User.query.get(uid) ``` - 总结 ``` 状态切换: login_user # 可以提供记住我的功能 logout_user 状态查询: is_authenticated 登录状态 is_anonymous 匿名状态 路由保护: login_required # 保护需要登录才能访问的路由 当前用户: current_user # 哪里都可以使用,在模板中不需要分配 ``` ### 练习 - 实现用户信息的管理