DRF 在自我描述 API 中呈现超链接 URL 的方式似乎存在错误。显示时,DRF 正在将我的 S3 (django-storage) url 签名从 %2B 转换为“+”。但是format=json
没有这个翻译问题。
例如:
这是序列化器:
class CatalogueSerializer(serializers.HyperlinkedModelSerializer):
image = HyperlinkedImageField()
class Meta:
model = CatalogueItem
fields = ('url', 'name', 'image')
超链接图像字段:
class HyperlinkedImageField(serializers.ImageField):
def to_native(self, value):
request = self.context.get('request', None)
if value:
url = request.build_absolute_uri(value.url)
else:
url = 'null'
return url
URL 值正确,签名正确。但是,当 DRF 呈现 URL 时,它会从此更改签名......
好的
Signature=lMG4NLl51IHeXWCU%2B2GPBN1vU30%3D&Expires=1404604768
对此:
坏的
Signature=lMG4NLl51IHeXWCU+2GPBN1vU30=&Expires=1404604768
唯一的区别是%2B to '+'
.
我试图在我的序列化程序中解决以下问题:
def transform_image(self, obj, value):
return urllib.quote(value, safe="%/:=&?~#+!$,;'@()*[]")
但是,无论如何,它总是将 %2B 转换为 '+'。
有解决办法吗?