Действие с 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'),]
Для корректной обработки входа пользователя в систему и вывода сообщения об ошибке, если пользователь не существует.
Обновите HTML-форму: Убедитесь, что форма всегда отправляет данные в представление входа и может показывать сообщения об ошибках, когда это необходимо.
Обновите файл
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>