You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在FastAPI的Jinja2 TemplateResponse中设置Cookie?

解决FastAPI同时设置Cookie并返回Jinja2模板的问题

问题出在你直接返回TemplateResponse时,它会创建新的Response对象,覆盖了你之前在传入的response参数上设置的Cookie。可以通过两种方式解决:

方法一:复用已设置Cookie的Response对象

将你操作过的response对象传递给TemplateResponse的response参数,这样模板响应会基于这个已设置Cookie的对象生成:

@app.get("/oauth/auth", response_class=HTMLResponse)
async def login_page(request: Request, response: Response):
    client_Code_Req_Schema = ClientCodeReqSchema(
        client_id=request.query_params.get("client_id"),
        redirect_uri=request.query_params.get("redirect_uri"),
        response_type=request.query_params.get("response_type")
    )
    if check_client(client_Code_Req_Schema):      
        response.set_cookie(key="redirect_uri", value="test")
        # 传入已设置Cookie的response对象
        return templates.TemplateResponse(
            "authorize.html", 
            {"request": request},
            response=response
        )
    else:
        raise HTTPException(status_code=400, detail="Invalid request")

方法二:直接在TemplateResponse实例上设置Cookie

TemplateResponse本身是Response的子类,支持set_cookie方法,直接操作它即可:

@app.get("/oauth/auth", response_class=HTMLResponse)
async def login_page(request: Request):
    client_Code_Req_Schema = ClientCodeReqSchema(
        client_id=request.query_params.get("client_id"),
        redirect_uri=request.query_params.get("redirect_uri"),
        response_type=request.query_params.get("response_type")
    )
    if check_client(client_Code_Req_Schema):      
        template_response = templates.TemplateResponse(
            "authorize.html", 
            {"request": request}
        )
        template_response.set_cookie(key="redirect_uri", value="test")
        return template_response
    else:
        raise HTTPException(status_code=400, detail="Invalid request")

内容的提问来源于stack exchange,提问作者arcanespud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 06:06:06