#django #django-allauth
#django #django-allauth
Вопрос:
Я использую модуль django allauth для создания пользователя. В views, py я создаю подкласс CreateView, но я не могу заставить form_valid работать. Кажется, он не вызывается (я не импортировал HttpResponseRedirect, но он не жалуется
class SignupPageView(generic.CreateView):
form_class = CustomUserCreationForm
success_url = reverse_lazy('login')
template_name = 'registration/signup.html'
def form_valid(self, form):
print('form_valid')
return HttpResponseRedirect(self.get_success_url())
def form_invalid(self, form):
print('form_invalid')
return HttpResponseRedirect(self.get_success_url())
Что я делаю не так?
Редактировать
Я также добавил form_invalid, и он по-прежнему не работает. Это наводит меня на мысль, что что-то фундаментальное не так.
Процесс регистрации пользователя, похоже, работает правильно, и об ошибках не сообщается
HTML, связанный с формой
{% extends '_base.html' %}
{% load crispy_forms_tags %}
{% block title %}Sign Up{% endblock title %}
{% block content %}
<h2>Sign Up</h2>
<form method="post">
{% csrf_token %}
{{ form | crispy }}
<button type="submit">Sign Up</button>
</form>
{% endblock content %}
urls.py
urlpatterns = [
path('signup/', SignupPageView.as_view(), name='signup'),
]
Комментарии:
1. Допустима ли форма?
2. Поместите оператор печати внутри
form_invalid()
и повторите попытку. Вероятно, ваша форма недействительна, и, следовательно, выполнение не достигаетform_valid()
метода.3. Проблема может быть в ваших шаблонах URL или шаблоне.
Ответ №1:
CreateView наследует методы FormMixin, которые имеют оба form_valid
и form_invalid
. Так что в вашем объявлении CBV нет ничего плохого.
Поэтому я думаю, что ваша форма просто недействительна. Не могли бы вы попробовать добавить form_invalid
метод и посмотреть, будет ли он вызван?
Комментарии:
1. form_invalid также не вызывается
2. Не могли бы вы обновить свой вопрос, чтобы показать шаблон URL, используемый для вызова этого представления?
3. Я добавил html и urls.py
4. Что вы видите при входе
/signup
на страницу?5. форма с 4 полями: адрес электронной почты, имя пользователя, пароль1, пароль2. Форма работает должным образом: правильные проверки, пользователь создан и отправлено электронное письмо