python+uvicorn+fastapi (一) - 認識與第一個DEMO


python+uvicorn+fastapi

背景

使用python的同學,有沒有因為不知道用什么接口來測試自己的代碼而郁悶?這里我們使用python+uvicorn+fastapi來寫一些接口DEMO,DEMO中的接口可能包含form-data、x-www-form-urlencoded、json的等等。

安裝和運行

安裝

pip install fastapi

FastAPI 是一個為你的 API 提供了所有功能的 Python 類

ASGI 服務器,生產環境可以使用 Uvicorn

pip install uvicorn[standard]

示例

__author__ = 'kangpc'
__date__ = '2021-6-27 22:51'

from typing import Optional
import uvicorn
from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
    return {"item_id": item_id, "q": q}

詳細解釋:

@app.get("/items/{item_id}")

路徑操作裝飾器,告訴fastapi在該裝飾器下方的read_item函數是負責處理如下請求的:

  • 請求路徑為/items/{item_id}
  • 使用get操作
def read_item(item_id: int, q: Optional[str] = None)

read_item函數有兩個參數item_id,q,且item_id是int型且必填,q是字符串類型且默認值為None的可選參數

`return {"item_id": item_id, "q": q}`

return的對象就是返回內容reponse ,你可以返回一個 dictlist,像 strint 一樣的單個值等等。

啟動server兩個方式

1.命令行啟動

D:\myproject\20210622\test_server>uvicorn example:app --port 8002 --reload
INFO:     Started server process [32504]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://127.0.0.1:8002 (Press CTRL+C to quit)

example:example.py 文件(一個 Python "模塊")。
app:在 main.py 文件中通過 app = FastAPI() 創建的對象。
--reload:讓服務器在更新代碼后重新啟動。僅在開發時使用該選項。

2.代碼里面寫main函數,在main函數里指定app、主機、端口,直接運行代碼啟動

if __name__ == '__main__':
    uvicorn.run(app='example:app', host="127.0.0.1", port=8001, reload=True, debug=True)

運行起來后,因為示例是get請求,可以直接在瀏覽器看一下效果:

瀏覽器輸入http://127.0.0.1:8002/items/100?q=1 回車,你會看到頁面顯示的返回內容為:

{"item_id":100,"q":"1"}

引用官方的總結

  • 導入 FastAPI
  • 創建一個 app 實例。
  • 編寫一個路徑操作裝飾器(如 @app.get("/"))。
  • 編寫一個路徑操作函數(如上面的 def root(): ...)。
  • 運行開發服務器(如 uvicorn main:app --reload)。

交互式 API 文檔

[swagger-ui]: (http://127.0.0.1:8002/docs)

寫好接口后,框架自動生成fastapi swagger-ui文檔,灰常好用。

可選依賴

用於 Pydantic:

用於 Starlette:

  • requests - 使用 TestClient 時安裝。
  • aiofiles - 使用 FileResponseStaticFiles 時安裝。
  • jinja2 - 使用默認模板配置時安裝。
  • python-multipart - 需要通過 request.form() 對表單進行「解析」時安裝。
  • itsdangerous - 需要 SessionMiddleware 支持時安裝。
  • pyyaml - 使用 Starlette 提供的 SchemaGenerator 時安裝(有 FastAPI 你可能並不需要它)。
  • graphene - 需要 GraphQLApp 支持時安裝。
  • ujson - 使用 UJSONResponse 時安裝。

用於 FastAPI / Starlette:

  • uvicorn - 用於加載和運行你的應用程序的服務器。
  • orjson - 使用 ORJSONResponse 時安裝。

你可以通過 pip install fastapi[all] 命令來安裝以上所有依賴。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM