2017-02-14 2 views
1

Я строю сайт Django, но мой выход не работает. Сайт состоит из двух приложений: Главная приложение, которое является общедоступным, и студент приложение, которое является частным. В моем ученике приложение я положил @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

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

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

Я теряюсь в этом проблема, спасибо заранее.

ответ

2

Ваш video_detail Образец URL-адреса соответствует /logout/. Django останавливается, как только он находит совпадение, поэтому запросы для /logout/ будут обрабатываться в представлении std_video_detail_view вместо представления user_logout.

Вы можете исправить это, изменив регулярное выражение для URL-адреса video_detail, чтобы он не столкнулся (например, вы могли бы использовать ^videos/(?P<video_key>[a-zA-Z0-9\_\.]+)/$) или перемещая шаблон URL-адреса выхода из системы выше шаблона детализации видео.

+0

извините, я забыл * возврат * только в вопросе. Но я поставил $ в URL-адрес выхода и не работал. – Toshi

+0

Если проблема вызвана отсутствием '' ', то это будет один из шаблонов URL над шаблоном URL выхода. Я использовал 'user_logout' в качестве примера, потому что вы не указали остальные URL-адреса. – Alasdair

+0

Я редактировал вопрос с другими адресами, извините за неприятности. – Toshi

Смежные вопросы