Django logout()返回无

时间:2015-12-16 16:07:22

标签: python django logout

早上大家

我正在使用django logout()来结束我的会话,就像django docs所说:

views.py

class Logout(View):
    def logout_view(request):
        logout(request) 
        return HttpResponseRedirect(reverse('cost_control_app:login'))

我从这个网址调用它:

urls.py

url(r'^logout/$', views.Logout.as_view(), name = "logout"),

Buttttttt它没有用,当我做一个跟踪时我发现了这个功能:

 def logout_view(request):

它回归"没有"并且它没有进入以执行内部代码...

请帮助我!

3 个答案:

答案 0 :(得分:2)

我很好奇,为什么你有这个名为logout_view()的方法?默认情况下,没有任何东西可以调用该方法。您需要更改名称以匹配将用于调用页面的HTTP谓词。例如,如果它将是GET请求,您可以将其更改为:

def get(self, request):

如果您希望它是POST请求,您可以将其更改为:

def post(self, request):

这是基于类的视图在Django中工作的标准方式。此外,您可能需要查看documentation for class-based views,因为这可以让您更好地了解他们的工作方式以及他们可以为您提供的服务。 (提示:有一个内置的RedirectView

答案 1 :(得分:1)

Django有一个内置的logout视图。我会用它而不是写你自己的。

from django.contrib.auth import views as auth_views
from django.core.urlresolvers import reverse_lazy

url(r'^logout/$', 
    auth_views.logout, 
    {'next_page': reverse_lazy('cost_control_app:login')},
    name='logout',
)

如果你想编写自己的logout视图,那么我会坚持使用基于函数的视图。这里不需要使用基于类的视图。 logging a user out上的文档有一个例子。

def logout_view(request):
    logout(request)
    # Redirect to a success page.

然后将网址格式更改为

url(r'^logout/$', logout_view, name="logout"),

如果您真的想要编写基于类的视图,那么您需要修复Logout视图。有关详细信息,请参阅Joey的答案。

答案 2 :(得分:0)

解决了它,我刚刚删除了类logout(View)并在没有“as_view”的情况下从url调用def并且它可以工作。谢谢大家!