-
FastAPI 介紹和安裝
- FastAPI 是一個基於 Python 3.6+ 版本的非同步 WEB 應用框架,使用 Python 型別註解構建 web API 。它的主要特點如下:
- 高效能:與 Node JS 和 Go 相當。
- 編碼快:將開發功能的速度提高 2~3 倍。
- Bug少:減少大約 40% 的由開發人員導致的錯誤。
- 直觀:強大的編輯器支援,可智慧感知和補全程式碼。
- 簡單:易於學習和使用,減少文件閱讀時間。
- 簡短:儘量減少程式碼重複。
- 健壯:獲得可用於生產的程式碼,具有自動互動文件。
- 基於標準:基於 OpenAPI 和 JSON Schema 。
- FastAPI 是一個基於 Python 3.6+ 版本的非同步 WEB 應用框架,使用 Python 型別註解構建 web API 。它的主要特點如下:
-
1.安裝
- pip install fastapi
- pip install "uvicorn[standard]"
-
2.請求方式
import uvicorn
from fastapi import FastAPI
app = FastAPI()
@app.get("/index")
def index():
return {"name": "index222"}
@app.post("/home")
def home():
return {"name": "home"}
@app.api_route("/info", methods=["GET", "POST"])
def info():
return {"name": "info"}
if __name__ == '__main__':
uvicorn.run(app, host="127.0.0.1", port=9001)
# uvicorn.run("v1.app", host="127.0.0.1", port=9001,reload=True) # 修改程式碼後,自動重啟
- 3.請求引數
import uvicorn
from fastapi import FastAPI
from fastapi.requests import Request
app = FastAPI()
#http://127.0.0.1:9001/home/12
@app.get("/home/{uid}")
def home(uid):
print(uid)
return {"data": "ok"}
#http://127.0.0.1:9001/index?info=123&age=18
@app.get("/index")
def index(info: str, age: int):
print(info, age)
return {"data": "ok"}
#
# @app.get("/mine/{uid}")
# def mine(uid: int, info: str, age: int):
# print(uid)
# print(info, age)
# return {"data": "ok"}
# http://127.0.0.1:9001/mine/12?info=123&age=18
@app.get("/mine/{uid}")
def mine(request: Request, uid: int):
print(uid)
print(request.query_params) # info=123&age=18
print(request.query_params.get("info"))
return {"data": "ok"}
if __name__ == '__main__':
uvicorn.run(app, host="127.0.0.1", port=9001)
- 4.請求體
import uvicorn
from fastapi import FastAPI
from fastapi.requests import Request
from pydantic import BaseModel
from typing import List, Dict
app = FastAPI()
class Data(BaseModel):
name: str
age: int
hobby: List
info: Dict
@app.post("/home")
def home(data: Data):
print(data.name)
print(data.hobby)
print(data.info)
return {"data": "ok"}
@app.post("/mine")
async def mine(request: Request):
data_dict = await request.json()
print(data_dict)
# {'name': 'xwl', 'age': 19, 'hobby': ['籃球', '足球'], 'info': {'k1': 123, 'k2': 456, 'k3': [111, 222, 33]}}
return {"data": "ok"}
if __name__ == '__main__':
uvicorn.run(app, host="127.0.0.1", port=9001)
- 5.請求中介軟體,攔截所有的請求
import uvicorn
from fastapi import FastAPI
from fastapi import Request
from fastapi.responses import JSONResponse
app = FastAPI()
@app.middleware("http")
async def auth(request: Request, call_next):
print("before")
res = await call_next(request)
print("after")
return res
@app.get("/home")
def home(age):
print(age)
return {"data": "ok"}
if __name__ == '__main__':
uvicorn.run(app, host="127.0.0.1", port=9001)