安装

fastapi只支持Python3.6+ , 所以需要机器上的Python版本至少3.6+

1
2
pip3 install fastapi
pip3 install uvicorn

创建应用

1
2
3
from fastapi import FastAPI

app = FastAPI()

很简单,一行代码就成,和flask很像,同时很多初始话参数可以通过构造函数传入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
def __init__(
self,
*,
debug: bool = False,
routes: List[BaseRoute] = None,
title: str = "FastAPI",
description: str = "",
version: str = "0.1.0",
openapi_url: Optional[str] = "/openapi.json",
openapi_tags: Optional[List[Dict[str, Any]]] = None,
servers: Optional[List[Dict[str, Union[str, Any]]]] = None,
default_response_class: Type[Response] = JSONResponse,
docs_url: Optional[str] = "/docs",
redoc_url: Optional[str] = "/redoc",
swagger_ui_oauth2_redirect_url: Optional[str] = "/docs/oauth2-redirect",
swagger_ui_init_oauth: Optional[dict] = None,
middleware: Sequence[Middleware] = None,
exception_handlers: Dict[Union[int, Type[Exception]], Callable] = None,
on_startup: Sequence[Callable] = None,
on_shutdown: Sequence[Callable] = None,
openapi_prefix: str = "",
root_path: str = "",
**extra: Dict[str, Any],
) -> None:

支持这些参数,看名字就能很简单的知道这些参数具体的作用。

处理请求

1
2
3
@app.get('/')
def user():
return { 'app': user_id}

和flask一样,fastapi用装饰器处理请求,get,post这些分别对应HTTP的GET,POST方法,方法的参数表示请求的路径。

路径参数

1
2
3
@app.get('/name')
async def get_user_name(user_id:int = Query(None)):
return {'user_id':user_id , 'user_name': 'tom'}

请求模型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from fastapi import FastAPI, Query
from pydantic import BaseModel

class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None

app = FastAPI()

@app.post('/user/upload')
async def upload(* , item: Item):
return item