FastAPI学习-21.response 参数-设置响应Cookies

文章介绍了如何在FastAPI中使用Response参数设置cookies,以及如何根据response_model自动处理响应对象。还提到直接响应Response时创建cookies的用法和注意事项。

前言

可以在 路径函数 中定义一个类型为 Response的参数,这样你就可以在这个临时响应对象中设置cookie了。

response 参数

设置cookies

from fastapi import FastAPI, Response

app = FastAPI()


@app.post("/cookie-and-object/")
def create_cookie(response: Response):
    response.set_cookie(key="fakesession", value="fake-cookie-session-value")
    return {"message": "Come to the dark side, we have cookies"}

而且你还可以根据你的需要响应不同的对象,比如常用的 dict,数据库model等。

如果你定义了 response_model,程序会自动根据response_model来过滤和转换你响应的对象。

FastAPI 会使用这个 临时 响应对象去装在这些cookies信息 (同样还有headers和状态码等信息), 最终会将这些信息和通过response_model转化过的数据合并到最终的响应里。

你也可以在depend中定义Response参数,并设置cookie和header。

<think>好的,我现在需要帮助用户了解在FastAPI中如何自定义或使用Response对象。首先,我得回忆一下FastAPI的文档和相关知识。记得Response对象允许直接控制返回给客户端的数据,比如状态码、头部信息、内容等。用户可能需要在某些情况下自定义响应,比如返回特定的状态码或者修改响应头。 首先,我应该从基本用法开始。用户可能想知道如何在路由函数中使用Response参数。比如,在路径操作函数中声明一个fastapi.Response类型的参数,然后直接操作这个对象。例如设置状态码、内容类型或者自定义头信息。这时候可能需要示例代码来展示如何实现。 接下来,用户可能想了解如何直接返回Response对象。比如,创建JSONResponse、PlainTextResponse或者RedirectResponse的实例。不同的响应类型对应不同的情况,比如返回JSON数据、纯文本或者重定向。这部分需要给出具体的例子,说明如何构造和返回这些响应对象。 然后,用户可能对自定义响应内容感兴趣。例如修改响应头,设置Cookies,或者处理文件下载。这部分需要详细说明如何通过Response对象来设置这些属性,并提供相应的代码片段。 另外,用户可能想知道如何结合使用Pydantic模型和Response对象。比如,在返回数据模型的同时自定义状态码或头信息。这时候可能需要使用response_model参数,并展示如何将模型与Response结合。 还要注意引用用户提供的参考内容。比如,引用[^1]提到可以在路由函数中声明Response参数,直接操作它。而引用[^2]可能涉及异常处理,但用户的问题主要关注Response对象,所以重点放在引用的内容上。 最后,考虑用户可能遇到的问题,比如性能影响、常见错误或者高级用法,生成相关问题。例如,如何设置Cookies,处理大文件响应,或者自定义媒体类型。这些问题可以帮助用户进一步探索相关知识。 现在需要组织这些内容,确保结构清晰,步骤明确,每个部分都有代码示例和解释。同时遵循系统指令,正确使用LaTeX格式,避免使用Markdown,用中文回答,并自然添加引用标识。</think>在FastAPI中,自定义响应对象可通过直接操作`fastapi.Response`类实现,以下是具体实现方法和使用场景: ### 一、基础响应控制 1. **声明Response参数** 在路径操作函数中添加`response: Response`参数后,可直接操作其属性: ```python from fastapi import FastAPI, Response app = FastAPI() @app.get("/custom-header") def set_custom_header(response: Response): response.headers["X-Custom-Header"] = "SpecialValue" response.status_code = 202 return {"message": "查看响应头"} ``` 此代码会返回HTTP状态码202,并添加自定义响应头[^1] 2. **直接返回Response对象** FastAPI内置多种响应类型,可直接构造返回: ```python from fastapi.responses import JSONResponse @app.get("/json-data") def get_json(): return JSONResponse( content={"status": "success"}, headers={"Cache-Control": "no-store"}, status_code=201 ) ``` ### 二、高级响应配置 $$ \text{响应状态码计算公式:} \\ \text{有效状态码} \in [100, 599] \cap \mathbb{Z} $$ 1. **文件下载响应** ```python from fastapi.responses import FileResponse @app.get("/download") def download_file(): return FileResponse("data.zip", filename="dataset.zip") ``` 2. **流式响应处理** ```python from fastapi.responses import StreamingResponse def generate_large_csv(): for row in range(10^6): yield f"data{row}\n" @app.get("/stream") def stream_data(): return StreamingResponse(generate_large_csv(), media_type="text/csv") ``` ### 三、结合数据模型 ```python from pydantic import BaseModel class User(BaseModel): name: str age: int @app.post("/create", response_model=User) def create_user(user: User): return JSONResponse( content=user.dict(), status_code=201 ) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值