博客项目需求分析

# 博客项目

### 需求分析

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

### 目录结构

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

  ### 练习

  - 实现用户信息的管理

 

posted @ 2019-01-04 19:23  青春叛逆者  阅读(751)  评论(0编辑  收藏  举报