FastAPI入門:請求體、查詢參數和字符串校驗、路徑參數和數值校驗

請求體

FastAPI 使用請求體從客戶端(例如瀏覽器)向 API 發送數據。請求體是客戶端發送給 API 的數據。響應體是 API 發送給客戶端的數據。

使用 Pydantic 模型聲明請求體,能充分利用它的功能和優點

from fastapi import FastAPI
from pydantic import BaseModel # 導入BaseModel 用于數據模型定義class Item(BaseModel):# 把數據模型聲明為繼承BaseModel的類name: strdescription: str | None = Noneprice: floattax: float | None = Noneapp = FastAPI()@app.post("/items/")
async def create_item(item: Item):return item

FastAPI 支持同時聲明請求體、路徑參數和查詢參數。

查詢參數和字符串校驗

可以為查詢參數添加額外的約束條件
使用Query明確告訴 FastAPI 這是一個查詢參數,并且提供參數的額外配置和驗證規則

Query常用參數:

Query(default=None,           # 默認值max_length=50,         # 最大長度min_length=1,          # 最小長度regex="^[a-zA-Z]+$",   # 正則表達式驗證description="搜索關鍵詞", # 參數描述example="hello"        # 示例值
)
from fastapi import FastAPI, Query # 導入Queryapp = FastAPI()@app.get("/items")
# 將 Query 用作查詢參數的默認值,并將它的 max_length 參數設置為 50
async def read_items(q : str | None = Query(default="hey", max_length=50, min_length=1, regex="^hey+")):results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}if q:results.update({"q": q})return results

多個查詢參數

當你使用 Query 顯式地定義查詢參數時,你還可以聲明它去接收一組值,或換句話來說,接收多個值。

from fastapi import FastAPI, Query # 導入Queryapp = FastAPI()@app.get("/items")
# 將 Query 用作查詢參數的默認值,并將它的 max_length 參數設置為 50
async def read_items(q : list[str] | None = Query(default=None)):query_items = {"q" : q}return query_items

訪問:http://localhost:8000/items?q=foo&q=bar
結果:
在這里插入圖片描述
還可以定義默認的列表值

async def read_items(q : list[str] | None = Query(default=["1", "2"])):

在這里插入圖片描述
還可以添加title、description添加參數的元數據

async def read_items(q : list[str] | None = Query(default=["1", "2"], title="q query", description="description of q")):

參數別名

假設你想要查詢參數為 item-query,但是 item-query 不是一個有效的 Python 變量名稱。這時你可以用 alias 參數聲明一個別名,該別名將用于在 URL 中查找查詢參數值

from fastapi import FastAPI, Query # 導入Queryapp = FastAPI()@app.get("/items")
# 將 Query 用作查詢參數的默認值,并將它的 max_length 參數設置為 50
async def read_items(q : str | None = Query(default=None, max_length=50, alias="item-query")):results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}if q:results.update({"q": q})return results

棄用參數

將參數 deprecated=True 傳入 Query,在文檔中會標記已棄用

async def read_items(q : str | None = Query(default=None, max_length=50, alias="item-query", deprecated=True)):

在這里插入圖片描述

路徑參數和數值校驗

與使用 Query 為查詢參數聲明更多的校驗和元數據的方式相同,你也可以使用 Path 為路徑參數聲明相同類型的校驗和元數據

Annotated 是 Python 中用于添加元數據到類型注解的特殊類型。使用格式為Annotated[類型, 元數據1, 元數據2, …]

路徑參數使用Path聲明

from fastapi import FastAPI, Query , Path# 導入Path和Query類
from typing import Annotatedapp = FastAPI()@app.get("/items/{item_id}")
# 將 Query 用作查詢參數的默認值,并將它的 max_length 參數設置為 50
async def read_items(item_id: Annotated[int, Path(title="The ID of the item to get")],q: Annotated[str | None, Query(max_length=50)] = None):results = {"item_id": item_id}if q:results.update({"q": q})return results

在參數列表前加上*表示其后面的參數必須顯式指定

數值約束

可以對數值類型參數約束其范圍

  • ge: 大于等于
  • le: 小于等于
  • gt: 大于
  • lt: 小于
