注销时发生ValueError,注销未返回HttpResponse对象

问题描述

按下代码底部的注销按钮时出现以下错误-

/ pout处的

ValueError 视图app.views.logout没有返回HttpResponse对象。它返回None。 请求方法 GET
请求网址:http://127.0.0.1:8000/logout

Django版本:3.0.8

异常类型:ValueError 异常值:
视图app.views.logout没有返回HttpResponse对象。而是返回None。

我的代码

def logout(request):
    if request.method=="POST":
        auth.logout(request)
        return redirect('login')

我的html是

<li class="nav-item mr-3">
                <form id="logout" method="POST">
                    {% csrf_token %}
                    <input type ="hidden">
                </form>
                <a class="nav-link" href="{% url 'logout'%}" onclick="javacript:document.getElementById('logout').submit()">
                    logout
                </a>   
            </li>

解决方法

在您的代码中

def logout(request):
    if request.method=="POST":
        auth.logout(request)
        return redirect('login')

不需要显式redirect,因为auth.logout可以在注销后处理重定向。只需在settings.py

中设置LOGOUT_REDIRECT_URL = "my_url"

或者,如果您使用的是Django 2.2.x或更高版本,则在urls.py导入中也可以在urls.py中实现同样的效果

from django.contrib.auth.views import LogoutView

然后在urlpatterns中添加以下路径,

path('logout/',LogoutView.as_view(next_page=settings.LOGOUT_REDIRECT_URL),name='logout'),

然后,您的视图中就不需要任何代码。py