DRF在自我描述API中呈现超链接网址的方式似乎存在错误。 DRF正在将我的URL(django-storage)的url签名从%2B翻译为' +'在显示时。但是format=json
没有此翻译问题。
例如:
这是Serializer:
class CatalogueSerializer(serializers.HyperlinkedModelSerializer):
image = HyperlinkedImageField()
class Meta:
model = CatalogueItem
fields = ('url', 'name', 'image')
HyperlinkedImageField:
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
网址的值是正确的,签名是正确的。但是,当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翻译为' +'。
有解决方法吗?
答案 0 :(得分:0)
你可以包装你想要的任何字符串" slugify":https://docs.djangoproject.com/en/dev/ref/utils/#django.utils.text.slugify
确保字符串始终为" URL安全"