如何避免 Django Forms 和 Django Rest Framework Serializers 中的代码重复?

Posted

技术标签:

【中文标题】如何避免 Django Forms 和 Django Rest Framework Serializers 中的代码重复?【英文标题】:How to avoid code duplication in Django Forms and Django Rest Framework Serializers? 【发布时间】:2016-02-03 22:07:46 【问题描述】:

我从事一个 Django 1.8 项目,该项目必须同时公开传统的 html 前端和 JSON API。对于 API,我们使用 Django Rest Framework。在使用过 Rails 之后,我尝试遵循“胖模型”模式,并在模型中和表单之外尽可能多地进行验证。但是,有时必须在表单级别进行自定义验证。

示例:我有一个 Image 模型,它有一个 GenericForeignKey 字段,并且可能与系统中的任何模型相关。这些图像也有一个profile(例如“徽标”、“横幅”等)。根据配置文件,我需要进行不同的验证。原则上我只是为不同的配置文件创建不同的表单类,但也应该可以通过 API 将图像分配给对象。如何避免在表单和序列化程序中重复此自定义验证?

【问题讨论】:

这个怎么样? django-rest-framework.org/api-guide/renderers/#htmlformrenderer 我在这里找到了 ***.com/questions/30047855/django-rest-framework-form 可能有用 【参考方案1】:

我通常在我的序列化程序中这样做:

def validate(self, attrs):
    # custom serializer validation

    self.myform = self.myform_class(
        data=attrs
    

    if not self.myform.is_valid():
        raise serializers.ValidationError()
    return attrs

这样我可以重用表单验证并同时添加自定义序列化程序验证 + 使用两个内置验证器。

让我知道这是否有帮助,如果没有帮助,也许您可​​以抛出一些代码 sn-ps,以便我们找出您的确切情况。

【讨论】:

以上是关于如何避免 Django Forms 和 Django Rest Framework Serializers 中的代码重复?的主要内容,如果未能解决你的问题,请参考以下文章

Django表单——概述

ReactJS 和 django-forms

Django

Django框架-- Djang与Ajax

Djang DJANGO_SETTINGS_MODULE

创建djang+vue项目