Как создать / внедрить сообщения в django для случаев, когда входные данные регистрации пользователя недействительны? - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть форма в 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>
...