簡體   English   中英

WTForms:當字符串值為'0'時,IntegerField跳過強制

[英]WTForms: IntegerField skips coercion when string value is '0'

這個問題幾乎涵蓋了我在此之后的情況,但並不完全。

當字符串值為'0'時,IntegerField似乎會跳過強制。 任何其他正整數似乎都可以正常工作。

這是一個'0'的例子:

from wtforms import validators, Form, IntegerField
from webob.multidict import MultiDict

class TestForm(Form):
    num = IntegerField('How Many?', [validators.DataRequired('num required.'), validators.NumberRange(min=0, max=100)])

data_in = {'num': '0'}  # Note '0' is a string as would be POSTed
test_form = TestForm(formdata=MultiDict(data_in))
print("HTML Render: %s" % test_form.num())
print("     Validate: %s" % test_form.validate())
print("       Errors: %s" % test_form.errors)

輸出是:

HTML Render: <input id="num" name="num" type="text" value="0">
     Validate: False
       Errors: {'num': ['num required.']}

或者,使用'66'的示例:

from wtforms import validators, Form, IntegerField
from webob.multidict import MultiDict

class TestForm(Form):
    num = IntegerField('How Many?', [validators.DataRequired('num required.'), validators.NumberRange(min=0, max=100)])

data_in = {'num': '66'}  # Note '66' is a string as would be POSTed
test_form = TestForm(formdata=MultiDict(data_in))
print("HTML Render: %s" % test_form.num())
print("     Validate: %s" % test_form.validate())
print("       Errors: %s" % test_form.errors)

其中包括:

HTML Render: <input id="num" name="num" type="text" value="66">
     Validate: True
       Errors: {}

是什么賦予了? 我可以使用InputRequired來保持它類型不可知,但這完全違背了這個目的。

我擔心你必須保持該類型不可知並改為使用InputRequired :-)

這里的文檔說:

“[...]這個驗證器過去被稱為必需但它的行為方式(需要強制數據,而不是輸入數據)意味着它的運行方式與可選驗證器不對稱,並且進一步導致與強制某些字段混淆數據為'falsey'值,如0,十進制(0),時間(0)等。除非存在非常具體的原因,否則我們建議使用:class:InputRequired。“

實際的代碼杯值略低於第201行:

if not field.data

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM