【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.pswp.cn/web/75862.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/75862.shtml
英文地址,請注明出處:http://en.pswp.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;遠程訪問需求。當有…