2016-12-05 7 views
1

テンプレートからサインアウトURLを呼び出して、ホームページにリダイレクトしようとしました。Djangoでサインアウトが動作しない

profile.html:

<li><a data-hover="Logout" href="{% url 'signout' %}">Logout</a></li> 

urls.py:

urlpatterns = [ 
    url(r'^$', views.login, name='login'), 
    url(r'^ajax/validate_username/$', views.validate_username, name='validate_username'), 
    url(r'^signout$', views.signout, name='signout'), 
] 

views.py:ログアウトメニューをクリックしながら、

def signout(request): 
    if request.user.is_authenticated(): 
     logout(request) 
     return HttpResponsePermanentRedirect('/') 
    else: 
     return HttpResponsePermanentRedirect('/') 

時にはサインアウト機能が(、動作していません関数のサインアウトが呼び出されます)。

+0

「働かない」という意味ですか?ビュー内のブレークポイントはヒットしますか?あなたはログアウトしていますか?何かエラーが出ますか? – Sayse

+0

ログアウトされず、エラーもありません。同じページが読み込まれ、ログアウトメニューをクリックします。メニューをクリックすると、機能(サインアウト)が呼び出され、自宅にリダイレクトされますが、この機能は呼び出していません。 – Ayan

答えて

6

おそらくHttpResponsePermanentRedirectの代わりにHttpResponseRedirectを使用する必要があります。永久リダイレクションでは、常にsignoutを実行する場合に必要のないキャッシュを使用する可能性があるためです。

また、あなたは、このようにサインアウトを行うことができます。

from django.contrib.auth import views as auth_views 

urlpatterns = [ 
    ... 
    url(r'^signout/$', auth_views.logout, {'next_page': 'home'}, name='signout'), 
    ... 
] 
+0

ありがとうございます。URL 'localhost:8000'を使って作業しています。しかし、私がURL「127.0.0.1:8000」を使用した場合、サインアウトは同じワーキングページにリダイレクトするのではなく機能しています。理由を知ることができますか? – Ayan

+0

127.0.0.1とlocalhostの違いは決して満たされませんでした。おそらくあなたはキャッシュにいくつかのURLを保存しているでしょう。キャッシュをクリーニングし、要求を繰り返します。 – Fomalhaut

0

あなたは、次のコードを使用することができ、それは動作します。

URL(R '^サインアウト/ $'、 'django.contrib.auth.views.logout'、 { 'にnext_page': '/ログイン/'}、名前= 'サインアウト')何

関連する問題