跳转到主要内容

支持django rest framework序列化器中的base64编码的二进制数据

项目描述

drf-base64-binaryfield

PyPI Status Python Version License

Tests Codecov

pre-commit Black

功能

此软件包提供了一个Base64BinaryField,用于与Django REST Framework序列化器一起使用。

它允许您

  • 将二进制数据序列化为base64字符串,用于JSON响应
  • 将base64字符串反序列化为二进制数据
  • 可选地使用URL安全的base64编码(用-_替换+/
  • 验证二进制数据的长度

为什么? 因为JSON不支持二进制数据,而base64是表示JSON中二进制数据的一种常用方式。

注意事项

Base64编码在空间效率上并不高。

如果您需要经常发送大量的二进制数据,您可能希望考虑使用比JSON更高效的序列化格式,例如MessagePack。Django REST Framework有一个MessagePack序列化器:django-rest-framework-msgpack

如果您偶尔需要发送二进制数据,则base64编码可能适合您的使用情况。这个包可能适合您。

要求

  • Python 3.9+
  • Django 3.2+
  • Django REST Framework 3.14+

安装

您可以通过pipPyPI安装drf-base64-binaryfield

$ pip install drf-base64-binaryfield

用法

在这个例子中,我们需要向客户端发送一个由原始字节组成的加密挑战。如果有一种方法可以将这些数据作为JSON响应的一部分发送,那就方便多了。

我们可以使用这个包提供的Base64BinaryField将二进制数据序列化为base64字符串,然后将其作为JSON响应的一部分发送。

from rest_framework import serializers
from drf_base64_binaryfield.fields import Base64BinaryField

class ChallengerSerializer(serializers.Serializer):
    # This field accepts a Python bytes object and serializes it into a base64 string. Or it can deserialize a base64 string back into a bytes object.
    challenge = Base64BinaryField()

serializer = ChallengerSerializer(instance={'challenge': b'\x00\x01\x02\x03'})
print(serializer.data)
# {'challenge': 'AAECAw=='}

Web安全编码

如果您想使用Web安全的base64编码,可以将url_safe=True设置为True

class CryptographicChallengeSerializer(serializers.Serializer):
    challenge = Base64BinaryField(url_safe=True)

二进制数据大小验证

这个包也支持验证解码后二进制数据的大小

class ExampleSerializer(serializers.Serializer):
    # This field will only accept binary data that is between 16 and 32 bytes long
    example_binary = Base64BinaryField(min_size=16, max_size=32)

扩展Base64BinaryField

您可以扩展Base64BinaryField来创建自己的自定义字段。例如,您可能想要将二进制数据解包为不同的格式。

import struct

class CustomBinaryField(Base64BinaryField):
    def to_internal_value(self, data):
        binary_data = super().to_internal_value(data)

        # Do something with the binary data...

        # For example: unpack it as a little-endian, 32-bit unsigned integer
        return struct.unpack('<I', binary_data)[0]

贡献

欢迎贡献。要了解更多信息,请参阅贡献指南

许可证

MIT许可证下分发,drf-base64-binaryfield是免费和开源软件。

问题

如果您遇到任何问题,请提交问题,并附带详细描述。

鸣谢

本项目基于@OmenAppsCookiecutter Django Package模板创建。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装软件包的信息。

源代码发行版

drf_base64_binaryfield-1.1.0.tar.gz (7.2 kB 查看哈希值)

上传时间 源代码

构建发行版

drf_base64_binaryfield-1.1.0-py3-none-any.whl (8.6 kB 查看哈希值)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面