from fastapi import FastAPI, Pathapp = FastAPI()@app.get("/items/{item_id}")
async def read_items(*, item_id: int = Path(title="The ID of the item to get", ge=1), q: str
):results = {"item_id": item_id}if q:results.update({"q": q})return results

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

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

相關文章

Docker的docker-compose類比Spring的ApplicationContext

總一句話是:Docker Compose:集中化管理多個容器及其依賴的資源環境;ApplicationContext:集中化管理 多個Bean 及其運行所需的資源和依賴關系。 1. 整體概念 Docker Compose:用于定義和運行多容器 Docker 應用程序&…

Reason-before-Retrieve(CVPR 2025)

研究方向:Image Captioning論文全名:《Reason-before-Retrieve: One-Stage Reflective Chain-of-Thoughts for Training-Free Zero-Shot Composed Image Retrieval》1. 論文介紹組合圖像檢索(CIR)旨在檢索與參考圖像密切相似的目標…

Idefics2:構建視覺-語言模型時,什么是重要的

溫馨提示: 本篇文章已同步至"AI專題精講" Idefics2:構建視覺-語言模型時,什么是重要的 摘要 隨著large language models和vision transformers的進步,視覺-語言模型(VLMs)受到了越來越多的關注…

再談fpga開發(fpga調試方法)

【 聲明:版權所有,歡迎轉載,請勿用于商業用途。 聯系信箱:feixiaoxing 163.com】我們之前在學校學習c、c的時候,其實學校漏掉了很重要的一個教學環節,那就是調試、測試。很多時候我們代碼寫出來了&#xff…

C語言中的數據結構--棧和隊列(1)

前言本屆開始我們將對數據結構中棧的內容進行講解,那么廢話不多說,我們正式進入今天的學習棧棧是一種很特殊的線性表,它只能在固定的一端進行插入和刪除操作,進行數據的插入和刪除的一端叫做棧頂,另外一端叫做棧底,棧中的元素遵守…

字符串是數據結構還是數據類型?

比較糾結的一個問題,以下是在網上查到后總結的,不知道對不對,歡迎討論。這是個觸及計算機科學核心概念的精妙問題!字符串既可以被視為一種數據類型,也可以被視為一種數據結構,這取決于你觀察的視角和討論的…

Cline與Cursor深度實戰指南:AI編程助手的革命性應用

引言 在AI編程工具快速發展的今天,Cline和Cursor作為兩款備受矚目的AI編程助手,正在重新定義開發者的工作方式。作為一名深度使用這兩款工具的開發者,我在過去一年的實踐中積累了豐富的經驗和獨到的見解。本文將從技術角度深入分析Cline和Cur…

根本是什么

根本是什么 根本沒有了,枝葉還在么? 沒有了內涵,外延還有么? 丟棄了根本,再嗨也是無意義,無根據空虛之樂罷了。 人之所行所言所思所想所念皆欲念、歷程感懷,情思。所謂得失過往,時空…

springboot基于Java的人力資源管理系統設計與實現

管理員:登錄,個人中心,部門管理,員工管理,培訓信息管理,員工獎勵管理,員工懲罰管理員工考核管理,調薪信息管理,員工調動管理,員工工資管理員工:注…

金字塔降低采樣

文章目錄image_scale.hppimage_scale.cppmainimage_scale.hpp #ifndef IMAGE_SCALE_HPP #define IMAGE_SCALE_HPP#include <vector> #include <cstdint> #include <utility> // for std::pair #include <algorithm> #include <string> enum cl…

Filament引擎(四)——光照渲染Froxelizer實現分析

Froxelizer主要是用于filament光照效果的實現&#xff0c;生成光照渲染時所需的必要信息&#xff0c;幫助渲染過程中明確哪些區域受哪些光源所影響&#xff0c;是Filament中保證光照效果渲染效率的核心所在。這部分的源碼&#xff0c;可以結合filament官方文檔中Light Path部分…

2025 環法對決,VELO Angel Glide 坐墊輕裝上陣

