亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

怎么使用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

湖南省| 德格县| 宜黄县| 石柱| 保靖县| 泸州市| 鄂州市| 彭泽县| 衡水市| 洛扎县| 九台市| 昂仁县| 禄劝| 虎林市| 兴国县| 清远市| 罗江县| 武威市| 西青区| 安丘市| 板桥市| 久治县| 渭源县| 泾阳县| 尼木县| 灵川县| 明光市| 盐城市| 乌苏市| 图木舒克市| 正阳县| 进贤县| 汽车| 米林县| 安仁县| 德清县| 巴青县| 宝丰县| 科技| 洛宁县| 治多县|