WTForms 验证错误不起作用
WTForms validation error not working
我正在尝试创建一个登录表单,如果用户名为空,则会引发错误。
from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, BooleanField
from wtforms.validators import InputRequired, Email, length, ValidationError
app = Flask(__name__)
app.config['SECRET_KEY'] = 'This is a secret'
class LoginForm(FlaskForm):
username = StringField('username', validators=[InputRequired()])
password = PasswordField('password')
@app.route('/form', methods=['GET','POST'])
def form():
form=LoginForm()
return render_template('form.html', form=form)
if __name__== '__main__':
app.run(debug=True)
html代码如下:
<html>
<title> MY FORM </title>
<body>
<form method="POST" action="{{ url_for('form') }}">
{{form.csrf_token}}
{{ form.username.label }}
{{ form.username }}
<ul>
{% for error in form.username.errors %}
<li style="color: red;">{{ error }} </li>
{% endfor %}
</ul>
{{ form.password }}
{{ form.password.label }}
<input type="submit" value="Submit">
</form>
</body>
</html>
显然,for 循环被跳过,当用户字段为 null 时单击提交按钮没有任何反应
您根本没有在 form
函数中验证表单。编辑函数并添加验证行。验证后才发现错误。否则,模板中的 form
变量将没有错误属性。应执行以下操作:
@app.route('/form', methods=['GET','POST'])
def form():
this_form = LoginForm()
this_form.validate()
return render_template('form.html', form=this_form)
此外,请避免将表单命名为 form
,因为您已经将函数命名为 form
。您应该更改表单的函数名称或变量名称。
希望对您有所帮助。
假设您的表单将使用 POST 方法发送,您必须验证已提交的表单数据。使用 flask-wtf 非常简单:
@app.route('/form', methods=['GET','POST'])
def check_form():
form = LoginForm()
if form.validate_on_submit():
# do something
return # something
return render_template('form.html', form=form)
我邀请您阅读更多关于 flask-wtf
我正在尝试创建一个登录表单,如果用户名为空,则会引发错误。
from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, BooleanField
from wtforms.validators import InputRequired, Email, length, ValidationError
app = Flask(__name__)
app.config['SECRET_KEY'] = 'This is a secret'
class LoginForm(FlaskForm):
username = StringField('username', validators=[InputRequired()])
password = PasswordField('password')
@app.route('/form', methods=['GET','POST'])
def form():
form=LoginForm()
return render_template('form.html', form=form)
if __name__== '__main__':
app.run(debug=True)
html代码如下:
<html>
<title> MY FORM </title>
<body>
<form method="POST" action="{{ url_for('form') }}">
{{form.csrf_token}}
{{ form.username.label }}
{{ form.username }}
<ul>
{% for error in form.username.errors %}
<li style="color: red;">{{ error }} </li>
{% endfor %}
</ul>
{{ form.password }}
{{ form.password.label }}
<input type="submit" value="Submit">
</form>
</body>
</html>
显然,for 循环被跳过,当用户字段为 null 时单击提交按钮没有任何反应
您根本没有在 form
函数中验证表单。编辑函数并添加验证行。验证后才发现错误。否则,模板中的 form
变量将没有错误属性。应执行以下操作:
@app.route('/form', methods=['GET','POST'])
def form():
this_form = LoginForm()
this_form.validate()
return render_template('form.html', form=this_form)
此外,请避免将表单命名为 form
,因为您已经将函数命名为 form
。您应该更改表单的函数名称或变量名称。
希望对您有所帮助。
假设您的表单将使用 POST 方法发送,您必须验证已提交的表单数据。使用 flask-wtf 非常简单:
@app.route('/form', methods=['GET','POST'])
def check_form():
form = LoginForm()
if form.validate_on_submit():
# do something
return # something
return render_template('form.html', form=form)
我邀请您阅读更多关于 flask-wtf