【Flask开发】嘿马文学web完整flask项目第4篇:4.分类,4.分类【附代码文档】

教程总体简介:2. 目标 1.1产品与开发 1.2环境配置 1.3 运行方式 1.4目录说明 1.5数据库设计 2.用户认证 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.项目目录实现 3.数据库迁移: 1.JWT:json web token 2.jwt工具的封装 4.用户权限校验 5.登录验证装饰器 1.书架列表 2.书架管理 3.最后阅读 2.分类书籍列表 3.热门搜索 7.3小说-详情 2.小说目录 2.阅读偏好 3.阅读设置

完整笔记资料代码:https://gitee.com/yinuo112/Backend/tree/master/Flask/嘿马文学web完整flask项目/note.md

感兴趣的小伙伴可以自取哦~


全套教程部分目录:


部分文件图片:

4.分类

  • 分类书本列表
  • 分类列表大类,男生、女生

4.2分类书本列表

  • 在applet_app/category.py文件中实现业务。
1-1 分类书本列表接口设计
  • 接口名称:分类-书本列表-筛选
  • 接口路径:/categoryies/filters
  • 请求方法:GET
  • 请求参数:
参数名称是否必须参数类型参数位置备注
pageTrueintquery当前页数
pagesizeTrueintquery每页数据大小,默认10条
category_idTrueintquery分类id
wordsTrueintquery字数类型id,0 所有 ,1表示50万字以下,2表示50~100万字,3表示100万字以上
orderTrueintquery排序条件,1表示书籍的热度,2表示书籍的收藏数量
  • 返回数据:
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{"counts": 11,"items": [...{"author": "","categoryID": 1,"categoryName": null,"id": 9,"imgURL": ""introduction": "腹黑总裁..","state": 1,"title": "腹黑总裁,宠溺娇妻"},{"author": "","categoryID": 1,"categoryName": null,"id": 10,"imgURL": ""introduction": "不要再纠缠爱我...","state": 1,"title": "不要再纠缠爱我"}],"page": 1,"pages": 2,"pagesize": 10
}
1-2 分类书本列表的基本业务:
  • 获取参数
  • 根据分类id,查询书籍大分类
  • 根据查询结果,使用关系引用,获取分类信息,使用set存储分类数据
  • 根据分类信息,查询书籍表,获取分类范围内的书籍的查询对象
  • 根据参数words判断查询条件,使用查询对象,进一步按书籍字数进行过滤查询
  • 根据参数order判断查询条件,使用查询对象,按照书籍的热度或是收藏数量排序查询
  • 对查询结果进行分页处理
  • 定义临时列表,遍历查询结果,添加数据
  • 返回结果
1-3 代码实现

1、创建蓝图

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from flask import Blueprintcategory_bp = Blueprint('category', __name__)

2、定义视图

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 定义路由,分类书籍列表@category_bp.route('/filters')
def category_book_list():# 1.获取参数:page/pagesize/category_id/words/orderpage = request.args.get('page',1,int)pagesize = request.args.get('pagesize',10,int)category_id = request.args.get('category_id',0,int)# 字数类型说明:0表示所有,1表示50万字以下,2表示50~100万字,3表示100万字以上words = request.args.get('words',-1,int)# 排序条件说明:1表示按热度,2表示按收藏order = request.args.get('order',1,int)# 参数判断if not category_id:return jsonify(msg='缺少分类id'),400# 2.根据分类条件category_id,查询数据,查询书籍大分类数据categories = BookBigCategory.query.get(category_id)# 3.判断查询结果,根据大分类数据,使用关系引用,获取二级分类数据# 使用列表推导式,使用set集合seconds_id = set([i.cate_id for i in categories.second_cates])# 4.根据分类数据,查询书籍表,获取分类范围内的书籍数据# -----过滤查询:保存的是查询结果对象,因为,后续需要对数据进行再次查询的操作query = Book.query.filter(Book.cate_id.in_(seconds_id))# 5.根据字数条件words查询书籍数据# -----1表示50万字以下,2表示50~100万字,3表示100万字以上if words == 1:query = query.filter(Book.word_count < 500000)elif words == 2:query = query.filter(Book.word_count.between(500000,1000000))elif words == 3:query = query.filter(Book.word_count > 1000000)# 6.根据排序条件order,按照最热、收藏数量进行排序查询# -----1表示按热度,2表示按收藏if order == 1:query = query.order_by(Book.heat.desc())elif order == 2:query = query.order_by(Book.collect_count.desc())else:return jsonify(msg='错误的排序选项'),400# 7.对查询结果进行分页处理,paginate# -----paginate函数表示分页:返回结果为分页的对象# 第一个参数表示页数,第二个参数表示每页的条目数,第三个参数False表示分页异常不报错paginate = query.paginate(page,pagesize,False)# items表示获取分页后的数据、page表示当前页数、# pages表示每页数据条目数total表示分页的总页数books_list = paginate.itemsitems = []# 8.遍历分页数据,获取每页数据、总页数for item in books_list:items.append({'id':item.book_id,'title':item.book_name,'introduction':item.intro,'author':item.author_name,'state':item.status,'category_id':item.cate_id,'category_name':item.cate_name,'imgURL':'})# 9.转成json,返回数据data = {'counts':paginate.total,'pagesize':pagesize,'pages':paginate.pages,'page':paginate.page,'items':items}return jsonify(data)

