FastAPI備忘錄

      網友投稿 993 2025-03-31

      基本使用備忘錄

      交互式API文檔

      Pydantic: 類型強制檢查

      基本使用備忘錄

      交互式API文檔

      Pydantic: 類型強制檢查

      路徑參數

      路徑參數的預定義值

      路徑參數中包含文件路徑

      請求參數

      Request Body

      多個Request Body

      嵌入單個Request Body

      基于Query的請求參數附加信息

      基于Query的請求參數列表

      基于fastapi.Path的路徑參數附加信息

      參數順序

      Pydantic復雜模型

      復雜數據類型

      Cookie操作

      Header操作

      讀取Header信息

      自動轉換

      返回Header信息

      使用Response參數

      直接返回Response

      Response模型

      Response自定義狀態碼

      Form表單數據

      fastAPI 基礎學習(系列)

      基本使用備忘錄

      交互式API文檔

      我們訪問以下兩個地址,可獲取自動生成的交互式API文檔,并且當代碼改動時文檔會自動更新。方便我們的開發調試。

      http://127.0.0.1:8000/docs (基于 Swagger UI)

      http://127.0.0.1:8000/redoc (基于 ReDoc)

      Pydantic: 類型強制檢查

      對于 API 服務,支持類型檢查非常有用,會讓服務更加健壯,也會加快開發速度,因為開發者再也不用自己寫一行一行的做類型檢查。

      路徑參數

      FastAPI 基礎學習(四) 路徑參數

      路徑參數的預定義值

      我們可以使用Python Enum來聲明路徑參數的預定義值。

      from enum import Enum class ModelName(str, Enum): alexnet = "alexnet" resnet = "resnet" lenet = "lenet"

      這里,我們聲明了一個類ModelName,它繼承自str(這樣限制了值的類型必須是字符串類型)和Enum。

      路徑參數中包含文件路徑

      當路徑參數中包含文件路徑時,比如 /files/{file_path} ,我們可以用聲明file_path類型的方式進行支持。

      這里 :path 指出了file_path可以匹配任何文件路徑。

      from fastapi import FastAPI app = FastAPI() @app.get("/files/{file_path:path}") async def read_file(file_path: str): return {"file_path": file_path}

      請求參數

      FastAPI可以非常智能的識別參數種類,這里參數item_id是一個路徑參數,而參數q是一個請求參數。

      你可以同時聲明多個路徑參數、多個請求參數,并且不用考慮聲明順序。FastAPI可以準確無誤的識別參數類型。

      Request Body

      多個Request Body

      嵌入單個Request Body

      @app.put("/items/{item_id}") async def update_item(*, item_id: int, item: Item = Body(..., embed=True)): results = {"item_id": item_id, "item": item} return results

      對于Request Body里的單個數值,FastAPI提供了便利的操作方法Body。注意,這里如果沒有Body方法的話,參數importance就只是個請求參數,所以務必注意下。

      基于Query的請求參數附加信息

      q: str = Query(None) # 可選參數聲明,等同于 q: str = None q: str = Query("query") # 缺省值參數聲明,等同于 q: str = "query" q: str = Query(...) # 必選參數聲明,等同于 q: str q: str = Query(None, max_length=50) # 限制q的最大長度不超過50

      數值型參數信息說明:

      gt: 大于(greater than) ge: 大于或等于(greater than or equal) lt: 小于(less than) le: 小于或等于( less than or equal)

      主要用于字符串參數的附加信息:

      min_length:最小長度 max_length:最大長度 regex:正則表達式

      主要用于自動化文檔的附加信息:

      title:參數標題 description:參數描述信息 deprecated:表示參數即將過期

      特殊附加信息:

      alias:參數別名

      基于Query的請求參數列表

      @app.get("/items/") async def read_items(q: List[str] = Query(["foo", "bar"])): query_items = {"q": q} return query_items

      基于fastapi.Path的路徑參數附加信息

      FastAPI備忘錄

      https://www.cnblogs.com/mazhiyong/p/12911618.html

      注意,路徑參數在URL里是必選的,因此Path的第一個參數是 ... ,即使你傳遞了None或其他缺省值,也不會影響參數的必選性。

      @app.get("/items/{item_id}") async def read_items( q: str, item_id: int = Path(..., title="The ID of the item to get") ): results = {"item_id": item_id} if q: results.update({"q": q}) return results

      參數順序

      不帶缺省值的參數應放在前面,而FastAPI根據參數名稱、類型以及聲明方法(如Query、Path等等)來識別具體參數意義,并不關心參數順序。但這樣對開發人員來說容易把多種類型參數混淆,怎么辦?

      @app.get("/items/{item_id}") async def read_items( *, item_id: int = Path(..., title="The ID of the item to get"), q: str ):

      參數排序的技巧:通過傳遞 * 作為第一個參數,就解決了上面的參數順序問題:Python并不會對 * 做任何操作。但通過識別 *,Python知道后面所有的參數都是關鍵字參數(鍵值對),通常也叫kwargs,無論參數是否有默認值。

      Pydantic復雜模型

      https://www.cnblogs.com/mazhiyong/p/12923751.html

      Pydantic模型的附加信息

      Pydantic嵌套模型

      復雜數據類型

      https://www.cnblogs.com/mazhiyong/p/12928963.html

      Cookie操作

      基于Query、Path等模塊同樣的模式,我們可以利用 Cookie 模塊來聲明cookies。Cookie是Query、Path的姐妹類,它們都繼承自Param類。

      from fastapi.responses import JSONResponse @app.post("/cookie/") def create_cookie(): content = {"message": "Come to the dark side, we have cookies"} response = JSONResponse(content=content) response.set_cookie(key="fakesession", value="fake-cookie-session-value") return response

      Header操作

      https://www.cnblogs.com/mazhiyong/p/12930938.html

      Header 是Query、Path、Cookie的姐妹類,它們都繼承自Param類。

      讀取Header信息

      @app.get("/items/") async def read_items(*, user_agent: str = Header(None)): return {"User-Agent": user_agent}

      大多數headers中都帶有"-“字符,如"User-Agent”,但在Python中,User-Agent 并不是一個合法的變量名稱。

      我們可以通過設置Header中的 convert_underscores參數為Flase,來禁止這種從 _ 到 - 的字符轉換(大多數情況下并并不需要)。

      返回Header信息

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

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

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

      @app.get("/headers-and-object/") def get_headers(response: Response): response.headers["X-Cat-Dog"] = "alone in the world" return {"message": "Hello World"}

      我們也可以在直接返回的Response對象中設置header信息。

      @app.get("/headers/") def get_headers(): content = {"message": "Hello World"} headers = {"X-Cat-Dog": "alone in the world", "Content-Language": "en-US"} return JSONResponse(content=content, headers=headers)

      Response模型

      https://www.cnblogs.com/mazhiyong/p/12942241.html

      在路徑操作中,我們可以用參數response_model來聲明Response模型。常常用于:限制輸出數據只能是所聲明的Response模型。

      Response自定義狀態碼

      https://www.cnblogs.com/mazhiyong/p/12957121.html

      @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]

      Form表單數據

      https://www.cnblogs.com/mazhiyong/p/12957658.html

      安裝組件 pip install python-multipart

      from fastapi import Form

      Form的詳細使用可參考Query、Path、Cookie、Body。它直接繼承自Body。

      @app.post("/login/") async def login(*, username: str = Form(...), password: str = Form(...)): return {"username": username}

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Netdata監控安裝(漢化)
      下一篇:excel表格一動就未響應的解決方法(excel2010表格一動就未響應)
      相關文章
      中文字幕亚洲综合久久综合| 国产精一品亚洲二区在线播放| 亚洲欧洲美洲无码精品VA| 亚洲国产欧美国产综合一区 | 亚洲伊人色一综合网| 久久亚洲精品成人| 亚洲日本一区二区三区在线| 在线观看国产区亚洲一区成人| 亚洲情侣偷拍精品| 亚洲国产V高清在线观看| 亚洲AV无码国产精品永久一区| 亚洲综合伊人制服丝袜美腿| 亚洲一级毛片免费在线观看| 亚洲ts人妖网站| 亚洲男人天堂2022| 亚洲香蕉在线观看| 亚洲天堂2017无码中文| 中国亚洲呦女专区| 亚洲综合精品成人| 亚洲日本va一区二区三区| 亚洲中文字幕乱码熟女在线| 亚洲国产成人AV在线播放| 国产91成人精品亚洲精品| 亚洲日本中文字幕天堂网| 日韩精品亚洲aⅴ在线影院| 国产亚洲精久久久久久无码| 亚洲久本草在线中文字幕| 中文字幕亚洲综合精品一区| 亚洲成人在线免费观看| 亚洲一级免费毛片| 亚洲乱码av中文一区二区| 亚洲av色香蕉一区二区三区| 亚洲国产精品狼友中文久久久| 亚洲日韩国产成网在线观看| 亚洲性猛交XXXX| 亚洲AV区无码字幕中文色| 亚洲精品美女久久久久9999| 亚洲一区二区三区在线网站| 日韩欧美亚洲国产精品字幕久久久| 国产亚洲日韩在线a不卡| 亚洲精品99久久久久中文字幕|