【笔记】FastAPI学习笔记

前言

FastAPI 框架,高性能,易于学习,高效编码,生产可用(官网

下载依赖

1
pip install fastapi uvicorn

创建HTTP服务

main:app:之前必须是文件名
reload=True:开启自动重启HTTP服务

main.py
1
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.py
1
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.py
1
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"}

Form

1
2
3
4
@app.post("/")
def index(request: Request):
body_json = await request.form()
return {"key": "value"}

静态资源

目录结构

1
2
+ img
- main.py

配置静态资源路径

"/img":定义URL前缀
StaticFiles(directory="img"):指定静态文件

directory="img":指定磁盘中的目录路径

main.py
1
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
pip install Jingjia2

引入依赖

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.py
1
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)

完成

参考文献

哔哩哔哩——程序员科科