使用Flask的WTForm进行邮箱验证
我正在跟着一个关于Flask的教程,地址是 http://code.tutsplus.com/tutorials/intro-to-flask-adding-a-contact-page--net-28982,现在卡在了验证这一步。
旧版本的代码是这样的:
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")
看了评论后,我把它更新成了这样:(把validators.Required换成了InputRequired)
(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")
我唯一的问题是我不知道该怎么处理validators.Email。出现的错误信息是:
NameError: name 'validators' is not defined
我查阅了文档,也许我没有深入研究,但我找不到关于邮箱验证的例子。
7 个回答
只需要用pip来安装一个叫做email_validator的工具,比如这样:
pip install email_validator
from flask_wtf import FlaskForm from wtforms import StringField, PasswordField, BooleanField, SubmitField
from wtforms.fields.html5 import EmailField
from wtforms.validators import DataRequired, Email
class LoginForm(FlaskForm):
username = StringField('Username', validators=[DataRequired()])
email = EmailField('Email Address', validators=[DataRequired(), Email()])
password = PasswordField('Password', validators=[DataRequired()])
remember_me = BooleanField('Remember me')
submit = SubmitField('Sign In')
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。
from flask_wtf import FlaskForm
from wtforms import StringField
from wtforms.validators import DataRequired, Email
class ContactForm(FlaskForm):
name = StringField("Name", validators=[DataRequired()])
email = StringField("Email", validators=[DataRequired(), Email()])
submit = SubmitField("Send")
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。
我最近又看了一遍之前的教程,因为我有好几年没碰过Flask了。
出现的问题是因为Flask-WTF在0.9版本时做了一些改变。在这里,他们提到:
注意:从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")
注意,StringField
替代了TextField
,而InputRequired
比 DataRequired
更受欢迎。个人偏好是直接导入验证器,而不是导入整个命名空间。你也可以这样写:from wtforms import *
,然后在表单类中:name = StringField("Name", [validators.InputRequired("message")
在你更新到最新版本的Flask-WTF时,最好在你的视图中也使用validate_on_submit()
(这里推荐这样做)。
而且方便的
validate_on_submit
会检查请求是否是POST,并且验证是否有效。
试试这个:
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()])