使用一个Response参数

你可以在你的路径操作函数中声明一个Response类型的参数(就像声明cookies那样)
然后,你你就可以在临时response对象中设置headers

  1. from fastapi import FastAPI, Response
  2. app = FastAPI()
  3. @app.get("/headers-and-object/")
  4. def get_headers(response: Response):
  5. response.headers["X-Cat-Dog"] = "alone in the world"
  6. return {"message": "Hello World"}

然后,你可以返回任何对象,比如(dict,数据库model,等)

并且,如果你声明了response_model,它将用户过滤和转换您返回的对象

FastAPI将使用这个临时Response对象提取headers(也可以是cookies和状态码),然后把他们放到最终返回的response,由response_model过滤。

你也可以在依赖中声明一个Response参数,然后设置headers(和cookies)

直接返回Response

你也可以在返回Response时直接添加headers

Return a Response Directly中创建一个responses作为描述,并且通过headers作为一个额外参数

  1. from fastapi import FastAPI
  2. from fastapi.responses import JSONResponse
  3. app = FastAPI()
  4. @app.get("/headers/")
  5. def get_headers():
  6. content = {"message": "Hello World"}
  7. headers = {"X-Cat-Dog": "alone in the world", "Content-Language": "en-US"}
  8. return JSONResponse(content=content, headers=headers)

:::info 技术细节
你也可是使用 from starlette.responses import Responsefrom starlette.responses import JSONResponse.
FastAPI提供相同的方法fastapi.responses,仅为了方便,大多数可用的Response都直接来自于Starlette
并且在Response中用于被频繁的用户设置headers和cookies,FastAPI也提供了fastapi.Response. :::

自定义Headers


请记住,自定义头部必须添加 ‘X-‘前缀,
但是如果你有自定义的headers,你想要浏览器客户端能被看到,你需要把他们添加到CORS配置中,详细参数expose_headers 文档在Starlette’s CORS docs