2013-08-27 119 views
0

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

但它不工作。除了使用Ajax的视图以外,登录装饰器可用于每个视图。 我该如何解决这个问题?

回答

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'} 
})