一、前言
最近我在进行 web 开发,前后端分离的 web。前端框架使用 Vue,使用前端组件库为 Element-UI,后端在 Django-Rest-Framework、Flask、FastApi 中徘徊。经过一个一个的测试。最终选择了 FastApi。
原因有以下几点:
- Django-Rest-Framework:给人的感觉笨重,官方文档对于新手来说不够友好,对于我这个 web 开发的门外汉来说比较难。
- Flask:比较轻量,但是对于 api 的开发不是很适应,还需要特定的函数进行转换。
- FastApi:具有自带 api 文档(界面很好看,开发时不用编写额外的页面进行测试),对 json 格式的 api 非常友好。
下图为自带的测试界面:
二、案例
Hello World
下面是 Hello world 的案例。新建一个
1 2 3 4 5 6 7 8 9 10 | import uvicorn from fastapi import FastAPI app = FastAPI() @app.get("/") async def home(): return {"message": "Hello World"} uvicorn.run(app=app) |
在上面脚本中,
使用
1 | uvicorn.run(app, host="127.0.0.1", port=8000) |
打开 127.0.0.1:8000/docs 即可测试。使用 docs 的测试结果
自带这样的文档有很大的好处-减少了编写测试界面的时间。FastApi 还可以直接使用
在这个案例中,没有体现到 docs 的优势。因为不需要任何输入,即可得到输出。
输入输出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | from fastapi import FastAPI from pydantic import BaseModel, EmailStr app = FastAPI() class UserIn(BaseModel): username: str password: str email: EmailStr full_name: str = None class UserOut(BaseModel): username: str email: EmailStr full_name: str = None @app.post("/user/", response_model=UserOut) async def create_user(*, user: UserIn): return user # pip install pydantic[email] if __name__ == '__main__': import uvicorn uvicorn.run(app, host="127.0.0.1", port=8000) |
在函数中,定义参数为
输入
输出
自带的文档能展示所有的模式(Schemas),会与代码中的类所对应(可以使用字典快速初始化)。
其他优点
- 可以引入其他的模板
- 对新手非常友好的官方教程