
教程全知识点简介: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.阅读设置


6.小说
-
小说-目录
-
小说-阅读
-
小说-详情
6.4推荐-同类热门推荐
-
在applet_app/recommend.py文件中实现业务。
1-1 推荐-同类热门推荐接口设计
- 接口名称:推荐-同类热门推荐
- 接口路径:/recommended/hots/categoryID
- 请求方法:GET
- 请求参数:
| 参数名称 | 是否必须 | 参数位置 | 备注 |
|---|---|---|---|
| category_id | True | URL固定参数 | 分类id |
- 返回数据:
[
{
"author": "",
"categoryID": 1,
"categoryName": null,
"id": 3,
"imgURL": "http://pu3lpnbqt.bkt.clouddn.com/FmSp0N1hXyavvMoZK3ik65F1otzZ",
"introduction": "",
"state": 1,
"title": "嫁入豪门成宠妻"
},
...
]
1-2 推荐-同类热门推荐的基本业务:
-
根据分类id查询数据库书籍大分类表
-
如果存在大分类数据
- 遍历查询结果的大分类数据,使用关系引用,获取二级分类数据
- 查询数据库书籍表,根据书籍分类id,过滤分类书籍数据,取4条
- 遍历查询结果,添加数据
-
否则,查询数据库书籍表,默认返回4条数据。
1-3 代码实现
1、定义recommend蓝图
from flask import Blueprint
bp = Blueprint('recommend', __name__)
2、定义视图
@bp.route('/hots/<int:cate_id>')
def hot_books(cate_id):
"""
推荐-同类热门推荐
推荐返回 4 条
:param cate_id:
:return:
"""
big_cate = BookBigCategory.query.get(cate_id)
books = []
if big_cate:
second_ids = [i.cate_id for i in big_cate.second_cates]
o_books = Book.query.filter(Book.cate_id.in_(second_ids)).limit(4)
for item in o_books:
books.append({
'id': item.book_id,
'title': item.book_name,
'introduction': item.intro,
'author': item.author_name,
'state': item.status,
'categoryID': item.cate_id,
'categoryName': item.cate_name,
'imgURL': 'http://{}/{}'.format(current_app.config['QINIU_SETTINGS']['host'], item.cover)
})
else:
o_books = Book.query.limit(4)
for item in o_books:
books.append({
'id': item.book_id,
'title': item.book_name,
'introduction': item.intro,
'author': item.author_name,
'state': item.status,
'categoryID': item.cate_id,
'categoryName': item.cate_name,
'imgURL': 'http://{}/{}'.format(current_app.config['QINIU_SETTINGS']['host'], item.cover)
})
return jsonify(books)
3、使用postman测试接口:

补充:书架和小说的功能代码实现以后,可以在用户登录代码补充逻辑,默认添加书架书籍的操作。
在user.py文件中,定义函数,在用户登录后,默认调用。
def _add_book_shelf(user_id, sex):
"""书架增加默认书籍"""
books = Book.query.filter(Book.showed == 1).all()
choice_books = random.sample(books, 5)
for book in choice_books:
db.session.add(BookShelf(book_id=book.book_id,
user_id=user_id,
book_name=book.book_name,
cover=book.cover))
db.session.commit()
6.小说
-
小说-目录
-
小说-阅读
-
小说-详情
7.1我的-浏览记录
-
在applet_app/my.py文件中实现业务。
1-1 我的-浏览记录接口设计
- 接口名称:我的-浏览记录
- 接口路径:/my/historys
- 请求方法:GET
- 请求参数:
| 参数名称 | 是否必须 | 参数类型 | 参数位置 | 备注 |
|---|---|---|---|---|
| page | True | int | query | 当前页数 |
| pagesize | True | int | query | 每页数据量,默认10条 |
- 返回数据:
{
"counts": 0,
"items": [书籍数据],
"page": 1,
"pages": 0,
"pagesize": 10
}
1-2 我的-浏览记录的基本业务
-
获取参数page、pagesize
-
查询数据库浏览记录表,根据用户id过滤查询,并进行分页处理
-
遍历分页数据
-
返回结果
1-3 代码实现
1、定义my蓝图,使用flask-restful扩展视图类
from flask import Blueprint
# 创建蓝图对象
my_bp = Blueprint('my',__name__,url_prefix='/my')
2、定义视图
# 定义蓝图路由
@login_required
@my_bp.route('/histories')
def my_history():
# 1.新建my.py文件,用来实现关于浏览记录的功能代码;
# 2.创建蓝图、定义蓝图、注册蓝图
# 3.导入登录验证装饰器
# 4.获取参数,page和pagesize
page = request.args.get('page',1,int)
pagesize = request.args.get('pagesize',10,int)
# 5.查询数据库浏览记录表,根据用户id查询,分页处理
paginate = BrowseHistory.query.filter_by(user_id=g.user_id).paginate(page,pagesize,False)
# 6.获取分页后的数据
history_data = paginate.items
items = []
for item in history_data:
# 使用关系引用book,从浏览记录表中,获取书籍表里的数据。
items.append({
'id':item.book.book_id,
'title':item.book.book_name,
'author':item.book.author_name,
'status':item.book.status,
'imgURL':'http://{}/{}'.format(current_app.config['QINIU_SETTINGS']['host'],item.book.cover),
'lastTime':item.updated.strftime('%Y-%m-%d %H:%M:%S')
})
# 7.转成json,返回数据
data = {
'counts':paginate.total,
'pagesize':pagesize,
'pages':paginate.pages,
'page':paginate.page,
'items':items
}
return jsonify(data)
3、使用postman测试接口:

1-4 清除浏览记录
- 在applet_app/my.py文件的HistoryResource视图类中,定义http请求方法delete。
# 定义路由,实现浏览记录的删除
@login_required
@my_bp.route('/histories',methods=['DELETE'])
def delete_history():
# 步骤:
# 1.根据用户id、查询浏览记录表
history_data = BrowseHistory.query.filter_by(user_id=g.user_id).all()
# 2.遍历查询结果
for data in history_data:
db.session.delete(data)
# 3.清除数据
db.session.commit()
# 4.返回结果
return jsonify(msg='OK')
pass
7.浏览记录
- 我的-浏览记录
8.1配置-阅读偏好
-
在applet_app/reader_config.py文件中实现业务。
1-1 配置-阅读偏好接口设计
- 接口名称:配置-阅读偏好
- 接口路径:/config/preference
- 请求方法:POST
- 请求参数:
| 参数名称 | 是否必须 | 参数类型 | 参数位置 | 备注 |
|---|---|---|---|---|
| Content-Type | True | Headers | application/json | |
| gender | True | string | body | 偏好,男1,女0 |
- 返回数据:
{
“msg”:"设置成功"
}
1-2 配置-阅读偏好的基本业务:
-
获取参数gender
-
校验参数
-
提取用户id,查询用户数据
-
保存用户配置,提交数据
-
返回设置结果
1-3 代码实现
1、定义my蓝图,使用flask-restful扩展视图类
from flask import Blueprint
config_bp = Blueprint('config',__name__)
2、定义视图
# 定义路由,用户阅读偏好设置
@login_required
@config_bp.route("/preference",methods=['POST'])
def preference():
# 1.获取参数,post请求体中json数据