框架特点
一个高性能的异步web框架,既兼顾了开发效率也保证了极致的性能,目前github的star数已经超越了Falsk,另外其自动生成文档等特性也对开发者相当友好与方便,框架对python版本要求要>=python3.6(async/await在python3.5才引入)
高性能:可与Go比肩的极高性能(归功于 Starlette 和 Pydantic)
高效编码:语法有些类似于Flask,提高功能开发速度200%到300%
更少的bug:减少约40%的人为(开发者)导致错误
智能:极佳的编辑器支持,处处皆可自动补全,减少调试时间
简单:设计的易于使用和学习,阅读文档的时间更短
简短:使代码重复最小化,通过不同的参数声明实现丰富功能
健壮:生产可用级别的代码,还自动生成交互式文档
Starlette:一个轻量级的ASGI框架/工具包,负责web部分【Asyncio】
Pydantic:负责数据部分【类型提示】
简单运行案例
数行代码就可以运行起来,有点类似于Flask
from fastapi import FastAPI
import uvicorn
app = FastAPI()
@app.get("/")
async def root():
return {"message":"hello world"}
if __name__ == '__main__':
uvicorn.run(app)
ORM操作
FastAPI通常来说有2个比较常用的ORM:Sqlalchemy 和 Tortoise
Sqlalchemy
官方代码使用的就是Sqlalchemy,Flask官方推荐使用的Flask-Sqlalchemy的前身,使用方式和Flask-Sqlalchemy非常的接近
Tortoise
这是一个受Django启发的异步ORM,其使用方式和Django自带的ORM非常的接近
包括定义模型类、字段定义、外键、多对多、以及迁移数据表等使用方法均很类似
另外,此ORM为异步ORM,可以更契合与FastAPI框架
Tortoise迁移:【aerich】
1.tortoise_orm配置models新增自身的models【aerich.models】
2.初始化:aerich init -t settings.TORTOISE_ORM # 初始化配置,tortoise_orm配置的位置(只执行一次)
3.初始化数据库:aerich init-db [--app] # 创建表(只执行一次)
4.生成迁移文件:aerich migrate [--name] xxx # 指定动作名字,选填
5. 执行迁移:aerich ugrade # 真正执行迁移,写入数据库
中间件
FastAPI的多个中间件执行顺序为:最先定义的最后执行,依此类推。
from fastapi import Request
import uvicorn
app = FastAPI()
@app.middleware("http")
async def m2(request: Request , call_next):
print("m2 request")
response = call_next(request)
print("m2 response")
return response
@app.middleware("http")
async def m1(request: Request , call_next):
print("m1 request")
response = call_next(request)
print("m1 response")
return response
if __name__ == '__main__':
uvicorn.run(app)
# 此时请求的访问结果 会是:m1_request -> m2_request -> m2_response -> m1_response