2025環法第16賽段的風禿山之巔&#xff0c;當最后一縷夕陽沉入云層&#xff0c;山風裹挾著礫石的氣息掠過賽道&#xff0c;一場足以載入史冊的激戰正酣。帕雷-潘特的肌肉在汗水里賁張&#xff0c;鏈條與齒輪的咬合聲混著粗重喘息&#xff0c;在171.5公里賽程的最后3公里陡坡上&…

Linux程序->進度條

進度條最終效果&#xff1a; 目錄 進度條最終效果&#xff1a; 一&#xff1a;兩個須知 1&#xff1a;緩沖區 ①&#xff1a;C語言自帶緩沖區 ②&#xff1a;緩沖區的刷新策略 2&#xff1a;回車和換行的區別 二&#xff1a;倒計時程序 三&#xff1a;入門板進度條的實…

Python爬蟲實戰:研究tldextract庫相關技術構建新聞網站域名分析爬蟲系統

1. 引言 網絡爬蟲作為一種自動獲取互聯網信息的技術,在數據挖掘、信息檢索、輿情分析等領域有著廣泛的應用。Python 因其豐富的庫和簡潔的語法,成為了開發爬蟲的首選語言。tldextract 是 Python 中一個強大的域名解析庫,能夠準確地從 URL 中提取頂級域名、二級域名等關鍵信…

【算法-華為機試-火星基地改造】

基地改造題目描述目標輸入輸出代碼實現題目描述 在2XXX年&#xff0c;人們發現了一塊火星地區&#xff0c;這里看起來很適合建設新家園。但問題是&#xff0c;我們不能一次性將這片地區的空氣變得適合人類居住&#xff0c;得分步驟來。 把這片火星地區想象成一個巨大的棋盤。棋…

C++入門自學Day1-- C語言的宏函數和C++內聯函數

一、函數調用開銷函數調用會涉及&#xff1a;參數壓棧&#xff08;或寄存器傳參&#xff09;跳轉到函數體返回值處理棧幀銷毀這個過程對小函數來說可能非常浪費&#xff0c;因此&#xff0c;宏函數和內聯函數的目的就是避免“函數調用的開銷”&#xff0c;通過代碼展開&#xf…

Pytorch混合精度訓練最佳實踐

混合精度訓練&#xff08;Mixed Precision Training&#xff09;是一種通過結合單精度&#xff08;FP32&#xff09;和半精度&#xff08;FP16/FP8&#xff09;計算來加速訓練、減少顯存占用的技術。它在保持模型精度的同時&#xff0c;通常能帶來 2-3 倍的訓練速度提升&#x…

Qt C++動態庫SDK在Visual Studio 2022使用(C++/C#版本)

01 將C SDK 集成到 IDE 中以下是在 Microsoft Visual Studio 平臺下 SDK 的集成。2.1 Visual Studio 平臺下 C/C環境配置及集成到 IDE 中xxx.lib 和 xxx.dll 適合在 Windows 操作系統平臺使用&#xff0c;這里以 VS2022 環境為例。2.1.1 C/C 工程環境配置與集成1、C# SDK 接口…

大語言模型 LLM 通過 Excel 知識庫 增強日志分析,根因分析能力的技術方案(2):LangChain + LlamaIndex 實現

文章大綱 1 技術原理總覽 2 詳細實現步驟(含代碼) 2.1 環境準備 2.2 Excel → LlamaIndex 節點 2.3 構建向量索引(FAISS 本地) 2.4 Google Cloud 向量檢索(可選替換 FAISS) 2.5 LangChain 問答鏈 A. RAG 模式(向量檢索 + LLM 生成) B. SQL 模式(無 RAG,直接查表) 2.…

提升ARM Cortex-M系統性能的關鍵技術:TCM技術解析與實戰指南

文章目錄引言一、TCM基礎架構與工作原理1.1 TCM的物理特性1.2 與緩存機制的對比1.3 ARM Cortex-M系列對TCM的支持二、TCM的典型應用場景2.1 實時中斷處理2.2 低功耗模式下的待機代碼2.3 高性能算法執行2.4 系統初始化階段的關鍵代碼三、實戰指南&#xff1a;在STM32H7上配置和優…