django 视图装饰器(view decoration)如何返回 cookie?

我想在运行 cookie_test 时先检查用户 cookie 里是否有 cookie_name,没有的时候设置 cookie 并继续执行 cookie_test 里的内容,请问该如何写?

装饰器:

def set_cookie(view):
    def wrap(request, *args, **kwargs):
        if 'cookie_name' not in request.COOKIES:
            response = HttpResponse('hello')
            response.set_signed_cookie('cookie_name', 'cookie_value', max_age=86400)
            # 这里该如何返回给 cookie_test 呢?
        else:
            return view(request, *args, **kwargs)
    return wrap

视图:

@set_cookie
def cookie_test(request):
    # 这里该如何写呢?
    value = request.get_signed_cookie('cookie_name')
    response = HttpResponse(value)
    return response
阅读 2.5k
1 个回答

解决了,装饰器这么写:

def set_cookie(view):
    def wrap(request, *args, **kwargs):
        if 'cookie_name' not in request.COOKIES:
            # 注意看这里,二次请求当前网址即可
            response = redirect(request.build_absolute_uri())
            response.set_signed_cookie('cookie_name', 'cookie_value', max_age=86400)
            return response
        else:
            return view(request, *args, **kwargs)
    return wrap

视图那部分代码没问题。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题