响应模型-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: 响应参数排除的参数
class Item10(BaseModel):
name: str
description: Optional[str] = None
price: float
tax: float = 10.5
tags: List[str] = []
@app.get("/items10/{item_id}", response_model=Item10, response_model_exclude_none=True, response_model_exclude={"description"})
async def read_item(item_id: str):
return items[item_id]
任意Dict构成的响应
from typing import Dict
@app.get("/keyword-weights", response_model=Dict[str, float])
async def read_key():
return {"foo": 1, "bar": 3.4}
响应状态码-status
通过fastapi.status声明用于响应的HTTP状态码
from fastapi import status
"""响应状态码-status"""
@app.post("/items11", status_code=status.HTTP_200_OK)
def item11(name: str):
return {"name": name}
返回HTML响应
通过路径操作的response_class参数传入响应类型
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
app = FastAPI()
# 实例化一个模板引擎对象,指定模板所在路径
templates = Jinja2Templates(directory='templates')
@app.get('/', response_class=HTMLResponse)
# request将作为Jinja2上下文中的键值对的一部分,需要在路径操作中声明
async def homepage(request: Request):
"""渲染主页HTML"""
# 返回一个模板对象,同时使用上下文中的数据对模板进行渲染
return templates.TemplateResponse(name='index.html',
context={'request': request})