"Django rest_framework中处理无效数据的序列化器自定义字段"

2024-10-02 20:37:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在扩展Django rest_框架的serializers.WritableField,以便(毫不奇怪)将数据转换为更前端友好的格式。我的代码如下:

class FooField(serializers.WritableField):
    def from_native(self, value):
        return #makeFoo

    def to_native(self, value):
        return #undoFoo

然后我有一个序列化程序,它看起来像这样:

^{pr2}$

问题是,from native在validate_之前被调用,而原始数据甚至没有被传递给validate_字段,所以如果垃圾数据被传入(在我的特定情况下,可能是任何不是有效日期的数据),而不是validate_捕捉它的字段,我将返回500个错误。我考虑过这样的事情:

def from_native(self, value):
    try:
        return #makeFoo
    except:
        return #a flag to show that the data wasn't valid

但这看起来像是一种处理问题的老套方法,特别是因为Django rest_框架通常非常干净。有没有人知道一种处理垃圾数据的方法,可以很好地与from native一起使用?在


Tags: to数据djangofromself框架restreturn
1条回答
网友
1楼 · 发布于 2024-10-02 20:37:40

实际上,如果您仔细研究一下DRF代码,就会发现许多扩展WritableField的字段都是这样验证的。以DecimalField为例:

class DecimalField(WritableField):

    def from_native(self, value):
        ...
        try:
            value = Decimal(value)
        except DecimalException:
            raise ValidationError(self.error_messages['invalid'])
        return value

相关问题 更多 >