FastAPI记录

框架特点

一个高性能的异步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:SqlalchemyTortoise
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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容