[当我进入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>
这实际上取决于您希望应用程序执行的操作。导航到/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
(请参阅here)
GET和POST请求可以重定向到登录页面。注销方法也适用于注销用户。
def logout(request):
auth.logout(request)
return redirect('login')