3、使用postman对接口进行测试:

4.分类

  • 分类书本列表
  • 分类列表大类,男生、女生

5.1搜索热门搜索词

  • 在applet_app/search.py文件中实现业务。
1-1 热门搜索词接口设计
  • 接口名称:搜索-热门搜索词
  • 接口路径:/search/tags
  • 请求方法:GET
  • 请求参数:
参数名称是否必须参数类型参数位置备注
key_wordTruequery关键词
  • 返回数据:
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{'title':'搜索词','isHot':'是否热门'
}
1-2 热门搜索词的基本业务:
  • 获取参数
  • 根据关键词参数,搜索关键词表进行过滤包含关键词查询
  • 返回结果
1-3 代码实现
  • 1.创建蓝图
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 导入蓝图from flask import Blueprint# 创建蓝图对象search_bp = Blueprint('search',__name__,url_prefix='/search')
  • 2.定义视图
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 定义路由,关键词热门搜索@search_bp.route("/tags")
def tag_list():# 1.获取参数,用户搜索的关键词key_wordkey_word = request.args.get("key_word")# 校验参数if not key_word:return jsonify([])# 2.根据参数,查询数据库,搜索关键词表进行过滤查询、过滤关键词# 热门搜索词,默认提供10条数据search_list = SearchKeyWord.query.filter(SearchKeyWord.keyword.contains(key_word)).limit(10)# 3.返回查询结果data = [{'title':index.keyword,'isHot':index.is_hot,}for index in search_list]# 转成json返回return jsonify(data)
  • 因为数据库search_key_word表里目前没有数据,可以在搜索-精准高匹配推荐功能完成后,再进行功能测试。

5.2搜索书本列表

  • 在applet_app/search.py文件中实现业务。
1-1 搜索书本列表接口设计
  • 接口名称:搜索-书本列表-模糊
  • 接口路径:/search/books
  • 请求方法:GET
  • 请求参数:
参数名称是否必须参数类型参数位置备注
pageTrueintquery当前页数
pagesizeTrueintquery页大小,默认10条
key_wordTruestringquery关键词
  • 返回数据:
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{"counts": 11,"items": [...{"author": "","categoryID": 1,"categoryName": null,"id": 9,"imgURL": ""introduction": "腹黑总裁..","state": 1,"title": "腹黑总裁,宠溺娇妻"},{"author": "","categoryID": 1,"categoryName": null,"id": 10,"imgURL": ""introduction": "不要再纠缠爱我...","state": 1,"title": "不要再纠缠爱我"}],"page": 1,"pages": 2,"pagesize": 10
}
1-2 搜索书本列表的基本业务:
  • 获取参数
  • 判断查询关键词是否存在
  • 如果存在关键词,按照书籍名称进行包含关键词过滤查询
  • 对查询结果进行分页处理
  • 遍历分页结果,添加数据
  • 返回数据
1-3 代码实现

1、创建蓝图

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from flask import Blueprintsearch_bp = Blueprint('search', __name__,url_prefix='/search')

