2017-02-14 18 views
1

私はDjangoのウェブサイトを構築していますが、ログアウトが機能していません。このサイトは公開アプリであるメインアプリとプライベートのアプリの2つのアプリで構成されています。 の学生アプリでは、logoutメソッドを除いて、すべてのメソッドに@ login_requiredデコレータを配置しました。しかし、私は学生アプリでログアウトのリンクをクリックしたときに、私のページはメインアプリにリダイレクトされていない、それは学生アプリ内の別のビューに行き、私はページをリロードすると、コンテンツがあります私は@login_requiredデコレータを置いていますが、まだ利用可能です。ここに私のコードです:ログアウトが機能しませんDjango 1.9

ウェブサイト/ urls.py

from main_app import urls as main_urls 
from student_app import urls as std_urls 

urlpatterns = [ 
url(r'^index/', include(main_urls)), 
url(r'^student-area/', include(std_urls))] 

ウェブサイト/ settings.py

LOGIN_URL = '/index/login/' 
LOGIN_REDIRECT_URL = '/student-area/' 

main_app/urls.py

... 
urlpatterns = [ 
url(r'^$', views.index, name='index'), 
...] 

student_app/urls.py

... 
urlpatterns = [ 
url(r'^$', views.std_videos_view, name='student_area'), 
url(r'^(?P<video_key>[a-zA-Z0-9\_\.]+)/$', views.std_video_detail_view, name='video_detail'), 
url(r'^materials-std/$', views.std_material_view, name='materials_std_view'), 
url(r'^download-material/(?P<material_key>[a-zA-Z0-9\_\.]+)/$', views.std_material_download, name='download_material'), 
url(r'^sims/$', views.std_sim_view, name='sims_view'), 
url(r'^download-sim/(?P<sim_key>[a-zA-Z0-9\_\.]+)/$', views.std_sim_download, name='download_sim'), 
url(r'^contact/$', views.std_contact_view, name='std_contact'), 
url(r'^logout/$', views.user_logout, name='user_logout') 
] 

student_app/views.py私はこの中で失われています

... 
<a href={% url 'user_logout' %} class="btn btn-default">Logout</a> 
... 

from django.contrib.auth import logout 
from django.shortcuts import redirect 
... 
def user_logout(request): 
    logout(request) 
    return redirect('index') 

student_app /テンプレート/ student_area.html問題は、事前にありがとうございます。

答えて

2

video_detailのURLパターンは/logout/と一致します。一致するとすぐにDjangoが停止するため、/logout/のリクエストはuser_logoutビューではなくstd_video_detail_viewビューで処理されます。

video_detail URLの正規表現を変更して(たとえば、^videos/(?P<video_key>[a-zA-Z0-9\_\.]+)/$を使用できる)、クラッシュしないようにするか、ビデオの詳細パターンの上にログアウトURLパターンを移動して修正できます。

+0

申し訳ありませんが、質問でのみ*返品は忘れてしまいました。しかし、私はログアウトURLに$を入れて、うまくいきませんでした。 – Toshi

+0

問題は、 '$'が見つからないことが原因で発生した場合、ログアウトURLパターンの上にあるURLパターンの1つになります。他のURLは表示していないので、例として 'user_logout'を使用しました。 – Alasdair

+0

私は他のURLで質問を編集しました。問題を申し訳ありません。 – Toshi

関連する問題