2014-07-05 1 views
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="%/:=&?~#+!$,;'@()*[]") 

을하지만 :

나는 내 시리얼에 다음과 같은 해결하기 위해 노력했다.

해결 방법이 있습니까?

+0

'% 3D' 그래서,'='로 항상 있는지 확인합니다 https://docs.djangoproject.com/en/dev/ref/utils/#django.utils.text.slugify

렌더링 될 때 URL은 적절하고 완전히 해독됩니다. – famousgarkin

+0

나는 여기에 설명 된대로 ** urlquote **와 ** iri_to_uri **를 시도하고 사용해야한다고 생각한다. (https://docs.djangoproject.com/en/dev/ref/unicode/#taking-care-in -get-absolute-url). 그게 작동하는지 알려주세요. – AdelaN

+0

아마도 도움이 될 것입니다. http://blog.lunatech.com/2009/02/03/what-every-web-developer-must-know-about-url-encoding –

답변

0

당신은 당신이 "slugify"에서 원하는 문자열을 포장 수 : 문자열이 "안전 URL"분명히 그것은 또한 변환