我有这样的代码
def checkLogin(request)
if request.user.is_authenticated:
return None
else:
return HttpResponseRedirect(reverse(login))
def somePage(request)
checkLogin(request) #kicks the user out if not login
#do other things here if not kick out
我想在我的许多视图中检查登录,所以我想把它放在一个易于使用的函数中。
但是由于某些原因,HttpResponseRedirect无法正常工作。我可以使用渲染而不是httpresponseredirect。
答案 0 :(得分:3)
有内置的Django解决方案from django.contrib.auth.decorators import login_required
你需要把装饰器放在上面:
@login_required
def somFunc():
或者如果它是通用视图而不是函数from django.utils.decorators import method_decorator
:
@method_decorator(login_required)
def dispatch(self, request, *args, **kwargs):
答案 1 :(得分:0)
对于您的用例,您可以使用login_required装饰器https://docs.djangoproject.com/en/1.7/topics/auth/default/#the-login-required-decorator
一般情况下,只有视图函数的返回值作为HttpResponse返回,你可以这样做:
def checkLogin(request)
if request.user.is_authenticated:
return None
else:
return HttpResponseRedirect(reverse(login))
def somePage(request)
needs_login = checkLogin(request) #kicks the user out if not login
if needs_login:
return needs_login
#do other things here if not kick out
唯一的例外是当你想要返回404时。你可以引发一个404异常,它会冒泡到视图中。
def checkLogin(request)
if not request.user.is_authenticated:
raise Http404
def somePage(request)
checkLogin(request) #kicks the user out if not login
#do other things here if not kick out