系列文章:
FastAPI 學習之路(一)fastapi--高性能web開發框架
FastAPI 學習之路(十二)接口幾個額外信息和額外數據類型
FastAPI 學習之路(十三)Cookie 參數,Header參數
我們可以在我們不同的請求路徑的返回參數使用響應模型。我們看一個簡單的demo。
from typing import List, Optional from fastapi import FastAPI from pydantic import BaseModel app = FastAPI() class One(BaseModel): name: str description: Optional[str] = None price: float tax: Optional[float] = None @app.post("/items/", response_model=One) def create_item(item: One): return item
我們可以看下,接口的正常返回
esponse_model是「裝飾器」方法(get,post 等)的一個參數。不像之前的所有參數和請求體,它不屬於路徑操作函數。
它接收的類型與你將為 Pydantic 模型屬性所聲明的類型相同,因此它可以是一個 Pydantic 模型,但也可以是一個由 Pydantic 模型組成的 list
,例如 List[Item]
。
FastAPI 將使用此 response_model
來:
-
將輸出數據轉換為其聲明的類型。
-
校驗數據。
-
在 OpenAPI 的路徑操作中為響應添加一個 JSON Schema。
-
並在自動生成文檔系統中使用。
但最重要的是:
-
會將輸出數據限制在該模型定義內。
我們下面做一個演示,我們正常的都應該知道,我們去創建用戶的時候呢,我們的密碼是明文的,我們要返回的用戶信息中,不能攜帶我們的密碼,我們應該如何處理呢,其實很簡單
from typing import Optional from fastapi import FastAPI from pydantic import BaseModel app = FastAPI() class UserIn(BaseModel): username: str password: str email: str full_name: Optional[str] = None class Userout(BaseModel): username: str email: str full_name: Optional[str] = None @app.post("/user/", response_model=Userout) def create_user(user: UserIn): return user
我們看下接口的實際返回
我們看下接口的文檔的展示
我們在接口的請求中,如果不傳遞,我不想要返回帶默認值的,
我們看下代碼如何實現的
from typing import Optional from fastapi import FastAPI from pydantic import BaseModel app = FastAPI() class UserIn(BaseModel): username: str password: str email: str full_name: Optional[str] = None class Userout(BaseModel): username: str email: str full_name: Optional[str] = None @app.post("/user/", response_model=Userout,response_model_exclude_unset=True) def create_user(user: UserIn): return user
其實就是response_model_exclude_unset來處理,我們看下實際的效果
那么這個時候,我們傳遞了呢。
可以看到,我們傳遞了參數就可以正常的展示,不傳遞參數的,我們不返回默認的值。
文章首發在公眾號,歡迎關注。