login_decorator不适用于ajax

时间:2013-08-27 13:19:12

标签: decorator django-authentication python-decorators

我在模板中使用Ajax。它调用一个视图(ajax_view())。我已在此视图上应用了登录装饰器,因此如果用户未登录,则应首先将其定向到登录页面。

但它不起作用。登录装饰器适用于除使用Ajax的视图之外的每个视图。 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

在ajax调用上,http响应实际上是重定向到登录页面,但是您的页面不会重定向,因为这是异步调用。 你可能想做这样的事情:

def ajax_login_required(f):
 def wrap(request, *args):
  if request.user.is_authenticated():
   return f(request, *args)
  else:
   if request.is_ajax():
     return HttpResponse('false')
   else:
     return login_required(f)(request, *args)
 return wrap

@ajax_login_required
def ajax_view(request):
 #------some code here---------

此后,你必须对你的javascript做一个小改动。 这可能会根据您的ajax调用而改变。

$.getJSON("/my_ajax_url",{},function(r){
  if(!r){window.location='/accounts/login'}
})