2、定义视图

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 定义路由,搜索书本列表@search_bp.route('/books')
def search_books():# 1.获取参数,key_word/page/pagesizekey_word = request.args.get("key_word")page = request.args.get('page',1,int)pagesize = request.args.get("pagesize",10,int)# 2.检查关键词参数if not key_word:return jsonify(msg='参数错误'),400# 3.根据关键词参数,对书籍数据库进行过滤查询,包含query = Book.query.filter(Book.book_name.contains(key_word))# 4.判断查询结果# 5.对查询结果进行分页处理,items/page/pagespaginate = query.paginate(page,pagesize,False)# 获取分页后的书本数据book_list = paginate.items# 6.遍历分页后的数据,获取每本书籍的数据items = []for book in book_list:items.append({'id':book.book_id,'title':book.book_name,'intro':book.intro,'author':book.author_name,'state':book.status,'category_id':book.cate_id,'category_name':book.cate_name,'imgURL':'})# 7.返回结果data = {'counts':paginate.total,'pages':paginate.pages,'page':paginate.page,'items':items}return jsonify(data)

3、使用postman对接口进行测试:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/75862.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在Mac上离线安装k3s

目录 首先是安装multipass。 1. 系统要求 2. 环境准备 本来想照着网上文档学习安装一下k3s&#xff0c;没想到在docker被封了之后&#xff0c;现在想通过命令行去下载github的资源也不行了&#xff08;如果有网友看到这个文档、并且知道问题原因的&#xff0c;请留言告知&am…

vscode+wsl 运行编译 c++

linux 的 windows 子系统&#xff08;wsl&#xff09;是 windows 的一项功能&#xff0c;可以安装 Linux 的发行版&#xff0c;例如&#xff08;Ubuntu&#xff0c;Kali&#xff0c;Arch Linux&#xff09;等&#xff0c;从而可以直接在 windows 下使用 Linux 应用程序&#xf…

基于源码分析 HikariCP 常见参数的具体含义

HikariCP 是目前风头最劲的 JDBC 连接池&#xff0c;号称性能最佳&#xff0c;SpringBoot 2.0 也将 HikariCP 作为默认的数据库连接池。 要想用好 HikariCP&#xff0c;理解常见参数的具体含义至关重要。但是对于某些参数&#xff0c;尽管官方文档给出了详细解释&#xff0c;很…

docker部署scylladb

创建存储数据的目录和配置目录 mkdir -p /root/docker/scylla/data/data /root/docker/scylla/data/commitlog /root/docker/scylla/data/hints /root/docker/scylla/data/view_hints /root/docker/scylla/conf快速启动拷贝配置文件 docker run -d \--name scylla \scylladb/…

golang 在windows 系统的交叉编译

基本交叉编译命令 GOOS目标操作系统 GOARCH目标架构 go build -o 输出文件名 包路径 编译 Linux 64位程序 set GOOSlinux set GOARCHamd64 go build -o myapp-linux main.go 编译 MacOS (Darwin) 64位程序 set GOOSdarwin set GOARCHamd64 go build -o myapp-macos main.go …

本地mock服务编写

确认有需要mock的接口文档后&#xff0c;本地可以mock服务编写&#xff1b; 用于测试UI事务、模拟对接组件等&#xff1b; 使用python FLASK可以轻松建立本地mock服务端&#xff0c;注册预期的接口响应&#xff01;flask会在接收端持续打印收到的请求&#xff01; 注意&#…

京东云智能体平台joybuilder v3.0.0测试

平台介绍&#xff1a; JoyBuilder 是京东云推出的 AI 原生应用开发平台&#xff0c;以下是对它的具体介绍&#xff1a; 开发方式便捷高效&#xff1a;将 AI 能力融入低代码平台&#xff0c;用户通过对话式交互方式&#xff0c;输入如 “创建客户反馈管理系统” 等需求&#x…

前端实现对接现成文件下载接口(xlsx)

针对于Ant Design 框架 1.在你的api文件下编写接口路径 import request from /utils/request import storage from storeimport {AUTHORIZATION} from /store/mutation-types const api {downloadVocabularyTemplate:/vocabulary/downloadVocabularyTemplate, }export funct…

TCPIP详解 卷1协议 六 DHCP和自动配置

6.1——DHCP和自动配置 为了使用 TCP/IP 协议族&#xff0c;每台主机和路由器需要一定的配置信息。基本上采用3种方法&#xff1a;手工获得信息&#xff1b;通过一个系统获得使用的网络服务&#xff1b;使用某种算法自动确定。 拥有一个IP 地址和子网掩码&#xff0c;以及 DN…

联想电脑开机出现Defalut Boot Device Missing or Boot Failed怎么办

目录 一、恢复bios默认设置 二、关机重启 三、“物理”方法 在图书馆敲代码时&#xff0c;去吃了午饭回来发现刚开机就出现了下图的问题&#xff08;崩溃&#xff09;&#xff0c;想起之前也发生过一次 这样的问题&#xff0c;现在把我用到的方法写在下面&#xff0c;可能对…

