flask-wtforms - Wtf 表单验证失败
问题描述
在下面给出 Form.py 文件:
Form.py file:
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField, validators
from wtforms.validators import DataRequired, Length
# Define QuoteForm below
class QuoteForm(FlaskForm):
qauthor = StringField("Quote Author", validators =[Length(min=3,max=100,message=("Field must be between 3 and 100 characters long")), DataRequired(message=("This field is required"))])
qstring = StringField("Quote", validators =[Length(min=3,max=200,message=("Field must be between 3 and 200 characters long")), DataRequired(message=("This field is required"))])
submit= SubmitField("Add Quote")
赋予视图功能:
@app.route('/addquote/', methods=['GET', 'POST'])
def add_quote():
form = QuoteForm()
if request.method=='POST':
quote = Quotes(quoteauthor=form.qauthor.data, quotestring= form.qstring.data)
try:
db.session.add(quote)
db.session.commit()
except Exception:
db.session.rollback()
return render_template("addquote_confirmation.html",form=QuoteForm())
else:
return render_template("addquote.html",form=QuoteForm())
if __name__=="__main__":
app.run()
表单的 HTML 文件:
<form action = "on_validate()" method = "POST">
{{ form.qauthor.label }} : {{ form.qauthor }} <br>
{% for error in form.qauthor.errors %}
<span style="color: red;">[{{ error }}]</span><br>
{% endfor %} <br>
{{ form.qstring.label }} : {{ form.qstring }} <br><br>
{% for error in form.qstring.errors %}
<span style="color: red;">[{{ error }}]</span><br>
{% endfor %} <br>
{{ form.submit }}
</form>
运行测试用例时出现以下错误:AssertionError: b'[This field is required.]' not found in b'\n\n\n \n \n\n\n
一份报价已成功添加到数据库中。
\n\n要查看所有报价,请单击此处\n\n要转到主页,请单击主页 \n\n\n '解决方案
没有 on_validate()。在下面使用:
<form method = "POST" novalidate>
{{ form.qauthor.label }} : {{ form.qauthor }} <br>
{% for error in form.qauthor.errors %}
<span style="color: red;">[{{ error }}]</span><br>
{% endfor %} <br>
{{ form.qstring.label }} : {{ form.qstring }} <br><br>
{% for error in form.qstring.errors %}
<span style="color: red;">[{{ error }}]</span><br>
{% endfor %} <br>
{{ form.submit }}
</form>
对于form.py
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField, validators
from wtforms.validators import InputRequired, Length
# Define QuoteForm below
class QuoteForm(FlaskForm):
qauthor = StringField("Quote Author", validators =[Length(min=3,max=100,message=("Field must be between 3 and 100 characters long.")), InputRequired(message='This field is required.')])
qstring = StringField("Quote", validators =[Length(min=3,max=200,message=("Field must be between 3 and 200 characters long.")), InputRequired(message='This field is required.')])
submit= SubmitField("Add Quote")
和 routes.py
@app.route('/addquote/', methods=['GET', 'POST'])
def add_quote():
form = QuoteForm()
if form.validate_on_submit():
if request.method=='POST':
quote = Quotes(quoteauthor=form.qauthor.data, quotestring= form.qstring.data)
try:
db.session.add(quote)
db.session.commit()
except Exception:
db.session.rollback()
return render_template("addquote_confirmation.html",form=form)
else:
return render_template("addquote.html",form=form)
return render_template("addquote_confirmation.html",form=form)
else:
return render_template("addquote.html",form=form)
推荐阅读
- http - 滥用主机头注入来访问自定义的 Apache Traffic Server 协议
- google-apps-script - 用户制作副本时如何触发 Google Apps 脚本
- python - MPI4PY:散布矩阵
- javascript - 为什么会这样。返回“未定义”?
- git - 如何从新的 git Visual Studio 2019(而不是命令)克隆特定分支?
- html - Django模板在空间打破模型值字符串
- css - neo4j数据库的前端可视化
- amazon-web-services - AWS-ElasticBeanstalk:在哪里可以找到 Beanstalk 自动创建的域名指向什么?
- python - 我该如何解决这个 pyinstaller 问题?
- distributed-computing - 将 ReadableStream 存储在 Cloudflare Workers KV 等分布式数据存储中的用例有哪些?