Действие с HTML-формой - Проверка страницы входа в Django

У меня есть страница входа в систему, которая принимает Имя пользователя, Идентификатор электронной почты и Пароль. Я проверяю, совпадают ли эти значения с данными базы данных в файле views.py. Если эти три значения верны, значит, пользователь уже существует и хочет посмотреть главную страницу. Если введенные значения не совпадают, значит, пользователь не существует, и нужно показать сообщение об ошибке «Пользователь не существует, пожалуйста, зарегистрируйтесь», на той же html-странице.

Я выполнил часть проверки в файле views.py. Но когда я нажимаю на кнопку Submit на странице Login, даже если пользователь не существует, он переходит на Homepage.

Login.html

<body>
<div class = "tablediv">
    <div><h1>LOGIN FORM</h1></div>
    {% if message != "verification successfull!" %}
        <p class = "error">{{ message }}</p>
        <form action="" method="POST">
    {% else %}
        <form action="{% url 'addtodb' %}" method="POST">
    {% endif %}
        {% csrf_token %}
        <div>
            <label for = "name"><b>Username</b></label><br>
            <input type = "text" id = "name" placeholder = "Enter username here" name = "username" required> 
        </div><br>
        <div>
            <label for = "mail"><b>Email ID</b></label><br>
            <input type = "email" id ="mail" placeholder=" Enter mail id here" name = "email">
        </div>
        <br>
        <div>
            <label for = "pass" maxlength = "10" ><b>Password</b></label><br>
            <input type = "password" id = "pass" name = "password" required>
        </div>
        <br>
        <div>   
            <input type = "checkbox" id = "remember" checked>
            <label for="remember">Remember me</label>
        </div>
        <br>
        <input type = "submit" value = "LOGIN">
    </form>
</div>
<div class="container" >
    <!-- <button type="button" class="cancelbtn">Cancel</button>s -->
    <span class="psw">Forgot <a href="#">password?</a></span>
</div>

Views.py

def Login(request):
username = ''
passwd = ''
email = ''
signupform = SignUPform(request.POST)
print(request.method)
dbprint = list(SignUPdb.objects.all().values())
print(dbprint)
for i in dbprint:
    i.pop('id')
print(dbprint)
message = ""
if request.method == "POST" and signupform.is_valid():
    print("inside POST")
    username = signupform.cleaned_data['username']
    email = signupform.cleaned_data['email']
    passwd = signupform.cleaned_data['password']
    newdict = {
        'username' : username,
        'email' : email,
        'password' : passwd
    }
    print(newdict)
    if newdict in dbprint:
        message = "verification successfull!"
        print(message)
    else:
        message = "user not found. please signup to proceed."
        print(message)
return render(request, "login.html", {'message' : message })

Urls.py

urlpatterns = [
path('addtodb/', FormPage, name = 'addtodb'),
path('login/', Login, name = 'login'),]

Для корректной обработки входа пользователя в систему и вывода сообщения об ошибке, если пользователь не существует.

  1. Обновите HTML-форму: Убедитесь, что форма всегда отправляет данные в представление входа и может показывать сообщения об ошибках, когда это необходимо.

  2. Обновите файл views.py:Настройте представление входа в систему для проверки данных пользователя, используя ORM Django для точной валидации.

Вы должны передавать навигатор в функцию, а не в html. Вот код для View.py

def Login(request):
username = ''
passwd = ''
email = ''
signupform = SignUPform(request.POST)
print(request.method)
dbprint = list(SignUPdb.objects.all().values())
print(dbprint)
for i in dbprint:
    i.pop('id')
print(dbprint)
message = ""
if request.method == "POST" and signupform.is_valid():
    print("inside POST")
    username = signupform.cleaned_data['username']
    email = signupform.cleaned_data['email']
    passwd = signupform.cleaned_data['password']
    newdict = {
        'username' : username,
        'email' : email,
        'password' : passwd
    }
    print(newdict)
    if newdict in dbprint:
        message = "verification successfull!"
        print(message)
        return redirect('helloworld') // add this logic
    else:
        message = "user not found. please signup to proceed."
        print(message)
    return render(request, "login.html", {'message' : message })

def Home(request):
return HttpResponse("Hello World <3 !!")

А также вам следует улучшить ваш html-код. html-код выглядит следующим образом:

<body>
<div class = "tablediv">
    <div><h1>LOGIN FORM</h1></div>
{% if message %}
    <p class="error">{{ message }}</p>
{% endif %} 
    <form action="{% url 'helloworld' %}" method="POST">
        {% csrf_token %}
        <div>
            <label for = "name"><b>Username</b></label><br>
            <input type = "text" id = "name" placeholder = "Enter username here" name = "username" required> 
        </div><br>
        <div>
            <label for = "mail"><b>Email ID</b></label><br>
            <input type = "email" id ="mail" placeholder=" Enter mail id here" name = "email">
        </div>
        <br>
        <div>
            <label for = "pass" maxlength = "10" ><b>Password</b></label><br>
            <input type = "password" id = "pass" name = "password" required>
        </div>
        <br>
        <div>   
            <input type = "checkbox" id = "remember" checked>
            <label for="remember">Remember me</label>
        </div>
        <br>
        <input type = "submit" value = "LOGIN">
    </form>
</div>
<div class="container" >
    <!-- <button type="button" class="cancelbtn">Cancel</button>s -->
    <span class="psw">Forgot <a href="#">password?</a></span>
</div> 
Вернуться на верх