博客项目需求分析

# 博客项目

### 需求分析

- 用户注册登陆
- 用户信息管理
- 博客发表回复
- 博客列表展现
- 博客分页展现
- 博客收藏
- 搜索、统计、排序、...

### 目录结构

```
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        # 哪里均可以使用,在模板中不须要分配
    ```

  ### 练习

  - 实现用户信息的管理
相关文章
相关标签/搜索