Javascript 视图中的Django通用身份验证

Javascript 视图中的Django通用身份验证,javascript,python,django,django-views,Javascript,Python,Django,Django Views,如何避免在每个视图函数中都需要这段代码: if request.user.is_authenticated(): return HttpResponse("OK") else: return HttpResponse("Load_Login_Form") 而是在每次“调用”url/视图之前执行它。提供了decorator和mixin来支持这一点。如果您想重定向到未经身份验证的用户的登录页面,那么decorator很容易使用,如果您想做其他事情,但需要使用基于类的视图,那么m

如何避免在每个视图函数中都需要这段代码:

if request.user.is_authenticated():

    return HttpResponse("OK")
else:

    return HttpResponse("Load_Login_Form")
而是在每次“调用”url/视图之前执行它。

提供了decorator和mixin来支持这一点。如果您想重定向到未经身份验证的用户的登录页面,那么decorator很容易使用,如果您想做其他事情,但需要使用基于类的视图,那么mixin更灵活

如果您希望将此行为应用于整个站点,而不是在需要登录的视图中修饰或继承(假设某些白名单页面(如登录)除外),在这个老问题中,有一些中间件示例可以支持这一点: 提供了decorator和mixin来支持这一点。如果您想重定向到未经身份验证的用户的登录页面,那么decorator很容易使用,如果您想做其他事情,但需要使用基于类的视图,那么mixin更灵活

如果您希望将此行为应用于整个站点,而不是在需要登录的视图中修饰或继承(假设某些白名单页面(如登录)除外),在这个老问题中,有一些中间件示例可以支持这一点:

如果用户尚未登录,我将使用自定义方法decorator返回您的登录响应。大概是这样的:

# decorators.py
from django.http import HttpResponse


def check_login(view):
    def wrap(request, *args, **kwargs):
        if not request.user.is_authenticated():
            return HTTPResponse("Load_Login_Form")
        return view(request, *args, **kwargs)
    return wrap
然后,只需将其导入视图文件,并将其添加到要保护的每个视图之前

# views.py
from django.http import HttpResponse
from .decorators import check_login


@check_login
def ok_view(request):
    return HttpResponse("OK")

如果用户尚未登录,我将使用自定义方法decorator返回您的登录响应。大概是这样的:

# decorators.py
from django.http import HttpResponse


def check_login(view):
    def wrap(request, *args, **kwargs):
        if not request.user.is_authenticated():
            return HTTPResponse("Load_Login_Form")
        return view(request, *args, **kwargs)
    return wrap
然后,只需将其导入视图文件,并将其添加到要保护的每个视图之前

# views.py
from django.http import HttpResponse
from .decorators import check_login


@check_login
def ok_view(request):
    return HttpResponse("OK")

我猜我必须切换到类视图?由于我的web应用程序没有将客户端重定向到任何URL,而是使用AJAX和javascript/jquery来动态更改页面,我猜我必须切换到类视图吗?由于我的web应用程序不会将客户端重定向到任何URL,而是使用AJAX和javascript/jquery来动态更改页面,但在这种情况下,如果未登录,如何向服务器发送响应?我的整个web应用程序是动态的,没有url重定向啊,你可能想创建自己的装饰器。我将编辑我的帖子以反映这一点。@Brobin你能解释一下为什么我们需要在这里重新设计轮子,而不是仅仅使用
@login\u required
?@Mojimi正在处理一个单页应用程序,使用每个视图只从响应中的服务器获取数据。如果我们使用
login\u required
,它将重定向到登录页面,而不是给他所需的响应来呈现表单。这很简单,所以自定义装饰器就是解决方案。@Etanany下面对解决方案的评论更详细地解释了Mojimi在寻找什么。但是在这种情况下,如果没有登录,如何向服务器发送响应?我的整个web应用程序是动态的,没有url重定向啊,你可能想创建自己的装饰器。我将编辑我的帖子以反映这一点。@Brobin你能解释一下为什么我们需要在这里重新设计轮子,而不是仅仅使用
@login\u required
?@Mojimi正在处理一个单页应用程序,使用每个视图只从响应中的服务器获取数据。如果我们使用
login\u required
,它将重定向到登录页面,而不是给他所需的响应来呈现表单。这很简单,所以定制装饰器就是解决方案。@Etanany下面对解决方案的评论更详细地解释了Mojimi在寻找什么。
@login\u required
不适合您?
@login\u required
不适合您?