🏆🏆🏆教程全知识点简介: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,执行完成,数据库表创建成功。
1.JWT:json web token
- 概念:字符串;
- 作用:实现状态保持的一种方案,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、返回结果
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.根据性别,查询大分类数据
- 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.遍历分页数据,