【Flask开发】嘿马文学web完整flask项目第7篇:1.项目目录实现,2.数据库的设计【附代码文档】

61 阅读1分钟

🏆🏆🏆教程全知识点简介:1. 内容 2. 目标 1.1产品与开发 1.2环境配置 1.3 运行方式 1.4目录说明 2.用户认证 2.1微某信平台 Json Web Token(JWT) 定义路由,书架管理--添加书籍 3.书架 4.1分类列表 5.搜索 5.3搜索-精准&高匹配&推荐 6.小说 6.4推荐-同类热门推荐 7.浏览记录 8.1配置-阅读偏好 8.配置 9.1项目部署uWSGI 配置 启动 9.部署 10.1异常和日志 10.补充 10.2 flask-restful 1.项目目录实现 2.数据库的设计 3.数据库迁移: 1.JWT:json web token 2.jwt工具的封装 4.用户权限校验 5.登录验证装饰器 1.书架列表 2.书架管理 3.最后阅读 2.分类书籍列表 3.热门搜索 7.3小说-详情 2.小说目录 2.阅读偏好 3.阅读设置


📚📚👉👉👉本站这篇博客:   juejin.cn/post/751044…    中查看

📚📚👉👉👉本站这篇博客:   juejin.cn/post/751044…    中查看

✨ 本教程项目亮点

🧠 知识体系完整:覆盖从基础原理、核心方法到高阶应用的全流程内容
💻 全技术链覆盖:完整前后端技术栈,涵盖开发必备技能
🚀 从零到实战:适合 0 基础入门到提升,循序渐进掌握核心能力
📚 丰富文档与代码示例:涵盖多种场景,可运行、可复用
🛠 工作与学习双参考:不仅适合系统化学习,更可作为日常开发中的查阅手册
🧩 模块化知识结构:按知识点分章节,便于快速定位和复习
📈 长期可用的技术积累:不止一次学习,而是能伴随工作与项目长期参考


🎯🎯🎯全教程总章节


🚀🚀🚀本篇主要内容

1.项目目录实现

  • 建议:在单个的脚本文件中,实现基本功能,Flask实现基本程序,基本配置信息数据库、蓝图,然后,把文件进行拆分。
    • 1、在pycharm中新建hmwx_backend项目
    • 2、在pycharm中选择创建的虚拟环境python解释器
    • 3、创建项目启动文件manage.py,实现Flask的基本程序
    • 4、在manage.py文件中,实现项目的基本配置,数据库配置、脚本管理器、数据库迁移扩展等
    • 5、实现蓝图、工厂函数的封装
    • 6、拆分代码,首先拆分配置信息config.py,拆分程序实例app的工厂函数,拆分蓝图对象
    • 7、后续根据具体的功能,新创建文件或文件夹

2.数据库的设计

  • 根据产品原型进行数据库的设计;

  • 数据库中需要存储的数据;

    • 表结构
    • 字段类型
    • 索引设计
    • 引擎的选择
  • 词性分析法,名词体现表或字段,动词体现关系。

3.数据库迁移:

  • 前提:数据库必须先创建。

  • 迁移:创建数据库表;需要使用两个扩展包;

    • flask-script:脚本管理器
    • flask-migrate:迁移的框架和命令
  • 使用步骤:

    • 1、生成迁移仓库(文件夹):python manage.py db init
    • 2、生成迁移脚本:python manage.py db migrate -m init_tables
    • 3、执行迁移脚本:python manage.py db upgrade,执行完成,数据库表创建成功。

bcrypt 文档

aioredis 文档

1.JWT:json web token

Psycopg2 文档

  • 概念:字符串;
  • 作用:实现状态保持的一种方案,cookie和session;
  • JWT token:服务器不保存,
    • header:头,存储基本的加密算法。
    • payload:载荷,存储业务数据,比如用户id,expire过期时间。
    • signature:签名,确保信息不会被修改。
    • token = header + payload + signature

2.jwt工具的封装

  • 安装pyjwt模块

  • 在lib目录下,封装jwt_utils.py封装工具代码

  • # jwt工具的封装
    # 步骤:
    # 1.导入jwt模块
    # 2.封装jwt生成的函数,必须要有密钥secret_key
    	# 返回token
    # 3.封装jwt校验的函数
    	# 返回payload
    

