前言
FastAPI 框架,高性能,易于学习,高效编码,生产可用(官网)
下载依赖
1
| pip install fastapi uvicorn
|
创建HTTP服务
main:app::之前必须是文件名
reload=True:开启自动重启HTTP服务
main.py1 2 3 4 5 6 7 8 9 10 11 12 13
| from fastapi import FastAPI import uvicorn
app = FastAPI()
@app.get("/") def index(): return {"key": "value"}
if __name__ == '__main__': uvicorn.run("main:app", host="0.0.0.0", port=8080, reload=True)
|
查看Swagger
定义接收请求类型
GET
1 2 3
| @app.get("/") def index(): return {"key": "value"}
|
POST
1 2 3
| @app.post("/") def index(): return {"key": "value"}
|
PUT
1 2 3
| @app.put("/") def index(): return {"key": "value"}
|
DELETE
1 2 3
| @app.delete("/") def index(): return {"key": "value"}
|
定义路由
目录结构
1 2 3
| + api - test.py - main.py
|
定义路由
api/test.py1 2 3 4 5 6 7 8
| from fastapi import APIRouter
api_test = APIRouter()
@api_test.get("/") def index(): return {"key": "value"}
|
prefix:定义前缀
tags:定义Swagger文档中的接口描述
main.py1 2 3 4 5 6 7 8 9 10
| from fastapi import FastAPI import uvicorn from api.test import api_test
app = FastAPI() app.include_router(api_test, prefix="/test", tags=["测试接口"])
if __name__ == '__main__': uvicorn.run("main:app", host="0.0.0.0", port=8080, reload=True)
|
Request对象
引入依赖
1
| from fastapi import Request
|
获取Query参数
1 2 3 4
| @app.get("/") def index(request: Request): param_str = request.query_params return {"key": "value"}
|
获取Body参数
JSON
1 2 3 4
| @app.post("/") def index(request: Request): body_json = await request.json() return {"key": "value"}
|
1 2 3 4
| @app.post("/") def index(request: Request): body_json = await request.form() return {"key": "value"}
|
静态资源
目录结构
配置静态资源路径
"/img":定义URL前缀
StaticFiles(directory="img"):指定静态文件
directory="img":指定磁盘中的目录路径
main.py1 2 3 4 5 6 7 8 9
| from fastapi import FastAPI import uvicorn
app = FastAPI() app.mount("/img", StaticFiles(directory="img"), name="img")
if __name__ == '__main__': uvicorn.run("main:app", host="0.0.0.0", port=8080, reload=True)
|
整合Jinja2实现模板
下载依赖
引入依赖
1
| from fastapi.templating import Jinja2Templates
|
目录结构
1 2 3
| + templates - index.html - main.py
|
定义HTML模板文件
1 2 3 4 5 6 7 8 9 10 11 12
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body>
{{ key }}
</body> </html>
|
配置模板路径
directory="templates":指定磁盘中的目录路径
"index.html":指定模板文件名
main.py1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| from fastapi import FastAPI import uvicorn from fastapi.templating import Jinja2Templates
app = FastAPI()
templates = Jinja2Templates(directory="templates")
@app.get("/") def index(): return templates.TemplateResponse("index.html", {"request": request, "key": "value"})
if __name__ == '__main__': uvicorn.run("main:app", host="0.0.0.0", port=8080, reload=True)
|
完成
参考文献
哔哩哔哩——程序员科科