我正在使用Django Rest Framework。我有一个API,我可以获得JSON数据。我有一个列表序列化程序,我试图验证父JSON中的列表。该列表如下所示:
[{
type:"integer",
name: "Age",
range: [18, 60]
},
{
type: "string",
name: "Email",
pattern : "email"
},
{
type: "date",
name: "Joining Date",
format: "mm-dd-yyyy"
}]
我有一个处理其余数据的序列化程序。其中一个属性是此列表,由列表序列化程序处理。现在,对于列表中的单个元素,验证取决于type属性。
例如:如果类型是整数,我期望一个范围。如果type是string,我期待一个模式。 如果类型是日期,我希望有一种格式。
验证此类数据的好方法是什么?
如何验证?
答案 0 :(得分:0)
我通常使用这种模式:
data = [{
"type": "integer",
"name": "Age",
"range": [18, 60]
},
{
"type": "string",
"name": "Email",
"pattern": "email"
},
{
"type": "date",
"name": "Joining Date",
"format": "mm-dd-yyyy"
}]
rules = {
"integer": {
"must_contains": ["range"]
},
"string": {
"must_contains": ["pattern"]
}
}
class ValidationError(Exception):
pass
class Validator(object):
def __init__(self, rules):
self.rules = rules
@staticmethod
def _check_contains_rule(rule, obj):
for elem in rule.get("must_contains", ()):
if not obj.get(elem):
raise ValidationError("Object with type %s must contains %s!" % (obj["type"], elem))
def validate(self, data):
for obj in data:
rule = self.rules.get(obj["type"])
if rule:
self._check_contains_rule(rule, obj)
v = Validator(rules)
v.validate(data)