fastapi 响应模型 / 响应状态码 / 表单参数
文章目錄
- 1. response_model
- 2. 添加輸出模型
- 3. 響應(yīng)模型編碼參數(shù)
- 4. response_model_include 和 response_model_exclude
- 5. 代碼復(fù)用:繼承
- 6. Union
- 7. 任意 dict 的響應(yīng)
- 8. 響應(yīng)狀態(tài)碼
- 9. 表單參數(shù)
learn from https://fastapi.tiangolo.com/zh/tutorial/response-model/
1. response_model
響應(yīng)模型 不是 路徑參數(shù)
from typing import Optional, List from fastapi import Cookie, FastAPI, Header from pydantic import BaseModelapp = FastAPI()class Item(BaseModel):name: strdescription: Optional[str] = Noneprice: floattax: Optional[float] = Nonetags: List[str] = []@app.post("/items/", response_model=Item) # 裝飾器方法的一個(gè)參數(shù) async def create_items(item: Item):return itemor
@app.post("/items/", response_model=List[Item]) # 裝飾器方法的一個(gè)參數(shù) async def create_items(item: Item):return [item, item]響應(yīng)模型 對(duì) 返回的數(shù)據(jù) 進(jìn)行轉(zhuǎn)換,校驗(yàn)
例如:
from typing import Optional, List from fastapi import Cookie, FastAPI, Header from pydantic import BaseModel, EmailStrapp = FastAPI()class UserIn(BaseModel):username: strpassword: stremail: EmailStrfull_name: Optional[str] = None@app.post("/user/", response_model=UserIn) # 裝飾器方法的一個(gè)參數(shù) async def create_user(user: UserIn):return user永遠(yuǎn)不要 存儲(chǔ)用戶的 明文密碼,也不要在響應(yīng)中 發(fā)送密碼。
2. 添加輸出模型
- 輸出的時(shí)候不給密碼,更改響應(yīng)模型為不帶密碼的
3. 響應(yīng)模型編碼參數(shù)
- response_model_exclude_unset 參數(shù) True,輸出忽略 未明確設(shè)置的 字段
- response_model_exclude_defaults=True,忽略跟默認(rèn)值一樣的字段
- response_model_exclude_none=True,忽略 None 的字段
如果參數(shù) 改為 False,或者 刪除該參數(shù),未設(shè)置的值 也顯示出來(lái)了
4. response_model_include 和 response_model_exclude
它們接收一個(gè)由屬性名稱 str 組成的 set 來(lái)包含(忽略其他的)或者排除(包含其他的)這些屬性
- response_model_include, 只包含指定字段
- response_model_exclude,排除指定字段
5. 代碼復(fù)用:繼承
from typing import Optional from fastapi import FastAPI from pydantic import EmailStr, BaseModel app = FastAPI()class UserIn(BaseModel):username: strpassword: stremail: EmailStrfull_name: Optional[str] = Noneclass UserOut(BaseModel):username: stremail: EmailStrfull_name: Optional[str] = Noneclass UserInDB(BaseModel):username: strhashed_password: stremail: EmailStrfull_name: Optional[str] = Nonedef fake_password_hasher(raw_password: str):return "supersecret" + raw_passworddef fake_save_user(user_in: UserIn):hashed_password = fake_password_hasher(user_in.password)user_in_db = UserInDB(**user_in.dict(), hashed_password=hashed_password)# 使用user_in的數(shù)據(jù)初始化UserInDB , 并添加hashed_password字段print("User saved! ..not really")return user_in_db@app.post("/user/", response_model=UserOut) async def create_user(user_in: UserIn):user_saved = fake_save_user(user_in)return user_saved- 通過(guò)繼承進(jìn)行復(fù)用
6. Union
- 響應(yīng)將是 多種類型中的 任何一種
7. 任意 dict 的響應(yīng)
- 對(duì)于事先不知道 key 的,可以直接定義字典及其 k, v 的類型
8. 響應(yīng)狀態(tài)碼
- 裝飾器函數(shù)內(nèi) 使用 status_code 參數(shù)來(lái)聲明用于響應(yīng)的 HTTP 狀態(tài)碼
關(guān)于 HTTP 狀態(tài)碼
在 HTTP 協(xié)議中,你將發(fā)送 3 位數(shù)的數(shù)字狀態(tài)碼作為響應(yīng)的一部分。
-
100 及以上狀態(tài)碼用于「消息」響應(yīng)。你很少直接使用它們。具有這些狀態(tài)代碼的響應(yīng)不能帶有響應(yīng)體。
-
200 及以上狀態(tài)碼用于「成功」響應(yīng)。這些是你最常使用的。
- 200 是默認(rèn)狀態(tài)代碼,它表示一切「正常」。
- 另一個(gè)例子會(huì)是 201,「已創(chuàng)建」。它通常在數(shù)據(jù)庫(kù)中創(chuàng)建了一條新記錄后使用。
- 一個(gè)特殊的例子是 204,「無(wú)內(nèi)容」。此響應(yīng)在沒(méi)有內(nèi)容返回給客戶端時(shí)使用,因此該響應(yīng)不能包含響應(yīng)體。
-
300 及以上狀態(tài)碼用于「重定向」。具有這些狀態(tài)碼的響應(yīng)可能有或者可能沒(méi)有響應(yīng)體,但 304「未修改」是個(gè)例外,該響應(yīng)不得含有響應(yīng)體。
-
400 及以上狀態(tài)碼用于「客戶端錯(cuò)誤」響應(yīng)。這些可能是你第二常使用的類型。
- 一個(gè)例子是 404,用于「未找到」響應(yīng)。
- 對(duì)于來(lái)自客戶端的一般錯(cuò)誤,你可以只使用 400。
-
500 及以上狀態(tài)碼用于服務(wù)器端錯(cuò)誤。你幾乎永遠(yuǎn)不會(huì)直接使用它們。當(dāng)你的應(yīng)用程序代碼或服務(wù)器中的某些部分出現(xiàn)問(wèn)題時(shí),它將自動(dòng)返回這些狀態(tài)代碼之一。
9. 表單參數(shù)
- 接收的不是 JSON,而是表單字段時(shí),要使用 Form
總結(jié)
以上是生活随笔為你收集整理的fastapi 响应模型 / 响应状态码 / 表单参数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: LeetCode MySQL 1777.
- 下一篇: python web开发 网络编程 TC