【发布时间】:2021-04-22 02:24:32
【问题描述】:
我知道这个问题以前曾被问过,但我正在努力解释为什么我会收到以下错误:
ValueError: The view django.contrib.auth.logout didn't return an HttpResponse object. It returned None instead.
在注销时,我完全按照 Django 在他们的文档中的内容:
https://docs.djangoproject.com/en/3.2/topics/auth/default/#how-to-log-a-user-out
from django.views.generic.base import TemplateView
from django.contrib.auth.models import User
from django.contrib.auth import login, logout
from django.urls import reverse
from django.contrib import messages
from .forms import RegisterUserForm, LoginUserForm
from .codes import HttpResponseSeeOther
class RegisterPage(TemplateView):
template_name = "users/register_user.html"
def get_context_data(self, *args, **kwargs):
context = super().get_context_data(*args, **kwargs)
context['register_form'] = RegisterUserForm(self.request.POST or None)
return context
def get(self, request):
context = self.get_context_data()
return self.render_to_response(context)
def post(self, request):
context = self.get_context_data()
if context['register_form'].is_valid():
context['register_form'].save()
messages.success(request, "You're registered! Please login!")
return HttpResponseSeeOther(reverse("users:login"))
return self.render_to_response(context)
class LoginPage(TemplateView):
template_name = "users/login_page.html"
def get_context_data(self, *args, **kwargs):
context = super().get_context_data(*args, **kwargs)
context['login_form'] = LoginUserForm(data=self.request.POST or None)
return context
def get(self, request):
context = self.get_context_data()
return self.render_to_response(context)
def post(self, request):
context = self.get_context_data()
form = context['login_form']
if form.is_valid():
user = form.get_user()
login(request, user)
return HttpResponseSeeOther(reverse("questions:mainpage"))
return self.render_to_response(context)
def logout_user(request):
logout(reqeust)
return HttpResponseSeeOther(reverse("users:login"))
from users import views as uv
user_urls = ([
path("register/", uv.RegisterPage.as_view(), name="register"),
path("login/", uv.LoginPage.as_view(), name="login"),
path("logout/", uv.logout, name="logout")
], 'users')
urlpatterns = [
path('admin/', admin.site.urls),
path("", include(question_urls)),
path("users/", include(user_urls)),
]
[21/Apr/2021 19:35:18] "GET / HTTP/1.1" 302 0
[21/Apr/2021 19:35:18] "GET /users/login/?next=/ HTTP/1.1" 200 1319
[21/Apr/2021 19:35:25] "POST /users/login/ HTTP/1.1" 303 0
[21/Apr/2021 19:35:25] "GET / HTTP/1.1" 200 1745
Internal Server Error: /users/logout/
Traceback (most recent call last):
File "C:\Users\...\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\Users\...\django\core\handlers\base.py", line 126, in _get_response
"returned None instead." % (callback.__module__, view_name)
ValueError: The view django.contrib.auth.logout didn't return an HttpResponse object. It returned None instead.
[21/Apr/2021 19:35:27] "GET /users/logout/ HTTP/1.1" 500 74852
【问题讨论】:
-
请添加完整的错误回溯
-
@JPG ... 添加了回溯
-
这里的
uv是什么?你能添加完整的导入语句吗? -
uv是主 urls 模块中包含的users应用程序中视图的导入别名。from users import views as uv -
不确定它是否在您的实际代码中,但这里有一个错字:
logout(reqeust)。e和u被翻转。