Django-tastypie: prepend_urlsλŠ” 인증을 μš°νšŒν•©λ‹ˆλ‹€.

에 λ§Œλ“  2012λ…„ 08μ›” 25일  Β·  8μ½”λ©˜νŠΈ  Β·  좜처: django-tastypie/django-tastypie

λ‚΄κ°€ μ—¬κΈ°μ„œν•˜λŠ” 일이 μ˜λ„μ μ΄κ±°λ‚˜ μ™„μ „νžˆ 잘λͺ»ν•œ 경우 μ‚¬κ³Όν•˜μ§€λ§Œ prepend_urlsλ₯Ό μ‚¬μš©ν•˜μ—¬ 쀑첩 된 λ¦¬μ†ŒμŠ€λ₯Ό λ§Œλ“œλŠ” 것은 λΆ€λͺ¨ 및 μžμ‹ λ¦¬μ†ŒμŠ€ λͺ¨λ‘μ— λŒ€ν•œ 인증을 μš°νšŒν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. μ €λŠ” Cookbookμ—μ„œμ™€ μœ μ‚¬ν•œ 예제λ₯Ό λ§Œλ“€κ³  ApiKey 인증을 μ‚¬μš©ν•˜μ—¬ μžμ‹ λ¦¬μ†ŒμŠ€λ₯Ό λ§Œλ“€μ—ˆμœΌλ©° μ˜¬λ°”λ₯Έ 헀더λ₯Ό μ „λ‹¬ν•˜μ§€ μ•Šμ•„λ„ μ•‘μ„ΈμŠ€ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μƒμœ„ λ¦¬μ†ŒμŠ€μ—λŠ” ApiKey 인증도 ν•„μš”ν•©λ‹ˆλ‹€.

인증 헀더없이 λ‚΄κ°€ λ³΄λŠ” 것은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

GET / api / v1 / article-μ˜ˆμƒλŒ€λ‘œ 401
GET / api / v1 / article / 1 /-μ˜ˆμƒλŒ€λ‘œ 401
GET / api / v1 / article / 1 / tags-νƒœκ·Έ λͺ©λ‘μ΄ 예기치 μ•Šκ²Œ λ°˜ν™˜λ©λ‹ˆλ‹€.

λ‚˜μ—κ²Œ 이것은 λΆ€μ •ν™•ν•˜κ³  ν™•μ‹€νžˆ λ‚΄κ°€ κΈ°λŒ€ν•˜λŠ” κ²ƒκ³ΌλŠ” λ‹€λ₯Έ 것 κ°™μŠ΅λ‹ˆλ‹€.

bug documentation unconfirmed

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

λ‚˜λŠ” 아직 이것을 μ‹œλ„ν•˜μ§€ μ•Šμ•˜μ§€λ§Œ 당신이 λ§ν•œλŒ€λ‘œ μž‘λ™ν•œλ‹€λ©΄ ν™•μ‹€νžˆ λ‚΄κ°€ μ·¨ν•  μˆ˜μžˆλŠ” μ ‘κ·Ό 방식이 될 κ²ƒμž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 여기에 μ œκ°€λ³΄κ³  ν•œ 것은 Tastypie의 문제라고 μƒκ°ν•©λ‹ˆλ‹€. 기본적으둜 μš”λ¦¬ 책에 μ„€λͺ… 된 κΈ°μˆ μ„ μ‚¬μš©ν•˜λ©΄ κ°œλ°œμžκ°€ μ•Œμ§€λ„ λͺ»ν•˜λŠ” 사이에 μ™„μ „νžˆ 우회 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λͺ¨λ“  8 λŒ“κΈ€

