テンプレートで Ajax を使用しています。ビュー (ajax_view()) を呼び出します。このビューにログイン デコレータを適用したので、ユーザーがログインしていない場合は、最初にログイン ページに移動する必要があります。
しかし、それは機能していません。ログイン デコレーターは、Ajax を使用するビューを除くすべてのビューで機能します。どうすればこれを解決できますか?
テンプレートで Ajax を使用しています。ビュー (ajax_view()) を呼び出します。このビューにログイン デコレータを適用したので、ユーザーがログインしていない場合は、最初にログイン ページに移動する必要があります。
しかし、それは機能していません。ログイン デコレーターは、Ajax を使用するビューを除くすべてのビューで機能します。どうすればこれを解決できますか?
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'}
})