【问题标题】:Logout not working Django 1.9注销不工作Django 1.9
【发布时间】:2017-07-02 23:48:45
【问题描述】:

我正在构建一个 Django 网站,但我的注销不起作用。该网站由两个应用程序组成,main 应用程序是公共的,student 应用程序是私有的。在我的 student 应用程序中,除了注销方法之外,我已将 @login_required 装饰器放在每个方法中。但是当我点击 student 应用程序中的 logout 链接时,我的页面不会重定向到 main 应用程序,它会转到另一个视图student 应用程序,当我重新加载页面时,尽管我已经放置了 @login_required 装饰器,但内容仍然可用。这是我的代码:

网站/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/'

ma​​in_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/templates/student_area.html

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

我迷失在这个问题上,提前谢谢你。

【问题讨论】:

    标签: python django python-3.x


    【解决方案1】:

    您的video_detail URL 模式与/logout/ 匹配。 Django 在找到匹配项后立即停止,因此对/logout/ 的请求将由std_video_detail_view 视图而不是user_logout 视图处理。

    您可以通过更改video_detail URL 的正则表达式使其不会发生冲突(例如,您可以使用^videos/(?P&lt;video_key&gt;[a-zA-Z0-9\_\.]+)/$)或将注销URL 模式移到视频详细信息模式上方来解决此问题。

    【讨论】:

    • 对不起,我只在问题中忘记了 return。但是我已经把 $ 放在注销 url 中并且没有工作。
    • 如果问题是由缺少 $ 引起的,那么它将是注销 URL 模式上方的 URL 模式之一。我以user_logout 为例,因为您没有显示其余的网址。
    • 我用其他网址编辑了问题,很抱歉给您带来麻烦。
    • 好的,既然您已经添加了 URL 模式,我可以看到问题 - 请参阅更新后的答案。
    猜你喜欢
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    • 2017-04-19
    • 1970-01-01
    • 2013-02-11
    • 2017-07-31
    • 2014-05-24
    相关资源
    最近更新 更多