# 博客项目
### 需求分析
- 用户注册登录
- 用户信息管理
- 博客发表回复
- 博客列表展示
- 博客分页展示
- 博客收藏
- 搜索、统计、排序、...
### 目录结构
```
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 # 哪里都可以使用,在模板中不需要分配
```
### 练习
- 实现用户信息的管理