Получение значения из формы Flask
разбираюсь во Flask на примере простой страницы получения имени пользователя и пароля. При этом код не работает и не возвращает значение.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Вход</title>
<style>
h2 {
background-color: gray;
color: black;
padding: 10px;
margin-top: 0px;
}
div {
margit-top: 50%
}
</style>
</head>
<body>
<h2>Автосервис</h2>
{% if message %}
<p>{{message}}</p>
{% endif %}
<form action="" method="post">
<label for="username">Username</label>
<input type = "text" name = "username">
<br>
<label for="password">Password</label>
<input type = "password" name = "password">
<br>
<input type="submit" value="Вход"
</form>
</body>
</html>
Код Python:
@app.route('/login', methods = ['post', 'get'])
def login():
message = ''
if request.method == 'post':
username = request.form.get('username')
password = request.form.get('password')
if username == 'root' and password == 'root':
message = 'correct'
else:
message = 'incorrent'
return render_template('login.html', message = message)
Ответы (1 шт):
Советую приучать себя к хорошему и изучить FlaskForm | Статья на habr (Настоятельно советую прочитать)
FlaskForm создают формы как объекты для дальнейшей передачи html файлу и обработки на стороне сервера.
Советую вам подробно ознакомиться с документацией и, при необходимости, посмотреть на пример из моего недавнего проекта.
Вот пример формы из моего проекта
from flask_wtf import FlaskForm
from wtforms import PasswordField, StringField, SubmitField, TextAreaField, BooleanField, IntegerField
from wtforms.validators import DataRequired, EqualTo, Email, Length
class RegistrationForm(FlaskForm):
name = StringField("Your name", validators=[DataRequired()])
email = StringField("E-mail", validators=[DataRequired(), Email('Incorrect email')])
password = PasswordField("Password", validators=[DataRequired()])
confirm_password = PasswordField("Confirm password", validators=[
DataRequired(), EqualTo("password", message="Passwords must match")])
description = TextAreaField("Short description (you can fill it later)")
submit = SubmitField("Let's go!")
Далее нужно передать эту форму html странице:
form = RegistrationForm()
return render_template("registration.html", form=form)
В html (как пример):
<form method="post" class="main-registration-form">
{{ form.hidden_tag() }}
<div class="form-group main-form-group">
{{ form.name(id="name", class='main-registration-input', placeholder='Login') }}
</div>
<div class="form-group main-form-group">
{{ form.email(id="email", class='main-registration-input', placeholder="Email") }}
{% for error in form.email.errors %}
<span class="main-registration-error">{{ error }}</span>
{% endfor %}
</div>
<div class="form-group main-form-group">
{{ form.password(id="password", class='main-registration-input', placeholder="Password") }}
</div>
<div class="form-group main-form-group">
{{ form.confirm_password(id="confirm_password", class='main-registration-input', placeholder="Confirm password") }}
{% for error in form.confirm_password.errors %}
<span class="main-registration-error">{{ error }}</span>
{% endfor %}
</div>
<div class="form-group main-form-group">
{{ form.description(type="textarea", id="description", class='py-2 main-registration-input main-registration-description', placeholder="Description") }}
</div>
{{ form.submit(class='main-registration-button') }}
</form>
После этого на стороне сервера получим эту форму всё в той же функции рендера страницы
form = RegistrationForm() Мы уже написали (см. выше)
Теперь добавим обработку данных из формы следующим образом:
if form.validate_on_submit():
// code
Как вы могли догадаться из функции, она проверяет валидность формы.
В конце if вы, при необходимости, можете написать новый render_template или redirect