FastAPI 基礎學習(十四) Response自定義狀態碼


作者:麥克煎蛋   出處:https://www.cnblogs.com/mazhiyong/ 轉載請保留這段聲明,謝謝!

 

一、通過參數status_code自定義狀態碼

我們可以用參數status_code來聲明Response狀態碼。

支持任意路徑操作:

@app.get()
@app.post()
@app.put()
@app.delete()
from fastapi import FastAPI

app = FastAPI()


@app.post("/items/", status_code=201)
async def create_item(name: str):
    return {"name": name}

參數status_code接收一個數字內容,作為HTTP狀態碼。並且會在response中返回這個狀態碼,同時會在文檔中記錄。

注意status_code是裝飾器方法(get,post等)的參數。

 

我們可以從 fastapi.status 導入狀態碼常量,便於使用和記憶。

from fastapi import FastAPI, status

app = FastAPI()


@app.post("/items/", status_code=status.HTTP_201_CREATED)
async def create_item(name: str):
    return {"name": name}

二、通過Response參數自定義狀態碼

 

我們可以在路徑操作函數中聲明Response參數,然后給這個臨時的Response對象設置status_code信息。

 

FastAPI通過這個臨時的Response對象解析出status_code信息(以及header、cookie信息等),然后放入到最終返回的Response對象中。

 

我們也可以在依賴項中使用Response參數,然后設置status_code信息(以及其他信息)。

from fastapi import FastAPI, Response, status

app = FastAPI()

tasks = {"foo": "Listen to the Bar Fighters"}


@app.put("/get-or-create-task/{task_id}", status_code=200)
def get_or_create_task(task_id: str, response: Response): if task_id not in tasks:
        tasks[task_id] = "This didn't exist before" response.status_code = status.HTTP_201_CREATED return tasks[task_id]

 

三、通過直接返回Response自定義狀態碼

FastAPI默認情況下會通過JSONResponse返回請求結果,返回的狀態碼是默認狀態碼或者是路徑操作中設置的狀態碼。

如果我們想自定義狀態碼,可以通過直接返回Response對象來設置狀態碼,比如直接返回JSONResponse對象。

如下示例,我們需要先導入JSONResponse,然后自定義狀態碼,直接返回數據對象。

 

from typing import Optional

from fastapi import Body, FastAPI, status
from fastapi.responses import JSONResponse

app = FastAPI()

items = {"foo": {"name": "Fighters", "size": 6}, "bar": {"name": "Tenders", "size": 3}}


@app.put("/items/{item_id}")
async def upsert_item(item_id: str, name: Optional[str] = Body(None), size: Optional[int] = Body(None)):
    if item_id in items:
        item = items[item_id]
        item["name"] = name
        item["size"] = size
        return item
    else:
        item = {"name": name, "size": size}
        items[item_id] = item
        return JSONResponse(status_code=status.HTTP_201_CREATED, content=item)

 


免責聲明!

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



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