λ‚΄ κ²½ν—˜μƒ override_urls ν•¨μˆ˜ 만 μ‚¬μš©ν•˜κ³  μžμ‹  만의 λ””μŠ€νŒ¨μΉ˜ μžμ‹ λ©”μ„œλ“œλ₯Ό λ§Œλ“œλŠ” 것이 훨씬 쉽고 μš°μ•„ν•©λ‹ˆλ‹€. μ½”λ“œκ°€ 적고 λͺ¨λ“  ν•˜μœ„ λ¦¬μ†ŒμŠ€ 메타 속성 (인증 포함)을 μ€€μˆ˜ν•œ λ‹€μŒ 일뢀λ₯Ό μ€€μˆ˜ν•©λ‹ˆλ‹€.

예:

    def override_urls(self):
        return [
            url(r'^(?P<resource_name>%s)/(?P<pk>\w[\w/-]*)/tags%s$' % (self._meta.resource_name, trailing_slash()), self.wrap_view('dispatch_tags'), name='api_article_tags'),
        ]

    def dispatch_tags(self, request, **kwargs):
        return ArticleTagResource().dispatch('list', request, **kwargs)

μ΄λ ‡κ²Œν•˜λ©΄ 기본적으둜 ArticleTagResourceκ°€ λͺ©λ‘λ³΄κΈ°λ‘œ μš”μ²­ 된 κ²ƒμ²˜λŸΌ / article / 1 / tags /의 전체 μš”μ²­μ„ 처리 ν•  수 β€‹β€‹μžˆμŠ΅λ‹ˆλ‹€ ( "list"λ₯Ό "detail"둜 λ³€κ²½ν•˜μ—¬ μ„ΈλΆ€λ³΄κΈ°μ²˜λŸΌ λ™μž‘ν•˜λ„λ‘ λ³€κ²½).

λ‚˜λŠ” 아직 이것을 μ‹œλ„ν•˜μ§€ μ•Šμ•˜μ§€λ§Œ 당신이 λ§ν•œλŒ€λ‘œ μž‘λ™ν•œλ‹€λ©΄ ν™•μ‹€νžˆ λ‚΄κ°€ μ·¨ν•  μˆ˜μžˆλŠ” μ ‘κ·Ό 방식이 될 κ²ƒμž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 여기에 μ œκ°€λ³΄κ³  ν•œ 것은 Tastypie의 문제라고 μƒκ°ν•©λ‹ˆλ‹€. 기본적으둜 μš”λ¦¬ 책에 μ„€λͺ… 된 κΈ°μˆ μ„ μ‚¬μš©ν•˜λ©΄ κ°œλ°œμžκ°€ μ•Œμ§€λ„ λͺ»ν•˜λŠ” 사이에 μ™„μ „νžˆ 우회 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” 같은 λ¬Έμ œκ°€ μžˆμ—ˆκ³  joeribekker의 방법과 λ™μΌν•œ κ²°κ³Όλ₯Ό μ‹œλ„ν–ˆλŠ”λ° μ–Έμ œ 이것이 μˆ˜μ • 될지 μƒκ°ν•˜μ‹­λ‹ˆκΉŒ? λ˜λŠ” ν•΄κ²° 방법?

λ‚˜λŠ” Resource.dispatch() 을 μ‚¬μš©ν•˜λŠ” 아이디어λ₯Ό μ’‹μ•„ν•˜μ§€λ§Œ, μ„ΈλΆ€ 사항 λ˜λŠ” λͺ©λ‘λ³΄κΈ°λ³΄λ‹€ 더 λ³΅μž‘ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λ €λ©΄ μ‹€μ œλ‘œ μ‹€ν–‰ κ°€λŠ₯ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ œκ°€ μƒκ°ν•˜κ³ μžˆλŠ” ν•œ 가지 해결책은 Resource.dispatch() μ—μ„œ Resource.wrap_view() 둜 더 무거운 λ¦¬ν”„νŒ…μ„ μ΄λ™ν•˜μ—¬ wrap_view() μ‚¬μš©ν•˜μ—¬ λͺ¨λ“  λ·°λ₯Ό μž„μ˜λ‘œ λž˜ν•‘ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 인증, κΆŒν•œ λΆ€μ—¬ 및 μ œν•œ κ·œμΉ™ (μ•„λž˜μ— μžμ„Ένžˆ μ„€λͺ…λ˜μ–΄ μžˆμ§€λ§Œ λ©”μ„œλ“œ 검사도 κ°€λŠ₯함).

