如何在FastAPI的Jinja2 TemplateResponse中设置Cookie?
问题出在你直接返回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
相关产品推荐
相关产品推荐

