当对 localhost:121/logout 执行 GET 请求时,我得到 "accounts.views.logout didn't return an HttpResponse object"。这是一个问题吗?
When doing GET request to localhost:121/logout I get "accounts.views.logout didn't return an HttpResponse object". Is this an issue?
当我转到 localhost:121/logout 时,我得到 The view accounts.views.logout didn't return an HttpResponse object。它 return 改为 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>
GET 和 POST 请求可以重定向到登录页面。注销方式也适用于注销的用户。
def logout(request):
auth.logout(request)
return redirect('login')
这实际上取决于您希望应用程序执行的操作。当您导航到 /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)
当我转到 localhost:121/logout 时,我得到 The view accounts.views.logout didn't return an HttpResponse object。它 return 改为 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>
GET 和 POST 请求可以重定向到登录页面。注销方式也适用于注销的用户。
def logout(request):
auth.logout(request)
return redirect('login')
这实际上取决于您希望应用程序执行的操作。当您导航到 /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)