【FastAPI】入门基础
-
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)