fastapi教程高階

2022-06-11 07:27:10 字數 2622 閱讀 4565

from fastapi import fastapi

async def root():

return

fastapi繼承starlette,因此在starlette中的所有可呼叫的物件在fastapi中可以直接引用
from fastapi import fastapi
這個路徑告訴fastapi,該裝飾器下的方法是用來處理路徑是「/」的get請求

async def root():
return

from fastapi import fastapi

async def read_item(item_id):

return

路徑中的item_id將會被解析,傳遞給方法中的item_id。請求會返回如下結果:

也可以在方法中定義引數型別:

from fastapi import fastapi

async def read_item(item_id: int):

return

繼續請求會返回

此時的item_id是int型別的3,而不是string型別,這是因為fastapi在解析請求時,自動根據宣告的型別進行了解析

如果請求,此時會返回:

]

}

這是因為foo並不能轉換成int型別。請求也會出現上述錯誤

所有的資料型別驗證,都是通過pydantic完成的

如果想對路徑引數做乙個預定義,可以使用enum:

from enum import enum

from fastapi import fastapi

class modelname(str, enum):

alexnet = "alexnet"

resnet = "resnet"

lenet = "lenet"

async def get_model(model_name: modelname):

if model_name == modelname.alexnet:

return

if model_name.value == "lenet":

return

return

開啟

除此之外,假如想接收乙個路徑引數,它本身就是乙個路徑,就像/files/,而這個file_path是home/johndoe/myfile.txt時,可以寫成/files/:

from fastapi import fastapi

async def read_user_me(file_path: str):

return

openapi本身不支援在路徑引數包含路徑,但是可以當作starlette內部的乙個使用方法

此時訪問返回:

如果將路徑改為/files/,會返回:

這裡依舊是乙個例子:

from fastapi import fastapi

fake_items_db = [, , ]

async def read_item(skip: int = 0, limit: int = 10):

return fake_items_db[skip : skip + limit]

嘗試訪問返回:

[,]
嘗試訪問返回:

[,,]
由於我們在定義方法的時候,分別賦予skip和limit預設值,當不新增querystring時,會使用預設值。當然,我們也可以將預設值賦值為none:

from fastapi import fastapi

async def read_item(item_id: str, q: str = none):

if q:

return

return

值得放心的一點是,fastapi很聰明,他知道引數來自**~

假如,我們不給引數預設值會發生什麼情況呢?這裡還是乙個例子:

from fastapi import fastapi

async def read_user_item(item_id: str, needy: str):

item =

return item

繼續請求會發現,返回報錯:

]}

FastAPI 高階知識 六 啟動 關閉事件

我們可以在應用啟動和關閉的時候自定義事件處理器。注意,只有主應用才可以這麼做。啟動事件 通過 startup 事件來宣告乙個應當在應用啟動之前執行的函式。from fastapi import fastapi items startup async defstartup event items fo...

FastAPI學習 2 fastapi引數詳解

1.檢視fastapi原始碼 引數如下 from fastapi import fastapi from starlette.responses import jsonresponse 此型別不可少 from starlette.routing import route request引數不可少 a...

FastAPI學習 RequestBody請求體

get操作不能使用requestbody,post put delete patch可以。請求體使用前,必須要引入pydantic庫中的basemodel類進行宣告,傳入前建立相應的資料模型 from fastapi import fastapi from pydantic import basem...