python - Flask-WTForms 为 IntegerField 抛出错误而不是验证失败

标签 python flask wtforms flask-wtforms

当我使用 wtf_forms 和 Flask-WTF 创建表单并使用 IntegerField 输入时,我无法将它与长度验证器结合使用

如果我删除长度限制,那么它就可以正常工作。我应该能够对 IntegerField 应用长度验证吗?

Python 代码。

from flask_wtf import Form
from wtforms import TextField, PasswordField, IntegerField, validators

class RegistrationForm(Form):
    firstname = TextField('First Name', [validators.Required()])
    lastname = TextField('Last Name', [validators.Required()])
    telephone = IntegerField('Telephone', [validators.Length(min=10, max=10, message="Telephone should be 10 digits (no spaces)")])

TypeError
TypeError: object of type 'int' has no len()

Traceback (most recent call last)
File "C:\Python27\lib\site-packages\flask\app.py", line 1701, in __call__
return self.wsgi_app(environ, start_response)
File "C:\Python27\lib\site-packages\flask\app.py", line 1689, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "C:\Python27\lib\site-packages\flask\app.py", line 1687, in wsgi_app
response = self.full_dispatch_request()
File "C:\Python27\lib\site-packages\flask\app.py", line 1360, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\Python27\lib\site-packages\flask\app.py", line 1358, in full_dispatch_request
rv = self.dispatch_request()
File "C:\Python27\lib\site-packages\flask\app.py", line 1344, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "C:\index.py", line 45, in submit
if form.validate_on_submit():
File "C:\Python27\lib\site-packages\flask_wtf\form.py", line 156, in validate_on_submit
return self.is_submitted() and self.validate()
File "C:\Python27\lib\site-packages\wtforms\form.py", line 271, in validate
return super(Form, self).validate(extra)
File "C:\Python27\lib\site-packages\wtforms\form.py", line 130, in validate
if not field.validate(self, extra):
File "C:\Python27\lib\site-packages\wtforms\fields\core.py", line 175, in validate
stop_validation = self._run_validation_chain(form, chain)
File "C:\Python27\lib\site-packages\wtforms\fields\core.py", line 195, in _run_validation_chain
validator(form, self)
File "C:\Python27\lib\site-packages\wtforms\validators.py", line 91, in __call__
l = field.data and len(field.data) or 0
TypeError: object of type 'long' has no len()

最佳答案

下面的错误意味着您正在尝试检查 python 不允许的整数长度。如果你想检查长度,那么它必须是一个字符串。 IntegerField() 然而根据定义是一个整数

object of type 'int' has no len()

您需要创建如下所示的内容。 NumberRange 接受一系列数字。

IntegerField('Telephone', [validators.NumberRange(min=0, max=10)])

或者,我建议您使用 FormField 并定义您自己的电话字段。这里有一个创建电话字段的确切示例:

http://wtforms.simplecodes.com/docs/0.6.1/fields.html#wtforms.fields.FormField

关于python - Flask-WTForms 为 IntegerField 抛出错误而不是验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19772494/

相关文章:

python - 仅在 Flask 中将页面/URL 限制为管理员

python - Jinja2 在 HTML 中使用图像

动态更新 WTForms 选择字段的 JavaScript/Ajax

python - 如何在保存一次后将模型实例设置为只读?

python - 在 Pandas/Python 中处理时间序列

python - os.system() 在哪个 linux shell 下执行命令?

python - 将多部分/表单数据转发到不同的服务(python、bottle、requests)

python - 如何休眠到特定时间 YYYY-MM-DD HH :MM:SS?

python - 与 Flask 集成时 Ldap 模块失败

python - 具有自定义验证方法的 WTForms 表单永远无效