μŠ€λ‘œν‹€ 링과 κ΄€λ ¨ν•˜μ—¬μ΄ λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. ν˜„μž¬ ν•΄κ²° 방법은 μ‚¬μš©μž μ •μ˜ λ·°λ₯Ό @apply_throttle λž˜ν•‘ν•˜λŠ” λ°μ½”λ ˆμ΄ν„°λ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. λ°μ½”λ ˆμ΄ν„°λŠ” Resource.throttle_check() 및 Resource.log_throttled_access() μ—μ„œ μ½”λ“œλ₯Ό λ‹€μ†Œκ°„ λ³΅μ‚¬ν•©λ‹ˆλ‹€.

μž¬μ •μ˜λ₯Ό μ‚¬μš©ν•˜λ €λŠ” 개발자의 μ˜λ„κ°€ λ‹€μŒκ³Ό 같은 경우, tastypieκ°€ 더 μ™„μ „ν•œ wrap_view() (μœ„μ˜ λ‚΄μš© 포함) _and_ λ°μ½”λ ˆμ΄ν„° (λ˜λŠ” μ΄λŸ¬ν•œ 것듀을 μ„ νƒμ μœΌλ‘œ μ μš©ν•˜λŠ” λ‹€λ₯Έ 방법)λ₯Ό λͺ¨λ‘ κ°–λŠ” 것이 κ°€μž₯ 효과적 일 수 μžˆμŠ΅λ‹ˆλ‹€

μ΄λŸ¬ν•œ μ†”λ£¨μ…˜μ— λŒ€ν•œ λͺ¨λ“  μ‚¬λžŒλ“€μ˜ 생각은 λ¬΄μ—‡μž…λ‹ˆκΉŒ? 이 μž‘μ—…μ— ν™•μ‹€νžˆ 관심이 μžˆμ§€λ§Œ μ§€κΈˆ λ‹Ήμž₯은 μ‹œκ°„μ΄ λ„‰λ„‰ν•©λ‹ˆλ‹€.

λ‚˜λŠ” μ΄κ²ƒμœΌλ‘œ 어렀움을 κ²ͺκ³  μžˆμ§€λ§Œ SOλ₯Ό λ°œκ²¬ν•˜κ³  λŒ€λ‹΅ν–ˆμŠ΅λ‹ˆλ‹€.
http://stackoverflow.com/questions/11827368/tastypie-override-urls-ignores-authentication-and-authorization

이것은 였래된 μŠ€λ ˆλ“œμ΄μ§€λ§Œ λ¬Έμ œκ°€ μ—¬μ „νžˆ μ—΄λ € 있고 λ‚΄ κ²€μƒ‰μ—μ„œ 높은 μˆœμœ„λ₯Ό μ°¨μ§€ν•˜κΈ° λ•Œλ¬Έμ— ...
ν•Έλ“€λŸ¬μ˜ 첫 번째 μ€„μ—μžˆλŠ” self.is_authenticated(request) κ°€ 문제λ₯Ό μ²˜λ¦¬ν•©λ‹ˆλ‹€. tastypie 0.11 및 0.12둜 ν…ŒμŠ€νŠΈλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

쿑뢁은 이제 prepend_urls () λ‚΄λΆ€μ—μ„œ self.wrap_view ()λ₯Ό μ‚¬μš©ν•˜μ—¬μ΄ 문제λ₯Ό μ’…κ²° ν•  것을 ꢌμž₯ν•©λ‹ˆλ‹€.

wrap_view 이벀트, ν•Έλ“€λŸ¬ λ©”μ„œλ“œμ— self.is_authenticated(request) ν–ˆμŠ΅λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