Django / DRF广泛验证

时间:2015-10-02 15:35:26

标签: django python-2.7 django-rest-framework

这更像是一个概念性问题。我不是在寻找代码示例答案。只需了解使用Django和DRF时的验证。

考虑以下模型:

class Store(models.Model):
    id = models.CharField()
    products = JsonField(default='[]')
    regexp = models.CharField(max_length=255)

我正在使用Django REST Framework,我有一个序列化器,它为StoreView序列化了这个模型。

我想要执行一些验证。例如,我希望products采用以下格式:{"id":x, "optional-title":y},我想对regexp强制执行一些正则表达式验证。

如何在一个地方强制执行此模型的验证,仍然可以获得正确的错误返回。通过'正确的错误返回',我的意思是当我从400 BAD REQUEST客户端收到一些错误的有效负载时我应该返回API但是如果我创建的话我也应该返回正常的Django ValidationError模型级别的对象。

我看不到串行器级别验证的优势。在我看来,如果我想保证坏对象永远不会进入数据库,我只需要在模型级别复制我的验证。

1 个答案:

答案 0 :(得分:0)

您可以在序列化程序类

中定义validate_<field>方法
def validate_regexp(obj,regex):
    #your regex validation goes here
    #valid_regex = .....
    if not valid_regex:
          raise serializers.ValidationError("Regex invalid")

    return regex