Как показать сообщения об ошибках при регистрации?
Как показать сообщения об ошибках при регистрации? Я пытался сделать сообщение об ошибке при заполнении поля регистрации. Но это не работает. то есть, когда я ввожу неправильные данные, сообщение об ошибке не появляется. в чем может быть проблема? и как ее решить??
forms.py
class UserRegistrationForm(forms.ModelForm):
class Meta:
model = User
fields = ("username", "email", "password", )
def clean_username(self):
username = self.cleaned_data.get('username')
model = self.Meta.model
user = model.objects.filter(username__iexact=username)
if user.exists():
raise forms.ValidationError("A user with that name already exists")
return self.cleaned_data.get('username')
def clean_email(self):
email = self.cleaned_data.get('email')
model = self.Meta.model
user = model.objects.filter(email__iexact=email)
if user.exists():
raise forms.ValidationError("A user with that email already exists")
return self.cleaned_data.get('email')
def clean_password(self):
password = self.cleaned_data.get('password')
confim_password = self.data.get('confirm_password')
if password != confim_password:
raise forms.ValidationError("Passwords do not match")
return self.cleaned_data.get('password')
views.py
def register_user(request):
form = UserRegistrationForm()
if request.method == "POST":
form = UserRegistrationForm(request.POST)
if form.is_valid():
user = form.save(commit=False)
user.set_password(form.cleaned_data.get('password'))
user.save()
messages.success(request, "Registration sucessful")
return redirect('login')
context = {
"form": form
}
return render(request, 'registration.html')
registration.html
<fieldset>
<input name="username" type="text" id="username_id" placeholder="Your username" >
<p class="py-1 text-danger errors">{{form.username.errors}}</p>
</fieldset>
</div>
<div class="col-md-12 col-sm-12">
<fieldset>
<input name="email" type="email" id="email_id" placeholder="Your email" >
<p class="py-1 text-danger errors">{{form.email.errors}}</p>
</fieldset>
</div>
<div class="col-md-12 col-sm-12">
<fieldset>
<input name="password" type="password" id="password_id" placeholder="Your password" >
<p class="py-1 text-danger errors">{{form.password.errors}}</p>
</fieldset>
Как обсуждается в разделе рендеринга полей вручную документации ,
для полей вы также должны вывести {{ field.errors }}, и {{ form.non_field_errors }}, который работает с ошибками, не специфичными для одной формы.
Таким образом, шаблон должен выглядеть следующим образом:
<form action= "" method="post">
{% csrf_token %}
{{ form.non_field_errors }}
{% for field in form %}
<p>
{{ field.errors }}
{{ field.label }}
{{ field }}
</p>
{% endfor %}
<button type="submit" class="btn btn-success">Create User</button>
</form>
В разделе также обсуждается, как перечислить ошибки и применить определенные стили к этим ошибкам.
На это уже отвечал @Willem Van Onsem
поскольку вы используете ValidationError тогда вы можете отобразить это в views:
if request.method == "POST":
form = UserRegistrationForm(request.POST)
if form.is_valid():
user = form.save(commit=False)
user.set_password(form.cleaned_data.get('password'))
user.save()
messages.success(request, "Registration sucessful")
return redirect('login')
else:
messages.error(request, form.errors) # Innovation