响应 - 更改状态码¶
您可能之前已经阅读过,您可以设置默认的 响应状态码。
但在某些情况下,您需要返回与默认值不同的状态码。
用例¶
例如,假设您想默认返回 "OK" 200
的 HTTP 状态码。
但如果数据不存在,您想创建它并返回 "CREATED" 201
的 HTTP 状态码。
但您仍然希望能够使用 response_model
过滤和转换您返回的数据。
对于这些情况,您可以使用 Response
参数。
使用 Response
参数¶
您可以在 *路径操作函数* 中声明类型为 Response
的参数(就像您可以对 cookie 和标头那样做)。
然后,您可以在该 *临时* 响应对象中设置 status_code
。
from fastapi import FastAPI, Response, status
app = FastAPI()
tasks = {"foo": "Listen to the Bar Fighters"}
@app.put("/get-or-create-task/{task_id}", status_code=200)
def get_or_create_task(task_id: str, response: Response):
if task_id not in tasks:
tasks[task_id] = "This didn't exist before"
response.status_code = status.HTTP_201_CREATED
return tasks[task_id]
然后,您可以像往常一样返回您需要的任何对象(dict
、数据库模型等)。
如果您声明了 response_model
,它仍然会用于过滤和转换您返回的对象。
FastAPI 将使用该 *临时* 响应来提取状态码(以及 cookie 和标头),并将它们放入包含您返回的值的最终响应中,该值将通过任何 response_model
进行过滤。
您也可以在依赖项中声明 Response
参数,并在其中设置状态码。但请记住,最后设置的一个将获胜。