响应模型-response_model

可以在任意的路径操作中使用 response_model 参数来声明用于响应的模型

  • response_model_exclude_unset=True:过滤没有设置的参数
  • response_model_exclude_defaults=True:过滤默认设置的参数
  • response_model_exclude_none=True: 过滤为None的参数
  • response_model_include:响应参数包含的参数
  • response_model_exclude: 响应参数排除的参数
  1. class Item10(BaseModel):
  2. name: str
  3. description: Optional[str] = None
  4. price: float
  5. tax: float = 10.5
  6. tags: List[str] = []
  7. @app.get("/items10/{item_id}", response_model=Item10, response_model_exclude_none=True, response_model_exclude={"description"})
  8. async def read_item(item_id: str):
  9. return items[item_id]

任意Dict构成的响应

  1. from typing import Dict
  2. @app.get("/keyword-weights", response_model=Dict[str, float])
  3. async def read_key():
  4. return {"foo": 1, "bar": 3.4}

响应状态码-status

通过fastapi.status声明用于响应的HTTP状态码

  1. from fastapi import status
  2. """响应状态码-status"""
  3. @app.post("/items11", status_code=status.HTTP_200_OK)
  4. def item11(name: str):
  5. return {"name": name}

返回HTML响应

通过路径操作的response_class参数传入响应类型

  1. from fastapi.responses import HTMLResponse
  2. from fastapi.templating import Jinja2Templates
  3. app = FastAPI()
  4. # 实例化一个模板引擎对象,指定模板所在路径
  5. templates = Jinja2Templates(directory='templates')
  6. @app.get('/', response_class=HTMLResponse)
  7. # request将作为Jinja2上下文中的键值对的一部分,需要在路径操作中声明
  8. async def homepage(request: Request):
  9. """渲染主页HTML"""
  10. # 返回一个模板对象,同时使用上下文中的数据对模板进行渲染
  11. return templates.TemplateResponse(name='index.html',
  12. context={'request': request})