Django 注销() returns none

Django logout() returns none

大家早上好

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

views.py

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

我从这个 url 调用它:

urls.py

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

Buttttttt 它不起作用,当我进行跟踪时,我发现该功能:

 def logout_view(request):

正在返回"none"并且没有进入执行里面的代码...

请帮帮我!

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

def get(self, request):

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

def post(self, request):

这是基于 class 的视图在 Django 中工作的标准方式。另外,您可能想看看 documentation for class-based views, as this may give you a better idea of their workings and what they can provide to you. (Hint: There is a built-in RedirectView)

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 视图,那么我会坚持使用基于函数的视图。此处无需使用基于 class 的视图。 logging a user out 上的文档有一个示例。

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

然后将 url 模式更改为

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

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

解决了,我只是删除了 class logout(View) 并从 url 调用 def 而没有 "as_view" 并且它有效。感谢大家!