https://fastapi.tiangolo.com/
demo
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
uvicorn main:app --reload
127.0.0.1:8000/docs
127.0.0.1:8000/redoc
http://127.0.0.1:8000/openapi.json
请求参数验证
from enum import Enum
from typing import List, Dict, Set, Tuple, Optional
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
# 有等于号的是可选参数
name: str
price: List[Dict[str, float]]
is_offer: bool = None
# a: Tuple[int, int, bool]
# se: Set[bytes] = {b"123"}
class ModelName(str, Enum):
alexnet = "alexnet"
resnet = "resnet"
lenet = "lenet"
@app.get("/")
async def read_root():
return {"Hello": "World"}
@app.get("/items/{name:str}")
async def read_item(name: ModelName, q: str = None): # 请求参数如果不指定默认值,则必须输入
if name == ModelName.alexnet:
return {"name": name, "message": "Deep Learning FTW!", 'q': q}
if name.value == "lenet":
return {"name": name, "message": "LeCNN all the images", 'q': q}
return {"name": name, "message": "Have some residuals", 'q': q}
@app.put("/items/{item_id}")
async def update_item(item_id: int, item: Item):
print(item)
return {"item_name": item.name, "item_id": item_id}
fake_items_db = [{"item_name": "Foo"}, {"item_name": "Bar"}, {"item_name": "Baz"}]
@app.get("/items2/")
async def read_item(skip: int = 0, limit: Optional[int] = None): # limit
if limit is None:
return fake_items_db[skip: skip + 1] # 这是切片 ,返回数组
else:
return fake_items_db[skip: skip + limit]
# uvicorn main:app --reload