2
DRF가 자체 설명 API에 하이퍼 링크 된 URL을 렌더링하는 방식에 버그가있는 것 같습니다. DRF는 % 2B의 S3 (django-storage)에 대한 내 URL 서명을 표시 할 때 '+'로 변환합니다. 그러나 format=json
에는이 번역 문제가 없습니다. 예를 들어% 2B에서 '+'로 내 URL 서명을 번역하는 DRF
는 :
class CatalogueSerializer(serializers.HyperlinkedModelSerializer):
image = HyperlinkedImageField()
class Meta:
model = CatalogueItem
fields = ('url', 'name', 'image')
HyperlinkedImageField :
이것은 시리얼있는 URL의
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 '+'
의 번역입니다. 항상 '+'로 % 2B의 번역을하지, 아무리
def transform_image(self, obj, value):
return urllib.quote(value, safe="%/:=&?~#+!$,;'@()*[]")
을하지만 :
나는 내 시리얼에 다음과 같은 해결하기 위해 노력했다.
해결 방법이 있습니까?
'% 3D' 그래서,'='로 항상 있는지 확인합니다 https://docs.djangoproject.com/en/dev/ref/utils/#django.utils.text.slugify
렌더링 될 때 URL은 적절하고 완전히 해독됩니다. – famousgarkin
나는 여기에 설명 된대로 ** urlquote **와 ** iri_to_uri **를 시도하고 사용해야한다고 생각한다. (https://docs.djangoproject.com/en/dev/ref/unicode/#taking-care-in -get-absolute-url). 그게 작동하는지 알려주세요. – AdelaN
아마도 도움이 될 것입니다. http://blog.lunatech.com/2009/02/03/what-every-web-developer-must-know-about-url-encoding –