Ошибка значения при выходе из системы, выход из системы не вернул объект HttpResponse

#django #django-forms #django-views #logout

#django #django-forms #django-просмотры #Выход

Вопрос:

Получил следующую ошибку при нажатии кнопки выхода из системы с кодом внизу-

Ошибка значения при выходе из системы view app.views.logout не вернул объект HttpResponse. Вместо этого он вернул None. Метод запроса: GET
URL запроса:http://127.0.0.1:8000/logout

Версия Django: 3.0.8

Тип исключения: ошибка значения Значение исключения:
Просмотр 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>
  

Комментарии:

1. очевидно, что у вас есть <a> тег с href внутри формы, который запускается вместо формы

2. Какую версию Django вы используете?

Ответ №1:

В вашем коде

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

Нет необходимости в явном, redirect поскольку auth.logout может обрабатывать перенаправление после выхода из системы. Просто установите LOGOUT_REDIRECT_URL = "my_url" в settings.py

В качестве альтернативы, то же самое можно достичь и в urls.py , если вы используете Django 2.2.x или выше, в urls.py импорте

 from django.contrib.auth.views import LogoutView
  

затем добавьте следующий путь в urlpatterns,

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

Тогда вам не нужен никакой код в вашем views.py