你可以Response在你的路径操作函数中声明一个 type 的参数(就像你可以为 cookie 做的那样)。
然后您可以在该时间响应对象中设置标头。
from fastapi import FastAPI, Response
app = FastAPI()
@app.get("/headers-and-object/")
def get_headers(response: Response):
response.headers["X-Cat-Dog"] = "alone in the world"
return {"message": "Hello World"}
然后您可以像往常一样返回您需要的任何对象(a dict、数据库模型等)。
如果您声明了 a response_model,它仍将用于过滤和转换您返回的对象。
FastAPI将使用该临时响应来提取标头(还有 cookie 和状态代码),并将它们放在包含您返回的值的最终响应中,由 any 过滤response_model。
您还可以Response在依赖项中声明参数,并在其中设置标头(和 cookie)。
也可以在Response直接返回 a 时添加标题。
按照直接返回响应中的说明创建响应,并将标头作为附加参数传递:
from fastapi import FastAPI
from fastapi.responses import JSONResponse
app = FastAPI()
@app.get("/headers/")
def get_headers():
content = {"message": "Hello World"}
headers = {"X-Cat-Dog": "alone in the world", "Content-Language": "en-US"}
return JSONResponse(content=content, headers=headers)
技术细节
您也可以使用from starlette.responses import Response或from starlette.responses import JSONResponse。
FastAPI提供相同starlette.responses的fastapi.responses,就像为你的方便,开发人员。但大多数可用的响应直接来自 Starlette。
由于Response可以经常用于设置标头和 cookie,FastAPI也在fastapi.Response.
但是,如果您希望浏览器中的客户端能够看到自定义标头,则需要使用Starlette 的 CORS 中记录的参数将它们添加到 CORS 配置中(在CORS(跨源资源共享)中了解更多信息) 文档。expose_headers