使用Flask从WTForm进行电子邮件验证

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)

  • “请注意,这使用了一个非常原始的正则表达式,并且只应在您稍后通过其他方式进行验证的情况下使用,例如电子邮件激活或查找。” - [WTForms 验证器文档](http://wtforms.readthedocs.io/en/latest/validators.html) (2认同)

cst*_*ton 5

我完成了与进阶课程相同的教程(几年没看过烧瓶了)。

该问题是由于您在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请求以及它是否有效。