DRF将我的网址签名从%2B翻译为' +'

时间:2014-07-05 23:12:52

标签: python django django-rest-framework django-storage

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翻译为' +'。

有解决方法吗?

1 个答案:

答案 0 :(得分:0)

你可以包装你想要的任何字符串" slugify":https://docs.djangoproject.com/en/dev/ref/utils/#django.utils.text.slugify

确保字符串始终为" URL安全"