这个包允许您定制django rest框架序列化器i/o,以使现代前端框架满意。

drf-payload-customizer的Python项目详细描述


DRF有效载荷定制器

LicenseContributing3yourminD-CareersStars

这个包允许您定制您的django-rest-framework序列化器I/O,以使现代前端框架满意。 支持以下修改:

  1. 转换:将api输出中的所有keys转换为camelCase。阿尔索 在接收到api上的输入时,将所有输入转换为snake_case
  2. translation:重命名api架构中的key。(两者都适用 方向)。
  3. nullify/balankify:在输出方向和 反之亦然。

我们引入3个独立的Mixins,您可以将APIView子类化。 从到达到1-3。它们是:

  1. PayloadTransformationMixin:执行上面的转换(1)。有一个 可设置的可选参数PAYLOAD_TRANSFORM_NESTED(请参阅测试) 在Serializer.Meta类中True递归转换所有嵌套 字典。此功能仅在输出方向工作。
  2. PayloadTranslationMixin:执行上面的翻译(2)。您可以指定 在Serializer.Meta中使用field_mappingsdict的自定义映射 上课。
  3. PayloadNoNullOrNoneMixin:执行上面的nullify/blankify(3)。

要求

mixin要求您具有以下依赖项:

djangorestframework==3.8.2

我们确信它可以与django rest框架的其他版本一起工作。 也。但是,您需要Django==2.1.2来运行单元测试。

在项目中使用它

你可以在你的项目中使用这三个混合器 我们的^ {CD20}}混音。混合蛋白 执行上面列出的(1-3)修改。以下是它的实现方法:

class PayloadConverterMixin(PayloadTransformationMixin,
                            PayloadTranslationMixin,
                            PayloadNoNullOrNoneMixin):
    """
    Use this mixin in all of our Serializers, to convert the JSON into a
    format that is easier consumed by modern front-ends.
    """

    def to_representation(self, instance):
        return super().to_representation(instance)

    def to_internal_value(self, camel_cased):
        return super().to_internal_value(camel_cased)

现在,用PayloadConverterMixin对您的APIViews进行子类划分,如下所示:

from drf_payload_customizer.mixins import PayloadConverterMixin

class CustomTestModelSerializer(PayloadConverterMixin, ModelSerializer):
    class Meta:
        model = TestModel
        fields = ('parama', 'param_b',)
        PAYLOAD_TRANSFORM_NESTED = True
        # The mapping is the snake_case of your expected o/p
        field_mappings = {
            'parama': 'param_a' 
        }
        
# Now your serializer would output: 
test_serializer = CustomTestModelSerializer(obj)
JSONRenderer().render(test_serializer.data)
> {'paramA': '', 'paramB': None}

# Your serializer also admits input in the same format: 
content = json.dumps({'paramA': 'testA', 'paramB': 3}).encode()
stream = BytesIO(content)
data = JSONParser().parse(stream)
serializer = CustomTestModelSerializer(data=data)
self.assertTrue(serializer.is_valid())
> True

运行测试

cd drf_payload_customizer
# Make sure you change to a virutal environment according to your project setup
python setup.py install 
pip install -r requirements.txt 
cd tests/test_app/ 
python manage.py test

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Jsonify使用Jackson来定义嵌套对象   在Swing中禁用java图形调试   java Selenium Webdriver拖放在Jenkins上不起作用   java我对一个显示器的问题有一个非常不切实际的询问   java增强的“for”循环导致ArrayIndexOutOfBoundsException   ArrayAdapter适用于Java中的安卓编程,字符串数组   linux在Ubuntu上通过PulseAudio播放Java音频文件时出错   java在Spring应用程序中加载内部(类路径)和外部属性文件   java使用Maven连接到mySQL   Java应用程序的设计   websocket在电报api java中与dc的连接   java XMLStreamException,因为xml中的(&N)   java从控制台输出到JTextArea   Java导出文本文件   java实现parseInt方法   java为什么servlet容器会同步对特定资源/servlet的多个请求的访问?   循环中的Java“while”变量   用Java编程一个国际象棋游戏,gameOver布尔不起作用   java如何获得真正的JPanel大小?