django HttpResponseRedirect from函数

django HttpResponseRedirect from函数,django,Django,我有这样的代码 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 th

我有这样的代码

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
我想在我的许多视图中检查login,所以我想把它放在一个易于使用的函数中


但是,由于某些原因,HttpResponseRedirect不起作用。我可以使用render,但不能使用httpresponseredirect。

有来自Django.contrib.auth.decorators的内置Django解决方案
,需要导入登录名
您只需将decorator放在上面:

@login_required
def somFunc():
或者,如果它是django.utils.decorators导入方法\u decorator的通用视图而不是函数

@method_decorator(login_required)
def dispatch(self, request, *args, **kwargs):

Django.contrib.auth.decorators中有内置的Django解决方案
,需要导入登录名
您只需将decorator放在上面:

@login_required
def somFunc():
或者,如果它是django.utils.decorators导入方法\u decorator的通用视图而不是函数

@method_decorator(login_required)
def dispatch(self, request, *args, **kwargs):

Django.contrib.auth.decorators中有内置的Django解决方案
,需要导入登录名
您只需将decorator放在上面:

@login_required
def somFunc():
或者,如果它是django.utils.decorators导入方法\u decorator的通用视图而不是函数

@method_decorator(login_required)
def dispatch(self, request, *args, **kwargs):

Django.contrib.auth.decorators中有内置的Django解决方案
,需要导入登录名
您只需将decorator放在上面:

@login_required
def somFunc():
或者,如果它是django.utils.decorators导入方法\u decorator的通用视图而不是函数

@method_decorator(login_required)
def dispatch(self, request, *args, **kwargs):

对于您的用例,您可以使用登录所需的装饰器

但是,通常只有view函数的返回值作为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

对于您的用例,您可以使用登录所需的装饰器

但是,通常只有view函数的返回值作为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

对于您的用例,您可以使用登录所需的装饰器

但是,通常只有view函数的返回值作为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

对于您的用例,您可以使用登录所需的装饰器

但是,通常只有view函数的返回值作为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

非常感谢你的解释。非常感谢你的解释。非常感谢你的解释。非常感谢你的解释。非常感谢你的解释。