私はログインしていないユーザーだけにログインビューを開きたいと思っています。ユーザがログインすると、手動で/ login/urlを打つことによってログインビューにアクセスすることはできません。事前にユーザーがログインした後にログインビューを制限する方法は?
感謝:)
私はログインしていないユーザーだけにログインビューを開きたいと思っています。ユーザがログインすると、手動で/ login/urlを打つことによってログインビューにアクセスすることはできません。事前にユーザーがログインした後にログインビューを制限する方法は?
感謝:)
あなたは@user_passes_test
を使用することができます。
from django.contrib.auth.decorators import user_passes_test
def user_is_not_logged_in(user):
return not user.is_authenticated()
@user_passes_test(user_is_not_logged_in)
def my_view(request):
...
あなたは別のURLにリダイレクトし、サーバのエラーを回避するために@user_passes_test(user_is_not_logged_in, login_url='/')
を使用することができます。
これは動作しています。ユーザーがログイン後に手動で/ login/urlを押すと、サーバーは応答しません。これを修正する方法を提案してください。 –
@wimこのメソッドは正しく動作しています。 –
'@user_passes_test(user_is_not_logged_in、login_url = '/')'これを使用して別のURLにリダイレクトし、サーバの問題を取得することはできません。 –
このanon_required
デコレータ(未テスト)のような何か試してみてください:あなたは、おそらく彼は、ログインしたい、自分のプロファイルに(またはログアウトURLにユーザーをリダイレクトするように、代わりにHTTP 400を返すので何かを行うことができます
def anon_required(view_func):
"""
Decorator for views that checks that the user is NOT logged in.
"""
def decorated(request, *args, **kwargs):
if request.user.is_authenticated():
raise HttpResponseBadRequest("Get out, you are authenticated.")
return view_func(request, *args, **kwargs)
return decorated
を別のユーザーとして)。
だけLoginViewをインポートし、合格 - redirect_authenticated_user=True
すべてのものはurls.pyに完成する予定
Soがurls.pyは-
from django.conf.urls import url
from django.contrib.auth.views import LoginView
urlpatterns = [
url(r'^login/$', LoginView.as_view(redirect_authenticated_user=True), name='login'),
]
です。 LoginViewの引数は、ログインしたユーザーをリダイレクトすることで問題を処理します。 documentationで読むことができます。
'request.user.is_authenticated'を確認してください。 –
@PauloScardine私はいくつかのデコレータによって「ビュー」機能を制限することについて話しています。 –
ログインしたユーザーをログインURLへのアクセスを制限するのではなくホームページにリダイレクトする理由は何ですか? –