Представление users.views.view не возвращало объект HttpResponse. Вместо этого оно вернуло None
Я создаю веб-список дел вместе со своим другом. Итак, я создал функцию регистрации с аутентификацией по электронной почте, и она работает отлично. Я выложил ее на GitHub, а мой друг взял ее и попробовал на своем ноутбуке.
Но когда он нажимает "зарегистрироваться", он получает эту ошибку The view users.views.view didn't return an HttpResponse object. It returned None instead.
У нас буквально один и тот же код, поскольку он взял код из моего репозитория, мы оба используем виртуальную среду, устанавливая из одного и того же requirements.txt, и мы оба используем WSL2.
Вот код
views.py
class UserRegister(CreateView):
form_class = UserRegisterForm
template_name = 'users/form_register.html'
redirect_authenticated_user = True
success_url = reverse_lazy('tasks')
# Forbid logged in user to enter register page
def get(self, *args, **kwargs):
if self.request.user.is_authenticated:
return redirect('tasks')
return super(UserRegister, self).get(*args, **kwargs)
# Send email verification
def post(self, request, *args, **kwargs):
form = UserRegisterForm(request.POST)
if form.is_valid():
user = form.save(commit=False)
user.is_active = False
user.save()
current_site = get_current_site(request)
subject = 'Activate your account'
message = render_to_string('users/account_activation_email.html', {
'user': user,
'domain': current_site.domain,
'uid': urlsafe_base64_encode(force_bytes(user.pk)),
'token': account_activation_token.make_token(user),
})
user.email_user(subject, message)
return redirect('login')
else:
form = UserRegisterForm()
form_register.html
-- Register -->
<section>
<div class="register-card">
<h2>Register for an account</h2>
<form method="POST">
{% csrf_token %}
<div class="txt_field">
<input type="text" name="username" required placeholder="Username">
<input type="email" name="email" required placeholder="Email">
<input type="password" name="password1" required placeholder="Password">
<input type="password" name="password2" required placeholder="Confirm password">
</div>
<div class="register-button"><input type="submit" value="Register"></div>
Вам нужно всегда возвращать некоторое HttpResponse
. Если форма не действительна, то вы ничего не получите в ответ. Метод self.form_invalid
возвращает такой ответ с ошибками, поэтому вы должны использовать его.
def post(self, request, *args, **kwargs):
form = UserRegisterForm(request.POST)
if form.is_valid():
...
return redirect('login')
else:
return self.form_invalid(form)