首页 > 解决方案 > 如何设置 cookie 值,然后立即重定向到下一页并显示其中的内容

问题描述

所以我需要从一个视图存储两个变量并重定向到另一个视图并显示它们。显而易见的解决方案是使用会话,但我无权访问会话,因为我没有该项目的数据库,所以我尝试在客户端进行会话,因为无论如何这并不是一个真正的安全问题。这是我迄今为止的尝试:

查看我设置 cookie 的位置:

            response = HttpResponse('/result')
            response.set_cookie('passes', True)
            response.set_cookie('errors', [])
            v = jsonschema.Draft4Validator(schema)
            #Uses lazy validation to add all errors to validationErrors array
            for error in v.iter_errors(jsonFile):
                validationErrors.append(error)
                response.set_cookie('passes', False)
            for error in validationErrors:
                error.schma_path = error.schema_path.__str__()[5:]
                print error.schma_path
                print error.schema_path
            response.set_cookie('errors',validationErrors)
            ... 
            return redirect('/result')

查看我尝试获取 cookie 的位置:

passes = request.COOKIES.get('passes',"Doesn't Exist")
errors = request.COOKIES.get('errors', "Doesn't Exist")
return render(request, 'result.html', context = {'errors': errors, 'passes': passes})

未设置通过和错误,因为它们都返回不存在。如果不返回原始页面,我将如何做到这一点?我不想在 response = render_to_response(current view's template) 处返回响应,因为它违背了我想要做的事情的目的。

标签: pythondjangocookiesclient-side

解决方案


您没有获得任何 cookie 值,因为实际上在为响应分配 cookie 之后,该函数返回另一个 Http 响应。

response = HttpResponse('/result') # first Http Response
response.set_cookie('errors', [])
... 
return redirect('/result')  # An other one

在最后一行,您返回另一个响应。

所以你应该返回相同的响应:

response = redirect('/result') # redirect is here
response.set_cookie('errors', [])
... 
return response 

推荐阅读