用户登陆UI

本节任务 完成用户登陆UI&#xff0c;点击登陆按钮跳转到应用主页 界面原型&#xff1a; 登陆页面&#xff1a; 登陆成功页面&#xff1a; 涉及知识点&#xff1a; 线性布局Image组件输入框复选框分割线按钮路由跳转背景色、内容对齐 1 新建项目 录入项目信息&#xff1a;…

linux多线(进)程编程——(1)前置知识

liunx多线程编程&#xff08;前置知识&#xff09;前置知识 前言 学习编程就像是修仙&#xff0c;分为宗门的正统修士&#xff08;计算机专业的学生&#xff09;&#xff0c;以及野修&#xff08;半路转码&#xff09;。正统修士有各大宗门的功法&#xff0c;保证一路修行畅通…

Npfs!NpFsdCreate函数分析之从NpCreateClientEnd函数分析到Npfs!NpSetConnectedPipeState

第一部分&#xff1a; 1: kd> g Breakpoint 5 hit Npfs!NpFsdCreate: baaecba6 55 push ebp 1: kd> kc # 00 Npfs!NpFsdCreate 01 nt!IofCallDriver 02 nt!IopParseDevice 03 nt!ObpLookupObjectName 04 nt!ObOpenObjectByName 05 nt!IopCreateFile 06…

【软件测试】bug 篇

本章思维导图&#xff1a; 1. 软件测试的生命周期 软件测试贯穿于整个软件的生命周期 流程阶段需求分析测试计划测试设计/开发测试执行测试评估上线运行维护具体工作内容1. 阅读需求文档 2. 标记可测试需求 3. 确定测试类型1. 制定测试范围 2. 选择测试工具 3. 分配资源1. 编写…

「Unity3D」图片导入选项取消Read/Write,就无法正确显示导入大小,以及Addressable打包无法正确显示的问题

如果在Edit -> Project Settings -> Editor中的“Load texture data on demand”勾选&#xff0c;就会让图片导入设置中&#xff0c;不勾选Read/Write&#xff0c;就无法正确显示纹理的大小数字。 更进一步的问题是&#xff0c;使用Addressable打包的时候&#xff0c; 如…

《MySQL从入门到精通》

文章目录 《MySQL从入门到精通》1. 基础-SQL通用语法及分类2. 基础-SQL-DDL-数据库操作3. 基础-SQL-DDL-表操作-创建&查询4. 基础-SQL-DDL-数据类型及案例4.1 数值类型4.2 字符串类型4.3 时间和日期类型 5. 基础-SQL-DDL-表操作-修改&删除5.1 DDL-表操作-修改5.2 DDL-表…

Vccaux_IO在DDR3接口中的作用

一、Vccaux_IO在DDR3接口中的作用 1.vccaux_io通常为FPGA的IO bank的辅助电源&#xff0c;用于支持特定电压的IO标准 2.在DDR3接口中&#xff0c;FPGA的IO bank需要DDR3芯片的电压(1.5v/1.35v)匹配 3.Vccaux_IO用于为FPGA的DDR3接口I/O Bank供电&#xff0c;其电压值、噪声和稳…

深入理解Apache Kafka

引言 在现代分布式系统架构中&#xff0c;中间件扮演着至关重要的角色&#xff0c;它作为系统各组件之间的桥梁&#xff0c;负责处理数据传递、消息通信、负载均衡等关键任务。在众多中间件解决方案中&#xff0c;Apache Kafka凭借其高吞吐量、低延迟和可扩展性&#xff0c;已…

【NLP】 21. Transformer整体流程概述 Encoder 与 Decoder架构对比

1. Transformer 整体流程概述 Transformer 模型的整个处理流程可以概括为从自注意力&#xff08;Self-Attention&#xff09;到多头注意力&#xff0c;再加上残差连接、层归一化、堆叠多层的结构。其核心思想是利用注意力机制对输入进行并行计算&#xff0c;从而避免传统 RNN …

路由器端口映射的意思、使用场景、及内网ip让公网访问常见问题和解决方法

一、端口映射是什么意思 端口映射是将内网主机的IP地址端口映射到公网中&#xff0c;内部机器提供相应的互联网服务。当异地用户访问该这个端口时&#xff0c;会自动将请求映射到对应局域网内部的机器上。 二、端口映射常见使用场景 1&#xff0c;远程访问需求。当有…