这个包允许您定制django rest框架序列化器i/o,以使现代前端框架满意。
drf-payload-customizer的Python项目详细描述
DRF有效载荷定制器
这个包允许您定制您的django-rest-framework
序列化器I/O,以使现代前端框架满意。
支持以下修改:
- 转换:将api输出中的所有
keys
转换为camelCase
。阿尔索 在接收到api上的输入时,将所有输入转换为snake_case
。 - translation:重命名api架构中的
key
。(两者都适用 方向)。 - nullify/balankify:在输出方向和 反之亦然。
我们引入3个独立的Mixins
,您可以将APIView
子类化。
从到达到1-3。它们是:
PayloadTransformationMixin
:执行上面的转换(1)。有一个 可设置的可选参数PAYLOAD_TRANSFORM_NESTED
(请参阅测试) 在Serializer.Meta
类中True
递归转换所有嵌套 字典。此功能仅在输出方向工作。PayloadTranslationMixin
:执行上面的翻译(2)。您可以指定 在Serializer.Meta
中使用field_mappings
dict的自定义映射 上课。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