los*_*193 16 python email validation flask-wtforms
我正在关注来自http://code.tutsplus.com/tutorials/intro-to-flask-adding-a-contact-page--net-28982的Flask教程,目前我仍然坚持验证步骤:
旧版本有以下内容:
from flask.ext.wtf import Form, TextField, TextAreaField, SubmitField, validators, ValidationError
class ContactForm(Form):
name = TextField("Name", [validators.Required("Please enter your name.")])
email = TextField("Email", [validators.Required("Please enter your email address."), validators.Email("Please enter your email address.")])
submit = SubmitField("Send")
Run Code Online (Sandbox Code Playgroud)
阅读评论后我将其更新为:(用InputRequired替换validators.Required)
(same fields)
class ContactForm(Form):
name = TextField("Name", validators=[InputRequired('Please enter your name.')])
email = EmailField("Email", validators=[InputRequired("Please enter your email address.")]), validators.Email("Please enter your email address.")])
submit = SubmitField("Send")
Run Code Online (Sandbox Code Playgroud)
我唯一的问题是我不知道如何处理validators.Email.我得到的错误信息是:
NameError: name 'validators' is not defined
Run Code Online (Sandbox Code Playgroud)
我查看了文档,也许我没有深入研究,但我似乎无法找到电子邮件验证的示例.
Meh*_*ghi 28
试试这个:
from flask.ext.wtf import Form
from wtforms import validators
from wtforms.fields.html5 import EmailField
class ContactForm(Form):
email = EmailField('Email address', [validators.DataRequired(), validators.Email()])
Run Code Online (Sandbox Code Playgroud)
我完成了与进阶课程相同的教程(几年没看过烧瓶了)。
该问题是由于您在0.9版本的Flask-WTF中进行了更改。 在这里,他们说:
注意:从0.9.0版开始,Flask-WTF不会从wtforms导入任何内容,您需要从wtforms导入字段。
要直接导入,forms.py应该显示为:
from flask.ext.wtf import Form
from wtforms import StringField, TextAreaField, SubmitField
from wtforms.validators import InputRequired, Email
class ContactForm(Form):
name = StringField("Name", [InputRequired("Please enter your name.")])
email = StringField("Email", [InputRequired("Please enter your email address."), Email("This field requires a valid email address")])
subject = StringField("Subject", [InputRequired("Please enter a subject.")])
message = TextAreaField("Message", [InputRequired("Not including a message would be stupid")])
submit = SubmitField("Send")
Run Code Online (Sandbox Code Playgroud)
请注意,StringFieldreplaces TextField和that InputRequired 优先于 DataRequired。直接导入验证器而不是导入整个名称空间是个人喜好。这也适用:from wtforms import *在表单类中:name = StringField("Name", [validators.InputRequired("message")
当您更新到最新版本的Flask-WTF时,您也可以validate_on_submit()在视图中使用它(如此处推荐)。
并且便利的validate_on_submit将检查它是否是POST请求以及它是否有效。