[英]Email Validation from WTForm using Flask
我正在關注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")
閱讀評論我將其更新為:(用 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")
我唯一的問題是我不知道如何處理 validators.Email。 我得到的錯誤信息是:
NameError: name 'validators' is not defined
我查看了文檔,也許我沒有深入研究,但似乎找不到電子郵件驗證的示例。
嘗試這個:
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()])
我完成了與復習相同的教程(我已經有幾年沒有看過燒瓶了)。
問題是由於在 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")
請注意, StringField
替換了TextField
並且InputRequired
優於DataRequired
。 直接導入驗證器而不是導入整個命名空間是個人偏好。 這也適用: from wtforms import *
並在表單類中: name = StringField("Name", [validators.InputRequired("message")
當您更新到最新版本的 Flask-WTF 時,您也可以在視圖中使用validate_on_submit()
( 如此處推薦的那樣)。
並且方便的 validate_on_submit 將檢查它是否是一個 POST 請求以及它是否有效。
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")
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 foo import bar
import 語句導入了沒有命名空間的驗證器。
為了使其更具可讀性並修復示例代碼中的語法錯誤:
from flask.ext.wtf import Form
from wtforms import TextField, SubmitField
from wtforms.validators import InputRequired, Email
from wtforms.fields.html5 import EmailField
class ContactForm(Form):
name = TextField("Name", validators=[InputRequired('Please enter your name.')])
email = EmailField("Email", validators=[InputRequired("Please enter your email address."), Email("Please enter your email address.")])
submit = SubmitField("Send")
這僅在字段TextField
、 SubmitField
和Email
以及InputRequired
和Email
驗證器中加載。 然后只需將驗證器鏈接到驗證validators
關鍵字參數中即可。 或者,正如@Mehdi Sadeghi 在代碼中指出的那樣,直接提供驗證器列表作為該字段的第二個參數,在這種情況下,您的電子郵件字段將如下所示:
email = EmailField("Email", [InputRequired("Please enter your email address."), Email("Please enter your email address.")])
請注意,通過使用from foo import bar
的語法僅導入您需要的內容from foo import bar
您將丟棄模塊名稱空間,正如您在刪除validators.
時也注意到的那樣validators.
字首。 有些人發現離開這個命名空間更好,因此使用點符號,只是為了防止可能的名稱沖突並立即查看對象屬於哪個模塊(無需回顧導入語句)。
一如既往,選擇權在您!
只需使用 pip 安裝 email_validator 例如
pip 安裝 email_validator
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.