使用一个Response参数
你可以在你的路径操作函数中声明一个Response类型的参数(就像声明cookies那样)
然后,你你就可以在临时response对象中设置headers
from fastapi import FastAPI, Responseapp = FastAPI()@app.get("/headers-and-object/")def get_headers(response: Response):response.headers["X-Cat-Dog"] = "alone in the world"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作为一个额外参数
from fastapi import FastAPIfrom fastapi.responses import JSONResponseapp = 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)
:::info
技术细节
你也可是使用 from starlette.responses import Response 或 from 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
