支持django rest framework序列化器中的base64编码的二进制数据
项目描述
drf-base64-binaryfield
功能
此软件包提供了一个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+
安装
您可以通过pip从PyPI安装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是免费和开源软件。
问题
如果您遇到任何问题,请提交问题,并附带详细描述。
鸣谢
本项目基于@OmenApps的Cookiecutter Django Package模板创建。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装软件包的信息。
源代码发行版
构建发行版
哈希值 for drf_base64_binaryfield-1.1.0-py3-none-any.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0e4e6f55d5430987782612b8f2605e9ca4d1bf9c54c73f27d66853851c45980b |
|
MD5 | 467afaec5bc82fc1825846c43bbc4543 |
|
BLAKE2b-256 | 8acf602ce81bf3f42bb66accf00d099b2c4e0a01f5727bdbcd6729cc33e8d2c2 |