Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python form.validate_on_submit()始终为false_Python_Flask_Flask Wtforms - Fatal编程技术网

Python form.validate_on_submit()始终为false

Python form.validate_on_submit()始终为false,python,flask,flask-wtforms,Python,Flask,Flask Wtforms,我用的是烧瓶 这是我的登录表 from flask_wtf import FlaskForm from wtforms import StringField, PasswordField, BooleanField, SubmitField from wtforms.validators import DataRequired, Length class LoginForm(FlaskForm): username = StringField('Username', validato

我用的是烧瓶

这是我的登录表

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, BooleanField, SubmitField
from wtforms.validators import DataRequired, Length


class LoginForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired()])
    password = PasswordField('Password', validators=[DataRequired(), Length(8, 128)])
    remember = BooleanField('Remember me')
    submit = SubmitField('Log in')
这是我的login.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>login</title>
</head>
<body>
<form method="POST" action="">
    {{ form.csrf_token }}
    {{ form.username.label }}<br>{{ form.username }}<br>
    {{ form.password.label }}<br>{{ form.password }}<br>
    {{ form.remember }}{{ form.remember.label }}<br>
    {{ form.submit }}<br>
</form>
</body>
</html>
我的问题是用户名无法打印。似乎没有提交loginform,form.validate\u on\u submit()为false。

form.validate\u on\u submit()为false,因为您尚未将request.form对象添加到loginform()中


对于
password
字段,您已将验证器设置为检查长度是否在8到128之间。如果用户提供的密码长度较小或较大,则验证将失败。我认为这就是为什么
form.validate\u on\u submit()
总是错误的原因

我已经在模板中显示了错误消息并得到了错误

login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>login</title>
    <style>
        .validation_error{
        color: red;
    }
    </style>
</head>
<body>
<form method="POST" action="">
    {{ form.csrf_token }}
    {{ form.username.label }}<br>{{ form.username }}<span class="validation_error">{{ ', '.join(form.username.errors) }}</span><br>
    {{ form.password.label }}<br>{{ form.password }}<span class="validation_error">{{ ', '.join(form.password.errors) }}</span><br>
    {{ form.remember }}{{ form.remember.label }}<span class="validation_error">{{ ', '.join(form.remember.errors) }}</span><br>
    {{ form.submit }}<br>
</form>
</body>
</html>
输出:

有效输入:

无效输入:


我犯了一个错误,密码的最小长度是8
form = LoginForm(request.form)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>login</title>
    <style>
        .validation_error{
        color: red;
    }
    </style>
</head>
<body>
<form method="POST" action="">
    {{ form.csrf_token }}
    {{ form.username.label }}<br>{{ form.username }}<span class="validation_error">{{ ', '.join(form.username.errors) }}</span><br>
    {{ form.password.label }}<br>{{ form.password }}<span class="validation_error">{{ ', '.join(form.password.errors) }}</span><br>
    {{ form.remember }}{{ form.remember.label }}<span class="validation_error">{{ ', '.join(form.remember.errors) }}</span><br>
    {{ form.submit }}<br>
</form>
</body>
</html>
from flask import Flask, render_template
from forms import LoginForm

app = Flask(__name__)
app.secret_key = 'learnflask'
@app.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        username = form.username.data
        return username
    return render_template('login.html', form=form)