3.用户登录

  • 登录接口的实现步骤:

    • 1、获取参数code
    • 2、获取参数iv、envryptedData
    • 3、调用微某信工具,获取session_key
    • 4、根据session_key,调用微某信工具,获取用户信息
    • 5、判断是否获取到openID
    • 6、保存用户数据
      • 查询mysql数据库,判断openID是否存在
      • 如果openID不存在,保存用户信息
      • 否则,更新用户信息
    • 7、调用jwt工具,生成token
    • 8、返回数据
  • 封装工具,生成token的有效期

    • 有效期:24小时;

    • 当前时间:datetime获取当前时间,时间差操作timedelta

    • 总结:

    • 1、生成当前时间
      2、根据时间差,指定token的过期时间,
      3、调用jwt工具,传入过期时间
      4、返回token
      

4.用户权限校验

  • 需求:在每次请求前,校验用户的身份信息,从token中提取用户id
  • 使用请求钩子实现,在每次请求前都会执行,@app.before_request
  • g对象:应用上下文对象,在请求过程中可以临时存储数据。
  • 实现步骤:
    • 1.封装工具,/lib/middlewrares.py
    • 2.定义函数,获取用户头信息,Authorization
    • 3.从payload中提取用户id,把用户id赋值给g对象

5.登录验证装饰器

  • 需求:取出用户信息后,判断用户是否登录,如果登录后,可以进入视图,否则不允许进入视图。
  • 实现步骤:
    • 1、封装工具,/lib/decoraters.py
    • 2、定义装饰器
    • 3、判断用户id是否存在,从g对象中尝试获取用户id
    • 4、返回结果

Jinja2 模板文档

Flask 部署选项

SQLAlchemy 文档

1.书架列表

  • 用户需要登录才能访问,本质是携带token
  • 实现步骤:在applet_app/新创建蓝图
    • 1.添加登录验证装饰器
    • 2.默认查询书架中的所有书籍数据,排序
    • 3.判断查询结果
      • 如果书架没有书籍,随机挑选5本书籍,存入书架中
    • 4.返回书籍数据

2.书架管理

  • 添加删除操作的准备工作:

    • 用户必须要登录
    • 需要参数书籍id
  • 添加书架书籍的实现步骤:POST

    • 1.添加登录验证装饰器
    • 2.接收参数,书籍id
    • 3.根据书籍id、用户id,查询书架表,确认数据的存在
    • 4.查询书架表,确认该书在书架中是否存在
    • 5.如果书架中不存在,添加书籍。
  • 删除书架书籍的实现步骤:DELETE

    • 1.添加登录验证装饰器
    • 2.接收参数,书籍id
    • 3.根据书籍id、用户id,查询书架表,确认数据的存在
    • 4.删除书籍

3.最后阅读

  • 书架中书籍的阅读情况,用户最后阅读的书籍,以及对应的章节。
  • 实现步骤:
    • 1.使用登录验证装饰器,获取用户信息
    • 2.判断用户是否有阅读书籍
    • 3.如果用户没有阅读,默认查询第一本书籍,当做用户的阅读书籍
    • 4.查询该书籍的章节信息,默认升序排序,
      • 把查询结果,存入阅读进度表
    • 5.如果用户阅读书籍,查询用户阅读的书籍
    • 6.判断是否有阅读进度,如果没有,查询阅读进度表
    • 7.返回查询结果

1.分类列表

  • 需求:展示书籍分类列表数据,用户分类、书籍分类列表,大分类;
    • 实现步骤:
    • 1.用户参数,性别参数
    • 2.根据性别,查询大分类数据

tqdm 文档

  • 3.遍历大分类列表数据,保存
  • 4.可以通过关系引用,获取大分类下面的二级分类数据
  • 5.返回分类数据

2.分类书籍列表

  • 接口设计:
请求地址:‘/categories/filters’
请求方法:GET
请求参数:
参数名称			参数类型			是否必须				参数说明
page					int					True					当前页数
pagesize			int					True					每页书籍数据的条目数
category_id		int					True					书籍分类id
words					int					True					数据字数分类
order					int					True					排序条件

返回结果:
{
  'title':名称,
  'author':...
  ...
}

  • 实现步骤:
  • 1.获取参数
  • 2.根据分类条件category_id,查询数据,查询书籍大分类数据
  • 3.判断查询结果,根据大分类数据,使用关系引用,获取二级分类数据
  • 4.根据分类数据,查询书籍表,获取分类范围内的书籍数据
  • 5.根据字数条件words查询书籍数据
  • 6.根据排序条件order,按照最热、收藏数量进行排序查询
  • 7.对查询结果进行分页处理,paginate
  • 8.遍历分页数据,