Проблемы с Django при попытке показать сообщение об ошибке, когда форма недействительна
Описание
В моем приложении есть форма регистрации пользователя, но, при симуляции несоблюдения рекомендаций по валидации формы, я получаю ошибку httpresponse. Но, что я пытаюсь сделать, это вывести сообщение об ошибке, используя фреймворк сообщений из django Страница ошибки
Code
Мой шаблон
{% block body %}
{% if messages %}
{% for message in messages %}
<div class="text-center alert alert-{{ message.tags }}">
{{ message|safe }}
</div>
{% endfor %}
{% endif %}
{% load crispy_forms_tags %}
<form class = "" method="post" action="{% url 'registro' %}">
{% csrf_token %}
{{registro_form|crispy}}
<button class = "btn btn-primary" type="submit">Registrar</button>
</form>
{% endblock body %}
Моя форма
class NovoUsuarioForm(UserCreationForm):
class Meta:
model = User
fields = ['first_name', 'last_name', 'email']
def save(self, commit = True):
user = super(NovoUsuarioForm, self).save(commit=False)
user.username = self.cleaned_data['first_name']
user.email = self.cleaned_data['email']
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
if commit:
user.save()
return user
Мое мнение
class RegistroView(generic.View):
def get(self,request, *args, **kwargs):
return render(request, 'main/registro.html', {'registro_form': NovoUsuarioForm()})
def post(self,request, *args, **kwargs):
form = NovoUsuarioForm(request.POST)
if form.is_valid():
user = form.save()
login(request,user)
messages.success(request, "Registration successful." )
return HttpResponseRedirect(reverse('pesquisa'))
messages.error(request, "Unsuccessful registration. Invalid information.")
Другая информация
Когда я возвращаюсь на страницу формы со страницы ошибки после метода post, я получаю сообщение об ошибке
Страница после возврата от ошибки
Ваше представление не возвращает ответ HTTP, если форма НЕ действительна; у представления нет return
для этого случая, поэтому оно возвращает None
.
Вот обзор для вашего кода:
class RegistroView(generic.View):
...
def post(self,request, *args, **kwargs):
...
if form.is_valid():
...
return HttpResponseRedirect(reverse('pesquisa'))
...
Я предлагаю добавить что-то вроде return HttpResponse(...)
для случая, когда форма не действительна. Точное значение, которое вы вернете, зависит от вашего случая использования.