您好,登錄后才能下訂單哦!
Fastapi是一個基于python的框架,該框架鼓勵使用Pydantic和OpenAPI(以前稱為Swagger)進行文檔編制,使用Docker進行快速開發和部署以及基于Starlette框架進行的簡單測試。
它提供了許多好處,例如自動OpenAPI驗證和文檔編制,而無需添加不必要的膨脹。我認為,在不提供任何內置功能與提供太多內置功能之間取得很好的平衡。
安裝 fastapi 和 ASGI 服務器(例如uvicorn):
確保您使用的是Python 3.6.7+ 如果 pip
和python
給您python 2版本,則可能必須使用 pip3
和 python3
。另外,請查看我關于python入門的文章。
pip install fastapi uvicorn
并在main.py
文件中添加舊的“ hello world”:
from fastapi import FastAPI app = FastAPI() @app.get("/") def home(): return {"Hello": "World"}
然后運行以進行開發,可以運行uvicorn main:app --reload
這就是簡單服務器要做的全部!現在您可以檢查 //localhost:8000/ 以查看“主頁”。而且,如您所見,JSON響應“正常工作”!您還可以通過 //localhost:8000/docs 免費獲得Swagger UI。
如前所述,很容易驗證數據(并為接受的數據格式生成Swagger文檔)。只需從fastapi添加Query
導入,然后使用它來強制驗證:
from fastapi import FastAPI, Query @app.get('/user') async def user( *, user_id: int = Query(..., title="The ID of the user to get", gt=0) ): return { 'user_id': user_id }
第一個參數...
是默認值,如果用戶不提供值則提供該默認值。如果設置為None
,則沒有默認值,并且該參數是可選的。為了沒有默認值并且該參數是強制性的,請使用Ellipsis ,或...
代替。
如果運行此代碼,則會在swagger UI上自動看到更新:
Swagger UI允許您查看新的/ user路由并使用特定的用戶ID進行請求
如果您輸入任何用戶ID,您會看到它會自動為您執行請求,例如 //localhost:8000/user?user_id=1。在頁面中,您只能看到回顯了用戶ID!
如果要改為使用路徑參數(以使其為 /user/1
,則只需輸入并使用Path
而不是Query
。也可以結合兩者
如果您有POST
路由,則只需定義輸入即可
@app.post('/user/update') async def update_user( *, user_id: int, really_update: int = Query(...) ): pass
在這種情況下,您可以看到user_id
僅被定義為一個沒有Query
或Path
的整數;這意味著它將在POST請求正文中。如果您接受更復雜的數據結構,例如JSON數據,則應研究請求模型。
您可以使用Pydantic模型記錄并聲明詳細的請求和響應模型。這不僅可以讓您擁有所有模型的自動OpenAPI文檔,而且還可以驗證請求模型和響應模型,以確保輸入的任何POST數據都是正確的,并且返回的數據也符合該模型。
只需像這樣聲明模型:
from pydantic import BaseModel class User(BaseModel): id:: int name: str email: str
然后,如果您希望將用戶模型作為輸入,則可以執行以下操作:
async def update_user(*, user: User): pass
或者,如果您要將其用作輸出:
@app.get('/user') async def user( *, user_id: int = Query(..., title="The ID of the user to get", gt=0), response_model=User ): my_user = get_user(user_id) return my_user
您可以使用APIRouter
將api分解為路由。例如,我已經在我的 API 中找到了這個app / routers / v1 / __ init __。py
from fastapi import APIRouter from .user import router as user_router router = APIRouter() router.include_router( user_router, prefix='/user', tags=['users'], )
然后您可以在app / routers / v1 / user.py
中使用上面的用戶代碼-只需導入APIRouter
并使用@ router.get('/')< aaaa>
而不是 @ app.get('/ user')
。它會自動路由到 / user /
,因為該路由是相對于前綴的。
from fastapi import APIRouter router = APIRouter() @router.get('/') async def user( *, user_id: int = Query(..., title="The ID of the user to get", gt=0), response_model=User ): my_user = get_user(user_id) return my_user
最后,要在應用程序中使用所有v1
路由器,只需將main.py
編輯為:
from fastapi import FastAPI from app.routers import v1 app = FastAPI() app.include_router( v1.router, prefix="/api/v1" )
您可以通過這種方式隨意鏈接路由器,從而允許您拆分大型應用程序并擁有版本化的API。
Fastapi 的作者使出乎意料的輕松之一就是 Dockerizing!默認的Dockerfile
是2行!
FROM tiangolo/uvicorn-gunicorn-fastapi:python3.7 COPY ./app /app
是否想通過自動重新加載進行 Dockerize 開發?這是我在撰寫文件中使用的秘方:
version: "3" services: test-api: build: .. entrypoint: '/start-reload.sh' ports: - 8080:80 volumes: - ./:/app
這會將當前目錄掛載為app
并將在任何更改時自動重新加載。您可能還想將app / app
用于更大的應用程序。
關于Python使用Fastapi開發的步驟就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。