使用Tortoise-ORM和FastAPI構建評論系統


title: 使用Tortoise-ORM和FastAPI構建評論系統
date: 2025/04/25 21:37:36
updated: 2025/04/25 21:37:36
author: cmdragon

excerpt:
在models.py中定義了Comment模型,包含id、content、created_at、updated_at字段,并與User和Article模型建立外鍵關系。schemas.py中定義了CommentBase、CommentCreate、CommentUpdate和CommentResponse等Pydantic模型,用于數據驗證和響應。路由層實現了創建、獲取和刪除評論的API,使用get_or_none處理不存在的評論,并捕獲異常。測試接口通過requests進行創建和異常測試。常見報錯包括外鍵約束失敗、驗證錯誤和事件循環未關閉,需檢查外鍵值、請求體匹配和正確關閉事件循環。

categories:

  • 后端開發
  • FastAPI

tags:

  • Tortoise-ORM
  • Pydantic
  • FastAPI
  • 評論系統
  • 數據庫模型
  • 數據驗證
  • 接口測試

cmdragon_cn.png cmdragon_cn.png

掃描二維碼關注或者微信搜一搜:編程智域 前端至全棧交流與成長

探索數千個預構建的 AI 應用,開啟你的下一個偉大創意:https://tools.cmdragon.cn/

一、Tortoise-ORM模型定義

我們首先在models.py中定義評論模型:

from tortoise.models import Model
from tortoise import fieldsclass Comment(Model):id = fields.IntField(pk=True)content = fields.TextField()created_at = fields.DatetimeField(auto_now_add=True)updated_at = fields.DatetimeField(auto_now=True)# 外鍵關系user = fields.ForeignKeyField('models.User', related_name='comments')article = fields.ForeignKeyField('models.Article', related_name='comments')class Meta:table = "comments"indexes = ("created_at", "user_id", "article_id")def __str__(self):return f"Comment {self.id} by 

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/902981.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/902981.shtml
英文地址,請注明出處:http://en.pswp.cn/news/902981.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【VS Code】如何使用SSH打開遠程服務器Docker上的項目或文件夾

