У меня есть форма в django, которая наследуется от UserCreationForm (единственное добавление - это то, что она также запрашивает электронную почту по умолчанию). Я вручную ввел ввод html в шаблон, вместо того, чтобы просто использовать {{form}}, поэтому у меня есть больше настроек, как он выглядит. Форма работает нормально, и я могу создавать пользователей с ней, проблема в том, что я не могу заставить сообщения работать, когда ввод данных пользователя не соответствует требуемым критериям (например, пароли не совпадают, имя пользователя уже существует, et c.). Поскольку я не использую {{form}}, эти сообщения не приходят автоматически. Можно ли как-то легко ввести сообщения по умолчанию из формы django? Или, если нет, как я могу создавать свои собственные сообщения. Я пробовал несколько вещей, подобных тому, что у меня ниже:
РЕДАКТИРОВАТЬ: Может быть, я должен упомянуть, что мои сообщения приходят и отображаются в HTML, но условия, которые я пытаюсь использовать, не работают как положено.
Моя django форма:
class CreateUserForm(UserCreationForm):
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2']
Мой взгляд:
def registerPage(request):
form = CreateUserForm()
if request.method == 'POST':
form = CreateUserForm(request.POST)
if form.is_valid():
form.save()
username = form.cleaned_data.get('username')
messages.success(request, 'User ' + username + ' was created.')
return redirect('home-page')
else:
################ the below is examples of what I've tried, but don't work ##############
if form.fields['password1'] != form.fields['password2']: #this always returns false as obviously these elements are not providing the actual value entered for passwords.
messages.info(request, "Your passwords did not match.")
if User.objects.filter(username=form.fields['username']).exists():
messages.info(request, "That username already exists.")
content = {'form': form}
return render(request, 'register.html', content)
моя HTML
<form action="" method="post">
{% csrf_token %}
<div class="flex-column">
<div class="flex-row">
<span class="register-info">Username:</span>
<input type="text" name="username" id="login">
</div>
<div class="flex-row">
<span class="register-info">Email:</span>
<input type="email" name="email" id="email">
</div>
<div class="flex-row">
<span class="register-info">Password:</span>
<input type="password" name="password1" id="password1">
</div>
<div class="flex-row">
<span class="register-info">Confirm:</span>
<input type="password" name="password2" id="password2">
</div>
<input type="submit" value="Register" class="register-but">
</div>
<div class="flex-column">
<div class="error-register">
{% if messages %}
{% for message in messages %}
{{ message }}
{% endfor %}
{% endif %}
</div>
<h3>
Username must be 150 characters or fewer. Letters, digits and @/./+/-/_ only.
</h3>
<h3>
Your password can’t be too similar to your other personal information.
</h3>
<h3>
Your password can’t be a commonly used password.
</h3>
<h3>
Your password must contain at least 8 characters.
</h3>
<h3>
Your password can’t be entirely numeric.
</h3>
</div>
</form>