0

我在我的模板中使用 Ajax。它调用一个视图 (ajax_view())。我在这个视图上应用了登录装饰器,这样如果用户没有登录,那么他应该首先被引导到登录页面。

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

4

1 回答 1

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'}
})
于 2013-09-09T08:36:44.153 回答