首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WTForms未验证类型

WTForms未验证类型
EN

Stack Overflow用户
提问于 2015-04-07 21:34:31
回答 1查看 318关注 0票数 0

我试图使用wtforms来检查字典中的数据是否符合所需的类型。在下面的示例中,我希望确保字典中的some_field是一个整数。文档让我相信,如果我使用IntegerField,数据将被强制为整数,StringField将强制字符串,等等。然而,即使some_field的类型不是整数,foo.validate()仍然返回True。这是预期的行为吗?为什么?如果是预期的行为,是否可以使用wtforms按需要进行类型验证?

代码语言:javascript
复制
>>> from wtforms import Form, IntegerField, validators

>>> class Foo(Form):
...     some_field = IntegerField(validators=[validators.Required()])

>>> foo = Foo(**{'some_field':'some text input'})

>>> foo.data
{'some_field': 'some text input'}

>>> foo.validate()
True

>>> IntegerField?
Type:            type
String form:     <class 'wtforms.fields.core.IntegerField'>
File:            c:\users\appdata\local\continuum\anaconda\envs\env\lib\site-packages\wtforms\fields\core.py
Init definition: IntegerField(self, label=None, validators=None, **kwargs)
Docstring:
A text field, except all input is coerced to an integer.  Erroneous input
is ignored and will not be accepted as a value.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-08 13:12:04

数据需要传递给表单的formdata参数,以强制类型强制。为了将数据传递给formdata,请使用MultiDict

代码语言:javascript
复制
In [2]: from wtforms import Form, IntegerField, validators

In [3]: class Foo(Form):
   ...:     some_field = IntegerField(validators=[validators.Required()])

In [4]: from werkzeug.datastructures import MultiDict

In [5]: foo = Foo(formdata=MultiDict({'some_field':'some text input'}))

In [6]: foo.data
Out[6]: {'some_field': None}

In [7]: foo.validate()
Out[7]: False

感谢Max在评论中指出了这个链接的答案和更多细节:WTForms: IntegerField skips coercion on a string value

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29501741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档