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 に答える