I realize that this question has been asked before, but I'm struggling for explanation as to why I'm getting the following error:
ValueError: The view django.contrib.auth.logout didn't return an HttpResponse object. It returned None instead.
I'm following exactly what Django has in their docs here when it comes to logging out:
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
uv
here? Can you add the complete import statement ? – JPGuv
is an import alias for the views in theusers
app that is contained in the main urls module.from users import views as uv
– binnylogout(reqeust)
. Thee
andu
are flipped. – elyas