Проверка POST HTML FORM не работает с Django

В настоящее время я изучаю Django, я связал мою register FORM с моим views.py, и написал немного кода бэкенда, проблема в том, что он успешно связывается с моим .html файлом, и POST элементы регистрируются, но когда я пытаюсь сделать проверку, (if POST_element < 10), он ничего не делает.

Вот часть моей регистрационной формы HTML:

<div class="limiter">
        <div class="container-login100" style="background:black;">
            <div class="wrap-login100">
                <form action="{% url 'register' %}" method="POST" class="login100-form validate-form">
                    {% csrf_token %}
                    <span class="login100-form-logo">
                        <i class="zmdi zmdi-landscape"></i>
                    </span>
                    <span class="login100-form-title p-b-34 p-t-27">
                        Register
                    </span>

                    <div class="wrap-input100 validate-input" data-validate = "Enter username">
                        <input class="input100" type="text" name="username" placeholder="Username">
                        <span class="focus-input100" data-placeholder="&#xf207;"></span>
                    </div>

Вот часть моего views.py, которая управляет регистром:

def register(request):
    if request.method=="POST":
        username = request.POST["username"]
        password = request.POST["pass"]
        password_confirm = request.POST["pass-confirm"]
        email = request.POST["mail"]
    
        if len(username) < 7:
            messages.error(request,"Username must be more than 10 char.") #Don't get any error

        else:
            messages.success(request,"Success")

    return render(request, 'users/register.html')

Вот мой urls.py:

urlpatterns = [
    path('', views.register, name='register'),
    path('login/', views.login, name='login')
]

Спасибо за помощь!

Я нашел лучший способ сделать верификацию, как мне посоветовал @Sunderam Dubey, я буду использовать FORM API для верификации, спасибо за вашу помощь и ответы.

@Sunderam Dubey, вот полный код html формы:

Отрывок из django-doc о POST просьбе.

Вы всегда должны возвращать HttpResponseRedirect после успешной работы с POST данными. Этот совет не относится к Django; это хорошая практика веб-разработки в целом.

.

Вы не вернули никакого ответа в запросе POST, а фреймворк messages состоит ли из сообщений error,success,etc. будет отправлять сообщения на следующую перенаправленную страницу, поэтому вы не можете увидеть сообщение, а ваше условие работает.

проверьте следующий код:

Html код:

<div class="limiter">
    <div class="container-login100" style="background:black;">
        <div class="wrap-login100">
            <form class="login100-form validate-form"  method='POST' action="{% url 'users:register' %}" >
                {% csrf_token %}
                <span class="login100-form-logo">
                    <i class="zmdi zmdi-landscape"></i>
                </span>

                <span class="login100-form-title p-b-34 p-t-27">
                    Register
                </span>

                <div class="wrap-input100 validate-input" data-validate = "Enter username">
                    <input class="input100" type="text" name="username" placeholder="Username" required>
                    <span class="focus-input100" data-placeholder="&#xf207;"></span>
                </div>

                <div class="wrap-input100 validate-input" data-validate="Enter password">
                    <input class="input100" type="password" name="pass" placeholder="Password" required>
                    <span class="focus-input100" data-placeholder="&#xf191;"></span>
                </div>

                <div class="wrap-input100 validate-input" data-validate="Confirm password">
                    <input class="input100" type="password" name="pass-confirm" placeholder="Confirm Password" required>
                    <span class="focus-input100" data-placeholder="&#xf191;"></span>
                </div>

                <div class="wrap-input100 validate-input" data-validate="Enter Email">
                    <input class="input100" type="email" name="mail" placeholder="E-Mail" required>
                    <span class="focus-input100" data-placeholder="&#xf191;"></span>
                </div>

                <div class="container-login100-form-btn">
                    <button class="login100-form-btn">
                        Register
                    </button>
                </div>

                <div class="text-center p-t-90">
                    <a class="txt1" href="login">
                        Already registered?
                    </a>
                </div>

            </form>
        </div>
    </div>
</div>

Установите следующий стиль в верхней части страницы в теге <style>, т.е. inline style:

<style>
    .green{
        color:green;
        font-size:1.3rem;
    }
    .red{
        color:red;
        font-size:1.3rem;
    }
</style>

urls.py

app_name='users'
urlpatterns = [
    path('', views.register, name='register'),
    path('login/', views.login, name='login')
]

Note: Приведение app_name является хорошей практикой, работает как template namespacing при приведении урлов.

views.py

from django.http import HttpResponseRedirect
from django.shortcuts import render
from django.contrib import messages
from django.urls import reverse


def register(request):
    if request.method == "POST":
        username = request.POST["username"]
        password = request.POST["pass"]
        password_confirm = request.POST["pass-confirm"]
        email = request.POST["mail"]

        # Here everying exist.
        print("UserName : ", username)
        print('Email : ', email)
        print('Password : ', password)
        print('Password Confirm : ', password_confirm)

        if len(username) < 7:
            # Here error exist.
            print('Username must be more than 10 char.')
            messages.error(
                request, "Username must be more than 10 char.", 'red')
            return HttpResponseRedirect(reverse('users:register'))

        else:
            messages.success(request, "Success! form submitted.", 'green')
            return HttpResponseRedirect(reverse('users:register'))

    return render(request, 'users/register.html')

Note: Вы также можете сделать пароль hashing через make_password, который является from django.contrib.auth.hashers import make_password.

Вернуться на верх