要在VS Code中使用SSH打開遠程服務器Docker上的項目或文件夾,您需要結合使用VS Code的Remote - SSH擴展和Docker的遠程訪問功能。以下是詳細步驟: 安裝VS Code Remote - SSH擴展 打開VS Code。點擊左側活動欄的擴展圖標(或使用快捷鍵CtrlShif…

NHANES指標推薦:PLP

文章題目:Association of pyridoxal 5-phosphate (PLP) with lipid profiles: a population-based cohort study DOI:10.3389/fnut.2025.1545301 中文標題:5-磷酸吡哆醛 (PLP) 與血脂譜的關系:一項基于人群的隊列研究 發表雜志&am…

MySQL 詳解之備份與恢復策略:數據安全的最后一道防線

在任何信息系統中,數據都是最寶貴的資產。數據的丟失可能源于多種原因:硬件故障、人為誤操作、軟件 Bug、惡意攻擊,甚至自然災害。一旦發生數據丟失,如果沒有有效的備份和恢復機制,后果可能是災難性的,可能導致業務中斷、經濟損失甚至法律責任。 數據庫備份與恢復,正是…

2026《數據結構》考研復習筆記五(棧、隊列)

棧、隊列 一、棧1.卡特蘭數2.不合法的出棧序列 二、隊列1.循環隊列2.輸入輸出受限隊列(四個數1234) 三、算法1.棧在括號匹配中的應用2.中綴表達式求值(通過轉化為后綴表達式再后綴表達式求值)3.中綴表達式轉化為后綴表達式4.后綴表…

深入解析微軟MarkitDown:原理、應用與二次開發指南

一、項目背景與技術定位 微軟開源的MarkitDown并非簡單的又一個Markdown解析器,而是針對現代文檔處理需求設計的工具鏈核心組件。該項目誕生于微軟內部大規模文檔系統的開發實踐,旨在解決以下技術痛點: 大規模文檔處理性能:能夠高…

pyinstaller打包paddleocr發生錯誤解決

python環境是3.9,github paddleocr v2.10.0。 一個非常簡單的案例如下,打包時發生錯誤。 import requests from paddleocr import PaddleOCR if __name__ "__main__":paddleocr_ocr PaddleOCR(use_angle_clsTrue, langch,det_model_dirmode…

算法之回溯法

回溯法 回溯法定義與概念核心思想回溯法的一般框架偽代碼表示C語言實現框架 回溯法的優化技巧剪枝策略實現剪枝的C語言示例記憶化搜索 案例分析N皇后問題子集和問題全排列問題尋路問題 回溯法的可視化理解決策樹狀態空間樹回溯過程 回溯法與其他算法的比較回溯法與動態規劃的區…

命令行指引的嘗試

效果 步驟 首先初始化一個空的項目,然后安裝一些依賴 npm init -y npm install inquirer execa chalk ora至于這些依賴是干嘛的,如下圖所示: 然后再 package.json 中補充一個 bin 然后再根目錄下新建一個 index.js , 其中的內容如下 #!/…

探秘LLM推理模型:hidden states中藏著的self verification的“鑰匙”

推理模型在數學和邏輯推理等任務中表現出色,但常出現過度推理的情況。本文研究發現,推理模型的隱藏狀態編碼了答案正確性信息,利用這一信息可提升推理效率。想知道具體如何實現嗎?快來一起來了解吧! 論文標題 Reasoni…

流量抓取工具(wireshark)

協議 TCP/IP協議簇 網絡接口層(沒有特定的協議)PPPOE 物理層數據鏈路層 網絡層: IP(v4/v6) ARP(地址解析協議) RARP ICMP(Internet控制報文協議) IGMP傳輸層:TCP(傳輸控制協議)UDP(用戶數據報協議)應用層…

.NET倉儲層在 using 塊中創建 SqlSugarClient 的風險

如題&#xff0c;先看代碼示例 using 塊的使用 public ISugarQueryable<T> GetSet(Expression<Func<T, bool>> whereExpression null) {using (SqlSugarClient dbClient SqlSugarInstance.GetInstance()){var query dbClient.Queryable<T>();if (w…

C語言----函數棧幀講解

目錄 1.函數棧幀是什么? 2. 理解函數棧幀能解決什么問題 3、函數棧幀的創建和銷毀具體過程 3.1 什么是棧 3.2 認識相關寄存器和匯編指令 3.3函數棧幀的創建和銷毀 3.3.1 預備知識 3.3.2 函數的調用堆棧 3.3.3 準備環境 3.3.4 轉到反匯編 3.3.5 函數棧幀的創建 3.3…

代碼隨想錄學習筆記---二叉樹

學習目標&#xff1a; 學習代碼隨想錄–二叉樹 每天學習1道,復習兩道 學習內容&#xff1a; 2025.4.7 復習內容: 24. 兩兩交換鏈表中的節點 25. 最大二叉樹 學習內容 26. 合并二叉樹 2025.4.8 復習內容: 27. 二分查找 28. 合并二叉樹 29. 27. 移除元素 學習內容: 30. 二叉…

Git ——提交至github,Vercel拉取,更新不了項目的問題解決

首先因為github上有個錯誤 1 failing check Vercel - No GitHub account was found matching the commit author email address 發現好像是vercel拉取不了項目&#xff0c;vercel登錄的郵箱與我此次提交更改的郵箱不匹配&#xff0c;查看Git的user確實如此&#xff08;之前的…

Vue3項目中 npm 依賴安裝 --save 與 --save-dev 的區別解析

這兩個命令的區別如下&#xff1a; bash npm install --save types/crypto-js # 安裝到 dependencies&#xff08;生產依賴&#xff09; npm install --save-dev types/crypto-js # 安裝到 devDependencies&#xff08;開發依賴&#xff09; 核心區別 依賴分類不同…

品牌如何通過朝日新聞出海日本?——某企業日本媒體發稿實戰

文 | 言同數字亞太傳播實驗室 一、日本市場的隱形門檻&#xff1a;中國品牌的三大痛點 案例背景&#xff1a; 某中國靈芝保健品企業&#xff08;代號"ForestLife"&#xff09;&#xff0c;產品雖獲中國/歐盟有機認證&#xff0c;但在日本市場面臨&#xff1a; 認知…

鴻蒙-試一下屬性字符串:除了Span之外,如何在同一個Text組件中展示不同樣式的文字

文章目錄 前言簡介有哪些類型拉出來溜溜Text SpanStyledString其他CustomSpan先看一下構造函數onMeasure(measureInfo: CustomSpanMeasureInfo): CustomSpanMetricsonDraw(context: DrawContext, drawInfo: CustomSpanDrawInfo) 遺留問題 前言 在開發中&#xff0c;經常會遇到…

Nginx 安裝與配置全流程指南(2025 最新版)

一、環境準備與依賴安裝 1.1 系統要求 操作系統&#xff1a;支持主流 Linux 發行版&#xff08;Ubuntu 20.04/CentOS 7/Debian 10&#xff09;硬件配置&#xff1a;內存 ≥512MB&#xff0c;磁盤 ≥10GB 可用空間&#xff08;建議使用 SSD&#xff09;網絡要求&#xff1a;開…

【LeetCode 熱題 100】滑動窗口最大值 / 最小覆蓋子串 / 輪轉數組 / 缺失的第一個正數

??個人主頁&#xff1a;小羊 ??所屬專欄&#xff1a;LeetCode 熱題 100 很榮幸您能閱讀我的文章&#xff0c;誠請評論指點&#xff0c;歡迎歡迎 ~ 目錄 子串和為 K 的子數組滑動窗口最大值最小覆蓋子串 普通數組最大子數組和合并區間輪轉數組除自身以外數組的乘積缺失的…

golang的cgo的一點小心得

最后有個項目需要涉及到cgo&#xff0c;在這塊以前用的不多&#xff0c; 這次略微用得深入了一點&#xff0c;記下來幾點以備以后使用 本質上cgo去用的時候就是遵守一些ABI而已&#xff0c;總體而言&#xff0c;盡量避免復雜結構的來回傳遞。1 對于變長參數&#xff0c;只有…