Pythonデータ検証ライブラリ(二)validator
8698 ワード
validator.pyはデータ検証ツールであり、データが一定のルールに合致していることを確認します.1つのvalidationは辞書で、辞書の各キーにはルールリストが含まれています.
まず2つの簡単な例を見て、validatorの使い方を大まかに理解することができて、validatorとvalidatorsの違いを体得することができます.
一、据付
1、安定バージョンのインストール
2、最新バージョン
からhttp://github.com/mansam/validator.py最新バージョンの取得
二、検証の旅を始める
ベリファイアをカスタマイズできます.先に例を示します.
ここでvalidationは我々の検証ルール(チェックポイント)であり、dictionaryは検査するデータであり、validationとdictionaryを関数validateのパラメータとして、検証結果を得ることができる.実際のニーズに応じて、より複雑な検証ルールを定義できます.
三、直接使えるいくつかのベリファイア
1、Equals
値照合の検証
2、Required
デフォルトでは、
3、Truthy
dictionaryの値がpythonの真の値であるかどうかを確認します.pythonの真の値には、True、0以外の整数、空でないリスト、空でない文字列などが含まれます.
4、Range
ディクショナリの値がRangeの範囲内であることを確認します.
5、Pattern
データフォーマットを確認します.
6、In
7、Not
8、InstanceOf
9、SubclassOf
10、Length
四、条件検証
場合によっては、まずデータを検証し、このデータが検証されたときに次の検証を行う必要がある場合があります.この場合、条件検証を使用することができます.
五、ネスト検証
検証する必要があるデータは、単純な構造ではなく、ネストされた構造である場合があります.上栗:
下一篇:Pythonデータ検証ライブラリ(一)validatorshttp://www.jianshu.com/p/2babed54b496
上一篇:Pythonデータ検証ライブラリ(三)voluptuoushttp://www.jianshu.com/p/0a5047a04ffd
まず2つの簡単な例を見て、validatorの使い方を大まかに理解することができて、validatorとvalidatorsの違いを体得することができます.
from validator import Required, Not, Truthy, Blank, Range, Equals, In, validate
# let's say that my dictionary needs to meet the following rules...
rules = {
"foo": [Required, Equals(123)], # foo must be exactly equal to 123
"bar": [Required, Truthy()], # bar must be equivalent to True
"baz": [In(["spam", "eggs", "bacon"])], # baz must be one of these options
"qux": [Not(Range(1, 100))] # qux must not be a number between 1 and 100 inclusive
}
# then this following dict would pass:
passes = {
"foo": 123,
"bar": True, # or a non-empty string, or a non-zero int, etc...
"baz": "spam",
"qux": 101
}
>>> validate(rules, passes)
ValidationResult(valid=True, errors={})
# but this one would fail
fails = {
"foo": 321,
"bar": False, # or 0, or [], or an empty string, etc...
"baz": "barf",
"qux": 99
}
>>> validate(rules, fails)
ValidationResult(valid=False, errors={'baz': ["must be one of ['spam', 'eggs', 'bacon']"], 'foo': ['must be equal to 123'], 'bar': ['must be True-equivalent value'], 'qux': ['must not fall between 1 and 100']})
一、据付
1、安定バージョンのインストール
$ pip install validator.py
2、最新バージョン
からhttp://github.com/mansam/validator.py最新バージョンの取得
二、検証の旅を始める
ベリファイアをカスタマイズできます.先に例を示します.
dictionary = {
"foo": "bar"
}
validation = {
"foo": [lambda x: x == "bar"]
}
>>> validate(validation, dictionary)
ValidationResult(valid=True, errors={})
# Success!
ここでvalidationは我々の検証ルール(チェックポイント)であり、dictionaryは検査するデータであり、validationとdictionaryを関数validateのパラメータとして、検証結果を得ることができる.実際のニーズに応じて、より複雑な検証ルールを定義できます.
三、直接使えるいくつかのベリファイア
1、Equals
値照合の検証
passes = {
"foo": "bar"
}
failures = {
"foo": "barrr"
}
validation = {
"foo": [Equals("bar")]
}
>>> validate(validation, passes)
ValidationResult(valid=True, errors={})
# Success!
>>> validate(validation, failures)
ValidationResult(valid=False, errors={'foo': ["must be equal to 'bar'"]})
# Failure!
2、Required
デフォルトでは、
key
が選択可能です.key
がvalidation
にあるが、dictionary
にない場合、データ検証時にデフォルトでスキップされます.キーが存在することを確認するには、Requiredを使用します.dictionary1 = {
"foo": "bar"
}
dictionary2 = {
}
validation = {
"foo": [Required, Equals("bar")]
}
>>> validate(validation, dictionary1)
ValidationResult(valid=True, errors={})
>>> validate(validation, dictionary2)
ValidationResult(valid=False, errors={'foo': 'must be present'})
3、Truthy
dictionaryの値がpythonの真の値であるかどうかを確認します.pythonの真の値には、True、0以外の整数、空でないリスト、空でない文字列などが含まれます.
dictionary = {
"foo": 1
}
validation = {
"foo": [Required, Truthy()]
}
>>> validate(validation, dictionary)
ValidationResult(valid=True, errors={})
4、Range
ディクショナリの値がRangeの範囲内であることを確認します.
dictionary = {
"foo": 10
}
failure = {
"foo": 12
}
validation = {
"foo": [Required, Range(1, 11)]
}
>>> validate(validation, dictionary)
ValidationResult(valid=True, errors={})
>>> validate(validation, failure)
ValidationResult(valid=False, errors={'foo': ['must fall between 1 and 11']})
5、Pattern
データフォーマットを確認します.
dictionary = {
"foo": "30%"
}
failure = {
"foo": "99.0"
}
validation = {
"foo": [Required, Pattern("\d\d\%")]
}
>>> validate(validation, dictionary)
ValidationResult(valid=True, errors={})
# Success!
>>> validate(validation, failure)
ValidationResult(valid=False, errors={'foo': ['must match regex pattern \\d\\d\\
%']})
# failure
6、In
dictionary
の値が1つのセットにあるかどうかを確認します.dictionary = {
"foo": "spam"
}
failure = {
"foo": "beans"
}
validation = {
"foo": [Required, In(["spam", "eggs", "bacon"])]
}
>>> validate(validation, dictionary)
ValidationResult(valid=True, errors={})
>>> validate(validation, failure)
ValidationResult(valid=False, errors={'foo': ['must match regex pattern \\d\\d\\
%']})
7、Not
Not
は、反対の検証内容を示す他の検証器の前に置くことができる.dictionary = {
"foo": "beans"
}
validation = {
"foo": [Required, Not(In(["spam", "eggs", "bacon"]))]
}
>>> validate(validation, dictionary)
ValidationResult(valid=True, errors={})
dictionary = {
"foo": 10
}
validation = {
"foo": [Required, Not(Range(1, 11))]
}
>>> validate(validation, dictionary)
ValidationResult(valid=False, errors={'foo': ['must not fall between 1 and 11']})
8、InstanceOf
dictionary
の値がベースクラスまたはそのサブクラスのインスタンスであるかどうかを確認します.dictionary = {
"foo": u"i'm_a_unicode_string"
}
failure = {
"foo": object
}
validation = {
"foo": [Required, InstanceOf(basestring)]
}
>>> validate(validation, dictionary)
ValidationResult(valid=True, errors={})
>>> validate(validation, failure)
ValidationResult(valid=False, errors={'foo': ['must be an instance of str or its
subclasses']})
9、SubclassOf
dictionary
の値がベースクラスのサブクラスであるかどうかを確認し、特に、ここではベースクラスのサブクラスであり、クラスの例ではないことを強調する.dictionary = {
"foo": unicode
}
failure = {
"foo": "bar"
}
validation = {
"foo": [Required, SubclassOf(basestring)]
}
>>> validate(validation, dictionary)
ValidationResult(valid=True, errors={})
>>> validate(validation, failure)
ValidationResult(valid=False, errors={'foo': ['must be a subclass of basestring']})
10、Length
dictionary
のvalue
には少なくともminimum個の要素があり、最大maximum個の要素があり、そのうち第1のパラメータはminimumであり、第2のパラメータmaximumはオプションであることを確認します.dictionary = {
"foo": [1, 2, 3, 4, 5]
}
validation = {
"foo": [Length(0, maximum=5)]
}
>>> validate(validation, dictionary)
ValidationResult(valid=True, errors={})
dictionary = {
"foo": [1, 2, 3, 4, 5]
}
validation = {
"foo": [Length(6, maximum=10)]
}
>>> validate(validation, dictionary)
ValidationResult(valid=False, errors={'foo': ['must be between 6 and 10 elements in length']})
四、条件検証
場合によっては、まずデータを検証し、このデータが検証されたときに次の検証を行う必要がある場合があります.この場合、条件検証を使用することができます.
If(validator, Then(validation))
pet = {
"name": "whiskers",
"type": "cat"
}
cat_name_rules = {
"name": [In(["whiskers", "fuzzy", "tiger"])]
}
dog_name_rules = {
"name": [In(["spot", "ace", "bandit"])]
}
validation = {
"type": [
If(Equals("cat"), Then(cat_name_rules)),
If(Equals("dog"), Then(dog_name_rules))
]
}
>>> validate(validation, pet)
ValidationResult(valid=True, errors={})
五、ネスト検証
検証する必要があるデータは、単純な構造ではなく、ネストされた構造である場合があります.上栗:
validator = {
"foo": [Required, Equals(1)],
"bar": [Required, {
"baz": [Required, Equals(2)],
"qux": [Required, {
"quux": [Required, Equals(3)]
}]
}
]
}
test_case = {
"foo": 1,
"bar": {
"baz": 2,
"qux": {
"quux": 3
}
}
}
>>> validate(validator, test_case)
ValidationResult(valid=True, errors={})
下一篇:Pythonデータ検証ライブラリ(一)validatorshttp://www.jianshu.com/p/2babed54b496
上一篇:Pythonデータ検証ライブラリ(三)voluptuoushttp://www.jianshu.com/p/0a5047a04ffd