При выполнении запроса GET к localhost: 121 / logout я получаю сообщение "account.views.logout не вернул объект HttpResponse". Это проблема? - PullRequest
0 голосов
/ 29 сентября 2019

Когда я захожу на localhost: 121 / logout, я получаю представление account.views.logout не возвращает объект HttpResponse. Вместо этого он вернул None.

Должен ли я изменить свой код, чтобы справиться с этим, или это не проблема? Мой выход работает нормально. Нужно ли указывать выход из системы в моем urls.py?

views.py

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

urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('register/', views.register, name='register'),
    path('logout', views.logout, name='logout'),
    path('', views.login, name='login'),
]

profile.html

<ul>
<li>
<a class="dropdown-item" href="javascript:{document.getElementById('logout').submit()}">Logout</a>
 </li>
 <form id="logout" action="{% url 'logout' %}" method="POST">
 {% csrf_token %}
 <input type="hidden">
</form>
</ul>

Ответы [ 2 ]

3 голосов
/ 29 сентября 2019

GET и POST запросы могут быть перенаправлены на страницу входа. Метод выхода из системы также подходит для пользователей, вышедших из системы.

def logout(request):
    auth.logout(request)
    return redirect('login')
1 голос
/ 30 сентября 2019

Это действительно зависит от того, что вы хотите, чтобы ваше приложение делало. Что вы хотите случиться, когда перейдете на /logout? Если вы хотите предоставить своим пользователям выход из системы, просто перейдя туда, вы можете просто обрабатывать запросы GET и POST вместе. (По предложению @Beste), например:

def logout(request):
    auth.logout(request)
    return redirect('login')

Это дает дополнительное преимущество, заключающееся в том, что вы можете выйти из любого места на сайте, просто используя гиперссылку на этот URL.

Если вы неЧтобы этого не произошло, я бы предложил увеличить 405 (метод не разрешен), например:

from django.http import HttpResponse

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

И да, что бы вы ни делали, вам нужно будет где-то перечислить его в своем urls.py. Или вы можете даже использовать HttpResponseNotAllowed (см. здесь )

...