我正在使用烧瓶应用并使用wtforms:
class RegisterForm(Form):
username = StringField('Username', validators=[DataRequired(), Length(min=3, max=25)])
email = StringField('Email', validators=[DataRequired(), Email(), Length(min=6, max=40)])
phone = StringField('Phone', validators=[DataRequired(), Length(10)])
我刚刚添加手机,正在寻找验证美国号码的方法。我遇到http://wtforms-components.readthedocs.org/en/stable/#phonenumberfield,但这似乎不再有phonenumberfield了。什么是使用wtfforms处理此问题的最佳方法?
编辑课程:
class RegisterForm(Form):
username = StringField('Username', validators=[DataRequired(), Length(min=3, max=25)])
email = StringField('Email', validators=[DataRequired(), Email(), Length(min=6, max=40)])
phone = StringField('Phone', validators=[DataRequired(),validate_phone('RegisterForm','phone'), Length(min=6, max=40)])
def validate_phone(form, field):
if len(field.data) > 16:
raise ValidationError('Invalid phone number.')
try:
input_number = phonenumbers.parse(field.data)
if not (phonenumbers.is_valid_number(input_number)):
raise ValidationError('Invalid phone number.')
except:
input_number = phonenumbers.parse("+1"+field.data)
if not (phonenumbers.is_valid_number(input_number)):
raise ValidationError('Invalid phone number.')
答案 0 :(得分:7)
我在最近的一个应用程序中使用了python-phonenumbers。它使用谷歌电话号码解析的东西。以下是我如何使用它:
from wtforms import ValidationError
import phonenumbers
class RegisterForm(Form):
username = StringField('Username', validators=[DataRequired(), Length(min=3, max=25)])
email = StringField('Email', validators=[DataRequired(), Email(), Length(min=6, max=40)])
phone = StringField('Phone', validators=[DataRequired()])
def validate_phone(form, field):
if len(field.data) > 16:
raise ValidationError('Invalid phone number.')
try:
input_number = phonenumbers.parse(field.data)
if not (phonenumbers.is_valid_number(input_number)):
raise ValidationError('Invalid phone number.')
except:
input_number = phonenumbers.parse("+1"+field.data)
if not (phonenumbers.is_valid_number(input_number)):
raise ValidationError('Invalid phone number.')
答案 1 :(得分:1)
我利用了PhoneNumberField
组件中的内置wtforms
。这是我的用法。
from wtforms_components import PhoneNumberField
class UserForm(Form):
phone_number = PhoneNumberField(
country_code='US'
display_format='national'
)
答案 2 :(得分:0)
我没有足够的声誉来发表评论,但是公认的解决方案在许多情况下都会引发未捕获的异常。这是由于以下行为(从电话号码文档复制):
对于无法唯一解析或可能不是电话号码的输入,解析功能也将完全失败(带有NumberParseException)。
失败的字符串示例为“ 1”,“ 2”和“ abcde”。
以下是wgwz答案的修改形式,对这种情况有很强的作用:
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Accept", "application/json");