中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用python編程私人定制Response對象

發布時間:2021-10-09 17:49:18 來源:億速云 閱讀:124 作者:柒染 欄目:編程語言

本篇文章給大家分享的是有關怎么使用python編程私人定制Response對象,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

這篇文章很長,但我保證你看完后能進行高度自定義 Response 提神開發效率。

在 fastapi 路徑操作中,通常直接返回以下數據類型:dict,list,Pydantic 模型,數據庫模型以及其他數據類型。fastapi 通過 jsonable_encoder 函數自動把返回數據轉換為 JSON 格式,然后把 JSON 兼容的數據內容傳送給 JSONResponse 對象并返回給終端用戶。
但在某些情況下,我們需要在路徑操作中直接返回 Response 對象,這樣我們能有更多的操作靈活性,比如我們上節講的自定義 Cookie 信息,自定義頭信息。

1

Response 模型

Response 主類,所有其他的 Response 都繼承自這個類。
它接收以下參數信息:
content - str 或者 bytes
status_code - HTTP 狀態碼
headers - 字符串字典
media_type - media type. 例如"text/html"
fastapi 會自動包含 Content-Length,以及 Content-Type,charset 等頭信息。

1.1

返回 Response

我們可以直接返回 Response 或者它的任何子類。JSONResponse 實際上也是 Response 的子類。這個時候 fastapi 不會做任何數據轉換和數據校驗,而是直接返回數據。若我們想具有很大的靈活性,可以返回任何數據類型,重寫數據聲明或者數據校驗。則可以利用 jsonable_encoder 把數據轉換成 JSON 兼容格式。

# -*- encoding: utf-8 -*-from datetime import datetimefrom typing import Optionalfrom fastapi import FastAPIfrom fastapi.encoders import jsonable_encoderfrom fastapi.responses import JSONResponsefrom pydantic import BaseModelclass Item(BaseModel):    title: str    name: str    description: Optional[str] = Noneapp = FastAPI()@app.get("/info")def get_item(item: Item):    json_compatible_item_data = jsonable_encoder(item)    return JSONResponse(content=json_compatible_item_data)

1.2

返回自定義 Response

我們也是可以返回自定義的 Response

# -*- encoding: utf-8 -*-from fastapi import FastAPI, Responseapp = FastAPI()@app.get("/get_json_info")def get_json_data():    data = {        "name": "haishiniu",        "address": "beijing"    }    return Response(content=data, media_type="application/json")

2

高級自定義 Response

我們也可以更靈活的定制返回結果用于滿足我們的日常開發工作。

2.1

參數 responses

我們可以傳遞給路徑操作裝飾器一個參數 responses,他接收一個字典數據,鍵值是不同的 HTTP 狀態碼,內容是不同情況下的返回內容(字典格式)。如果返回內容包含鍵值 model,那么它的作用與 response_model 相同,指向的內容是 Pydantic 模型。如下示例,當返回狀態碼是 404 的時候,對應的 Pydantic 模型是 Message :

# -*- encoding: utf-8 -*-from fastapi import FastAPIfrom fastapi.responses import JSONResponsefrom pydantic import BaseModelclass Item(BaseModel):    id: str    value: strclass Message(BaseModel):    message: strapp = FastAPI()@app.get("/get_info/{item_id}", response_model=Item, responses={404: {"model": Message}})async def read_item(item_id: str):    if item_id == "666":        return {"id": "666", "value": "good job ! find haishiniu "}    else:        return JSONResponse(status_code=404, content={"message": "not good ! you are not find me"})

分析上面的示例,在正常情況下返回的數據模型是 Item,404 的時候返回的數據模型是 Message。

2.2

不同的 media type

參數 responses 也支持不同的 media type。

# -*- encoding: utf-8 -*-from typing import Optionalfrom fastapi import FastAPIfrom fastapi.responses import FileResponsefrom pydantic import BaseModelclass Item(BaseModel):    id: str    value: strapp = FastAPI()@app.get(    "/get_info/{item_id}",    response_model=Item,    responses={        200: {            "content": {"image/png": {}},            "description": "Return the JSON item or an image.",        }    },)async def read_item(item_id: str, img: Optional[bool] = None):    if img:        return FileResponse("image.png", media_type="image/png")    else:        return {"id": "888", "value": "not good to find value image/png"}

如上所示,默認的 media type 是 application/json,同時還支持 image/png。

2.3

預定義 responses 與自定義 responses 并行

本小節我們是我們自定義的加強版本,可進行任意的擴展

from typing import Optionalfrom fastapi import FastAPIfrom fastapi.responses import FileResponsefrom pydantic import BaseModelclass Item(BaseModel):    id: str    value: strresponses = {    404: {"description": "Item not found"},    302: {"description": "The item was moved"},    403: {"description": "Not enough privileges"},}app = FastAPI()@app.get(    "/get_info/{item_id}",    response_model=Item,    responses={**responses, 200: {"content": {"image/png": {}}}},)async def read_item(item_id: str, img: Optional[bool] = None):    if img:        return FileResponse("image.png", media_type="image/png")    else:        return {"id": "foo", "value": "not good to find value image/png"}

以上就是怎么使用python編程私人定制Response對象,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大埔区| 巢湖市| 中牟县| 百色市| 专栏| 大庆市| 扶沟县| 淮阳县| 西林县| 龙口市| 修武县| 孙吴县| 凤山市| 金昌市| 慈溪市| 屏边| 灌阳县| 夏津县| 印江| 蕲春县| 晋城| 平昌县| 德惠市| 长顺县| 横峰县| 屏东县| 盱眙县| 北海市| 黔西县| 奈曼旗| 杭州市| 洛宁县| 灵山县| 清新县| 云南省| 永寿县| 鄯善县| 林周县| 玉门市| 石渠县| 綦江县|