python - django 视图装饰器(view decoration)如何返回 cookie?
本文介绍了python - 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
解决方案
解决了,装饰器这么写:
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
视图那部分代码没问题。
这篇关于python - django 视图装饰器(view decoration)如何返回 cookie?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文