1

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 转换为 '+'。

有解决办法吗?

4

1 回答 1

0

您可以在“slugify”中包装您想要的任何字符串:https ://docs.djangoproject.com/en/dev/ref/utils/#django.utils.text.slugify

这可确保字符串始终是“URL 安全的”

于 2014-07-15T18:47:02.940 回答