FastAPI 學習之路(十四)響應模型


系列文章:

  FastAPI 學習之路(一)fastapi--高性能web開發框架

  FastAPI 學習之路(二)

  FastAPI 學習之路(三)

  FastAPI 學習之路(四)

  FastAPI 學習之路(五)

      FastAPI 學習之路(六)查詢參數,字符串的校驗

  FastAPI 學習之路(七)字符串的校驗

    FastAPI 學習之路(八)路徑參數和數值的校驗

  FastAPI 學習之路(九)請求體有多個參數如何處理?

  FastAPI 學習之路(十)請求體的字段

      FastAPI 學習之路(十一)請求體 - 嵌套模型 

    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來處理,我們看下實際的效果

 

 

 那么這個時候,我們傳遞了呢。

 

 

 可以看到,我們傳遞了參數就可以正常的展示,不傳遞參數的,我們不返回默認的值。

    

 

文章首發在公眾號,歡迎關注。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM