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
不适合您?