Django-tastypie: 훨씬 더 μ•ˆμ „ν•œ 기본값이 ν•„μš”ν•©λ‹ˆλ‹€.`DjangoAuthorization`은 λͺ¨λ“  λͺ¨λΈ 객체에 λŒ€ν•œ`읽기`μ•‘μ„ΈμŠ€λ₯Ό ν—ˆμš©ν•˜μ§€ μ•Šμ•„μ•Όν•©λ‹ˆλ‹€.

에 λ§Œλ“  2016λ…„ 01μ›” 06일  Β·  10μ½”λ©˜νŠΈ  Β·  좜처: django-tastypie/django-tastypie

tastypie/authorization.py (2016 λ…„ 1/4 μ›”μ˜ λ§ˆμŠ€ν„° 브랜치 μ•½ 133 개)λ₯Ό 보면 κΈ°λ³Έκ°’ 인 read_list 및 read_details user.has_perm() 검사λ₯Ό μš°νšŒν•©λ‹ˆλ‹€. μ΄λŠ” 맀우 μ•ˆμ „ν•˜μ§€ μ•ŠμœΌλ©° 잘λͺ»λœ κΈ°λ³Έκ°’μž…λ‹ˆλ‹€.

Django의 κ΄€λ¦¬μž 기본값은 틀에 얽맀이지 μ•ŠμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ μ–΄λ–»κ²Œ 잘λͺ» ν•΄μ„λ˜μ—ˆλŠ”μ§€ μ•Œ μˆ˜μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

https://docs.djangoproject.com/es/1.9/topics/auth/default/#permissions -and-authorization

The Django admin site uses permissions as follows:
*   ... 
* Access to view the change list, view the β€œchange” form and change an object is limited to users with the β€œchange” permission for that type of object.

기본적으둜 "change_xyz"λŠ” "읽기"및 "μ—…λ°μ΄νŠΈ"λͺ¨λ‘μ— λŒ€ν•œ κΆŒν•œ μ½”λ“œμž…λ‹ˆλ‹€. 더 λ‚˜μ€ 기본값은 Django의 κ΄€λ¦¬μžλ₯Ό λ”°λ₯΄λŠ” κ²ƒμž…λ‹ˆλ‹€.

diff --git a/tastypie/authorization.py b/tastypie/authorization.py
index 1d6f5aa..44b2d56 100644
--- a/tastypie/authorization.py
+++ b/tastypie/authorization.py
@@ -151,22 +151,14 @@ class DjangoAuthorization(Authorization):
         return model_klass

     def read_list(self, object_list, bundle):
-        klass = self.base_checks(bundle.request, object_list.model)
-
-        if klass is False:
-            return []
+        # By default, follows `ModelAdmin` "convention" to use `app.change_model`
+        # `django.contrib.auth.models.Permission` for both viewing and updating.
+        # https://docs.djangoproject.com/es/1.9/topics/auth/default/#permissions-and-authorization

-        # GET-style methods are always allowed.
-        return object_list
+        return self.update_list(object_list, bundle)

     def read_detail(self, object_list, bundle):
-        klass = self.base_checks(bundle.request, bundle.obj.__class__)
-
-        if klass is False:
-            raise Unauthorized("You are not allowed to access that resource.")
-
-        # GET-style methods are always allowed.
-        return True
+        return self.update_detail(object_list, bundle)

bug immediate

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

생산을 μ€‘λ‹¨ν•˜λŠ” 변경을 ν•  λ•Œ μ΅œμ†Œν•œ 버전 관리에 반영 ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?
Tastypie의 x.y.z 버전 κ΄€λ¦¬λŠ” λŒ€λΆ€λΆ„μ˜ μ‚¬λžŒλ“€μ΄ κΈ°λŒ€ν•˜λŠ” 것과 맀우 μœ μ‚¬ν•©λ‹ˆλ‹€. 일반적으둜 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

버전 번호 MAJOR.MINOR.PATCHκ°€ 주어지면 λ‹€μŒμ„ μ¦κ°€μ‹œν‚΅λ‹ˆλ‹€.
..
이전 버전과 ν˜Έν™˜λ˜λŠ” 버그 μˆ˜μ •μ„ ν•  λ•Œ 패치 버전.

μƒˆλ‘œμš΄ ν”„λ‘œλ•μ…˜ 배포 쀑에 이것을 μΆ”μ ν•˜λŠ” 데 맀우 λΆˆνŽΈν•œ μ‹œκ°„μ„ λ³΄λƒˆμŠ΅λ‹ˆλ‹€.

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

λ‚˜λŠ” 이것이 이미 ν•©λ³‘λ˜μ–΄ κ°μ‚¬ν•˜μ§€λ§Œ μ—¬μ „νžˆ λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. μƒˆ μš”μ²­μ„ μ—΄κΈ° 전에 λ‹€μŒκ³Ό 같은 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€.

이 λ³€κ²½ 사항은 λΆˆν–‰νžˆλ„ κΈ°μ‘΄ μ½”λ“œλ₯Ό μ†μƒμ‹œμΌœ 이전 버전과 ν˜Έν™˜λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ (μ΄μ „μ—λŠ” λͺ¨λ“  GET μš”μ²­μ΄ DjangoAuthorization을 톡과 ν–ˆμŒ). μ½”λ“œλ₯Ό μˆ˜μ •ν•˜κΈ°μœ„ν•œ μœ μΌν•œ 두 가지 μ˜΅μ…˜μ€ λͺ¨λ“  μ‚¬μš©μžμ—κ²Œ 'λ³€κ²½'κΆŒν•œμ„ λΆ€μ—¬ν•˜κ±°λ‚˜ (λ‚˜μœ) 읽기 μž‘μ—…μ˜ μ‚¬μš©μž 지정 κ΅¬ν˜„μ„ μœ„ν•΄ DjangoAuthorization을 ν•˜μœ„ 클래슀둜 λ§Œλ“œλŠ” κ²ƒμž…λ‹ˆλ‹€ (잠재적으둜 λ§Žμ€ μž‘μ—…). 이것은 μ˜λ„ 된 것이 μ—ˆμŠ΅λ‹ˆκΉŒ?

μž₯κ³  κ΄€λ¦¬μž μ»¨ν…μŠ€νŠΈμ—μ„œμ΄ μ΄μœ μ— λŒ€ν•΄ κ°μ‚¬ν•˜μ§€λ§Œ API μ»¨ν…μŠ€νŠΈμ—μ„œ 'λ³€κ²½'에 ν•΄λ‹Ήν•˜λŠ” κ²ƒμœΌλ‘œ '읽기'λ₯Ό μ„€μ •ν•˜λŠ” 것이 μ˜ˆμƒλ˜λŠ” λ™μž‘μ΄ μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— 합리적인 κΈ°λ³Έ 가정이라고 μƒκ°ν•©λ‹ˆλ‹€. κ²°κ΅­ GET이 DjangoAuthorizationκ³Ό ν•¨κ»˜ ν—ˆμš© 된 λ©”μ„œλ“œ 인 경우 μ‚¬μš©μžμ—κ²Œ change κΆŒν•œμ΄ μ—†λ‹€λŠ” 사싀에 따라 μ•‘μ„ΈμŠ€λ₯Ό κ±°λΆ€ν•˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?

λ‚˜λŠ” κ·Έκ°€ λ‹€μŒκ³Ό 같은 λŒ€μ²΄ κ΅¬ν˜„μ„ μ œμ•ˆν•©λ‹ˆλ‹€.

_for read_detail_

  • λͺ¨λΈμ— view κΆŒν•œμ΄μžˆλŠ” 경우 확인 (= ν•„μš”ν•œ μ‚¬μš©μžλ₯Όμœ„ν•œ κ°œμ„ )
  • view κΆŒν•œμ΄μ—†λŠ” 경우 항상 ν—ˆμš© (= 이전 버전과 ν˜Έν™˜ 됨)

_for read_list_

  • λͺ¨λΈμ— list κΆŒν•œμ΄μžˆλŠ” 경우 확인 (= ν•„μš”ν•œ μ‚¬μš©μžλ₯Όμœ„ν•œ κ°œμ„ )
  • list κΆŒν•œμ΄μ—†λŠ” 경우 항상 ν—ˆμš© (= 이전 버전과 ν˜Έν™˜ 됨)

이 λ°©λ²•μœΌλ‘œ tastypieλŠ” Django의 κΆŒν•œ κΈ°λ³Έκ°’κ³Ό ν˜Έν™˜λ˜λŠ” 기본값을 μΆ”κ°€ν•˜λŠ” λ™μ‹œμ— DjangoAuthorization의 μ‚¬μš©μž μ •μ˜ κ΅¬ν˜„μ„ μž‘μ„±ν•˜λŠ” 것보닀 ν•„μš”ν•œ μ‚¬λžŒλ“€μ—κ²Œλ³΄κΈ° 및 λͺ©λ‘ κΆŒν•œμ„ μΆ”κ°€ν•˜μ—¬ κ°œμ„  ν•  μˆ˜μžˆλŠ” μ‰¬μš΄ 경둜λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

μ΅œμ†Œν•œ κΈ°λ³Έ κΆŒν•œμ„ μ§€μ •ν•˜λŠ” 방법이 μžˆμ–΄μ•Όν•©λ‹ˆλ‹€.

DjangoAuthorization(read_permission='view', # applies to both list, detail if not spec'd
                    read_list_permission='view', # list only
                    read_detail_permission='view') # detail only
# while we're at it, why not add the other permissions too
DjangoAuthorization(change_permission='change',
                    delete_permission='delete',
                    add_permission='add', 
                    # ... add options as per above for each
                    # <action>_<level> permission where 
                    # action is `change,delete,add,read`,  level is `list,detail`)

@SeanHayes κ°€ κ²°μ •ν•˜λŠ” μ‚¬λžŒμ΄ 될 κ²ƒμž…λ‹ˆλ‹€.

λ‚΄ μ˜κ²¬μ€ 기본적으둜 읽기λ₯Ό ν—ˆμš©ν•˜λŠ” 것이 λ³΄μ•ˆ 문제라고 μƒκ°ν•©λ‹ˆλ‹€. ν”„λ‘œλ•μ…˜μ— 맀우 κ°€κΉŒμ›Œμ§€κΈ° μ „κΉŒμ§€λŠ” μ „ν˜€ μ˜ˆμƒν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€. 이 λ§₯λ½μ—μ„œ 이전 λ²„μ „κ³Όμ˜ ν˜Έν™˜μ„±μ„ κΉ¨λŠ” 것이 ν•„μš”ν•˜λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

κ·€ν•˜μ˜ μ œμ•ˆμ— 따라 κΈ°μ‘΄ μ½”λ“œμ— λŒ€ν•œ 맀개 λ³€μˆ˜ 전달을 DjangoAuthorization 둜 λ³€κ²½ν•΄μ•Όν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.이 경우 클래슀λ₯Ό λ‹€λ₯Έ κ²ƒμœΌλ‘œ ν˜ΈμΆœν•˜λŠ” 것이 더 λͺ…ν™•ν•˜λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

read_permission='view' μΌ€μ΄μŠ€λ₯Ό κ³ λ €ν•˜μ‹­μ‹œμ˜€. 여기에 μ •ν™•νžˆ ν•„μš”ν•œ κ²ƒμ΄μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 그것이 μ™œ 덜 μ΅œμ μΈμ§€ λͺ¨λ₯΄κ² λ‹€.

class ModifiedDjangoAuthorization(DjangoAuthorization):
    READ_PERM_CODE = 'view'

λ‹€λ₯Έ 것을 λ³€κ²½ν•˜λ €λ©΄ λ©”μ„œλ“œλ₯Ό μž¬μ •μ˜ν•˜μ‹­μ‹œμ˜€. 변경은 μ‹€μ œλ‘œ 맀우 μ‰½κ²Œ ν•  수 μžˆλ„λ‘ μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

class ModifiedDjangoAuthorization(DjangoAuthorization):
    def delete_list(self, object_list, bundle):
        return self.perm_list_checks(bundle.request, 'del', object_list)

    def delete_detail(self, object_list, bundle):
        return self.perm_obj_checks(bundle.request, 'del', bundle.obj)

λ³€κ²½ 사항은 μˆ˜μ •μ„ 염두에두고 μ‰½κ²Œ λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. init 맀개 λ³€μˆ˜λ‘œ μˆ˜ν–‰ν•΄μ•Όν•œλ‹€κ³  생각할 ν•„μš”λŠ” μ—†μŠ΅λ‹ˆλ‹€.

기본적으둜 읽기λ₯Ό ν—ˆμš©ν•˜λŠ” 것이 λ³΄μ•ˆ 문제라고 μƒκ°ν•©λ‹ˆλ‹€.

λ‚˜λŠ” μ›λž˜ 문제의 μ˜λ„μ— μ˜λ¬Έμ„ μ œκΈ°ν•˜λŠ” 것이 μ•„λ‹™λ‹ˆλ‹€. 병합 된 κ΅¬ν˜„μ΄ μ‚¬λžŒλ“€μ˜ κΈ°μ‘΄ μ½”λ“œ 및 가정을 λ¬΄λ„ˆ λœ¨λ¦¬λŠ” 것과 되돌릴 μˆ˜μžˆλŠ” 효율적인 μ˜΅μ…˜μ΄ μ—†λ‹€λŠ” 점을 μ§€μ ν•˜μ‹­μ‹œμ˜€.

κ·€ν•˜μ˜ μ œμ•ˆμ— κΈ°μ‘΄ μ½”λ“œμ— λŒ€ν•œ DjangoAuthorization에 λŒ€ν•œ 맀개 λ³€μˆ˜ 전달을 λ³€κ²½ ν•΄μ•Όν•˜λŠ” κ²ƒμ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€.

μ œκ°€ μ œμ•ˆν•œ μ†”λ£¨μ…˜μ„ λ‹€μ‹œ μ‚΄νŽ΄λ³΄λ©΄ μ œκ°€ μ˜Ήν˜Έν•˜λŠ” 것은 μ‚¬λžŒλ“€μ—κ²Œ μ•ˆμ „ν•˜κ³  이전 버전과 ν˜Έν™˜λ˜λŠ” κΈ°λ³Έ μ˜΅μ…˜μ„ μ œκ³΅ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 이 경우 μ‚¬μš©μž μ½”λ“œλ₯Ό λ³€κ²½ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.

이 λ§₯λ½μ—μ„œ 이전 λ²„μ „κ³Όμ˜ ν˜Έν™˜μ„±μ„ κΉ¨λŠ” 것이 ν•„μš”ν•˜λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

λ™μ˜ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ν˜„μž¬ 병합 된 변경은 이전 λ²„μ „κ³Όμ˜ ν˜Έν™˜μ„±μ„ 깨뜨릴뿐만 μ•„λ‹ˆλΌ λͺ…λ°±ν•œ 방법 (ν˜„μž¬ κ΅¬ν˜„μ— μ˜ν•΄ μ•”μ‹œ 됨)이 GET을 ν—ˆμš©ν•΄μ•Όν•˜λŠ” λͺ¨λ“  μ‚¬μš©μžμ—κ²Œ λ³€κ²½ κΆŒν•œμ„ ν• λ‹Ήν•˜λŠ” κ²ƒμ΄λ―€λ‘œ 훨씬 더 큰 잠재적 λ³΄μ•ˆ 문제λ₯Ό μ•ΌκΈ°ν•©λ‹ˆλ‹€.

μ†”μ§νžˆ, 읽기 μž‘μ—…μ— λŒ€ν•œ change κΆŒν•œμ΄ λ³΄μ•ˆμ„ ν–₯μƒμ‹œν‚€λŠ” λ™μ‹œμ—μ΄ κΆŒν•œμ΄ PUT도 ν—ˆμš©ν•˜λŠ” 방법을 보지 λͺ»ν–ˆμŠ΅λ‹ˆλ‹€. λ‹€λ₯Έ μž‘μ—…μ— λŒ€ν•œ κΆŒν•œμ„ ν˜Όν•©ν•˜λŠ” 것은 쒋은 선택이 μ•„λ‹Œ 것 κ°™μŠ΅λ‹ˆλ‹€.

μ•ˆνƒ€κΉκ²Œλ„ μ œμ•ˆ 된 ModifiedDjangoAuthorization 은 μ‹€μ œλ‘œ view κΆŒν•œμ„ λͺ¨λΈμ— μΆ”κ°€ν•˜μ§€ μ•ŠλŠ” ν•œ νŠΈλ¦­μ„ μˆ˜ν–‰ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ λ‹€μ‹œ 이전 λ²„μ „κ³Όμ˜ ν˜Έν™˜μ„±μ΄ κΉ¨μ§‘λ‹ˆλ‹€. μ΅œμ†Œν•œ μ½”λ“œ 변경이 ν•„μš”ν•˜λ―€λ‘œ 이전 λ²„μ „κ³Όμ˜ ν˜Έν™˜μ„±μ„ κΉ¨κ³  μ‚¬μš©μžκ°€ μ½”λ“œ κΈ°λ°˜μ„ λ‹€μ‹œ μž‘μ—…ν•΄μ•Όν•©λ‹ˆλ‹€.

λ¬Όλ‘  μž¬μ •μ˜λŠ” 항상 νŠΉμ • μš”κ΅¬ 사항을 λ‹¬μ„±ν•˜λŠ” μ˜΅μ…˜μ΄μ§€λ§Œ tastypie의 일반적인 μ•„μ΄λ””μ–΄λŠ” μ‚¬μš©μž 지정 μ½”λ“œλ₯Ό μΆ”κ°€ ν•  ν•„μš”κ°€μ—†λŠ” 합리적이고 μ•ˆμ „ν•œ 기본값을 μ œκ³΅ν•˜λŠ” 것이라고 μƒκ°ν•©λ‹ˆλ‹€.

μš”μ»¨λŒ€ 더 λ‚˜μ€ κ΅¬ν˜„μ„ μœ„ν•΄μ΄ λ³€κ²½ 사항을 되돌렀 μ•Όν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

change κΆŒν•œμ€ Django μžμ²΄μ—μ„œ μ œκ³΅λ©λ‹ˆλ‹€. Django의 기본값이며 Django Admin 앱이 μ„€μ •λ˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€. view μ˜΅μ…˜μ€ 그렇지 μ•ŠμŠ΅λ‹ˆλ‹€. μ €λŠ” 개인적으둜 read 둜 이름을 μ§€μ •ν–ˆμŠ΅λ‹ˆλ‹€.

model λ₯Ό ν™•μΈν•˜μ—¬ 무슨 λœ»μΈμ§€ 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. _meta 확인을 μ˜λ―Έν•˜λŠ” 경우 λΆˆμ™„μ „ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 당신이 dbλ₯Ό μΉ˜λŠ” 것을 μ˜λ―Έν•œλ‹€λ©΄, λ‚˜λŠ” 그것이 λΆˆν•„μš”ν•˜κ²Œ λΉ„μ‹Έλ‹€λŠ” 것을 μ•Œμ•˜μŠ΅λ‹ˆλ‹€.

λ‚΄ μ„ ν˜Έμ— 따라, 당신이 μ œμ•ˆν•œ 것은 κΈ°λ³Έ 인증에 λŒ€ν•΄ "λ„ˆλ¬΄ λ§Žμ€ λ§ˆλ²•"μͺ½μ—μžˆλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. μ‰½κ²Œ μž¬μ •μ˜ ν•  μˆ˜μžˆλŠ” μ•ˆμ „ν•œ κΈ°λ³Έκ°’ 만 있으면 μΆ©λΆ„ ν•΄ λ³΄μž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 그것은 단지 λ‚΄ μ˜κ²¬μž…λ‹ˆλ‹€.

λ³€κ²½ 사항은 https://github.com/django-tastypie/django-tastypie/blob/master/docs/release_notes/v0.13.2.rst 에 λ¬Έμ„œν™”λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

μ†”μ§νžˆ,이 κΆŒν•œμ΄ PUT도 ν—ˆμš©ν•˜λŠ” λ™μ‹œμ— 읽기 μž‘μ—…μ— λŒ€ν•œ λ³€κ²½ κΆŒν•œμ΄ λ³΄μ•ˆμ„ ν–₯μƒμ‹œν‚€λŠ” 방법을 μ•Œμ§€ λͺ»ν•©λ‹ˆλ‹€. λ‹€λ₯Έ μž‘μ—…μ— λŒ€ν•œ κΆŒν•œμ„ ν˜Όν•©ν•˜λŠ” 것은 쒋은 선택이 μ•„λ‹Œ 것 κ°™μŠ΅λ‹ˆλ‹€.

μš°λ¦¬λŠ” μ‚¬μš©μžκ°€ 무언가λ₯Ό λ³€κ²½ν•  수 μžˆλ‹€λ©΄ 그것을 읽을 수 μžˆλ‹€λŠ” 것을 μ••λ‹ˆλ‹€. 그것이 Django κ΄€λ¦¬μžκ°€ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.

이 버전은 κ°œλ°œμžκ°€ μžμ‹ μ΄ν•˜λŠ” 일에 λŒ€ν•΄ μƒκ°ν•˜κ²Œν•˜κΈ° λ•Œλ¬Έμ— 더 μ•ˆμ „ν•©λ‹ˆλ‹€. μžμ‹ μ˜ "읽기"κΆŒν•œμ„ κ°œλ°œν•˜λŠ” λŒ€μ‹  κ°œλ°œμžκ°€ "읽기"κΆŒν•œ 만 κ°€μ Έμ•Ό ν•  λ•Œ μ˜λ„μ μœΌλ‘œ λͺ¨λ“  μ‚¬λžŒμ—κ²Œ "λ³€κ²½"κΆŒν•œμ„ λΆ€μ—¬ν•˜κΈ°λ‘œ μ„ νƒν•˜λŠ” 것이 λ¬Έμ œμž…λ‹ˆλ‹€. μ €λŠ” λ‹€λ₯Έ κ°œλ°œμžλ“€μ΄ μ˜λ„μ μœΌλ‘œ 어리석은 μΌμ„ν•˜λŠ” 것을 막을 수 μ—†μŠ΅λ‹ˆλ‹€. μ €λŠ” Tastypieκ°€ 어리석은 μΌμ„ν•˜λŠ” 것을 막기 μœ„ν•΄ 여기에 μžˆμŠ΅λ‹ˆλ‹€. 이 λ³€κ²½μ˜ μš”μ μ€ DjangoAuthorization을 μ‚¬μš©ν•˜λŠ” λͺ¨λ“  λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ μ „μ—­ 읽기 κΆŒν•œμ„ λ°©μ§€ν•˜λŠ” 것이 μ—ˆμŠ΅λ‹ˆλ‹€. μƒˆλ‘œμš΄ λ™μž‘μ€ κ°œλ°œμžκ°€ Django κ΄€λ¦¬μžμ—μ„œ κ²½ν—˜ν•˜λŠ” 것과 μΌμΉ˜ν•©λ‹ˆλ‹€.

이전 λ™μž‘μ„ μ›ν•˜λŠ” 경우 :

  1. 0.13.2둜 μ—…κ·Έλ ˆμ΄λ“œν•˜μ§€ λ§ˆμ‹­μ‹œμ˜€.
  2. λ˜λŠ” read_list and read_detail` λ©”μ„œλ“œλ₯Ό μž¬μ •μ˜ν•©λ‹ˆλ‹€.

λ¬Έμ„œκ°€ κ°œμ„  될 수 μžˆλ‹€κ³  μƒκ°λ˜λ©΄ 자유둭게 PR을 μ œμΆœν•˜μ‹­μ‹œμ˜€.

κ·€ν•˜μ˜ μ˜κ²¬μ— κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€. λ¬Έμ„œμ— λŒ€ν•œ 링크λ₯Ό μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. μΆ©λΆ„νžˆ κ³΅ν‰ν•˜κ²Œ, 그것을 λ†“μΉœ 것에 λŒ€ν•΄ λ‚˜μ˜κ²Œ μƒκ°ν•©λ‹ˆλ‹€ (λ¬Έμ œλŠ” v0.13.4에 ν• λ‹Ήλ˜μ—ˆμ§€λ§Œ λ¬Έμ„œλŠ” v0.13.2에 μžˆμŠ΅λ‹ˆλ‹€).

λ‚΄ povμ—μ„œ λͺ‡ 가지 λ§ˆμ§€λ§‰ λ°œμ–Έμ„ν•˜κ² μŠ΅λ‹ˆλ‹€.

μš°λ¦¬λŠ” μ‚¬μš©μžκ°€ 무언가λ₯Ό λ³€κ²½ν•  수 μžˆλ‹€λ©΄ 그것을 읽을 수 μžˆλ‹€λŠ” 것을 μ••λ‹ˆλ‹€. 그것이 Django κ΄€λ¦¬μžκ°€ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.

Django κ΄€λ¦¬μžλŠ” change κΆŒν•œμ„ μ‚¬μš©ν•©λ‹ˆλ‹€. _changing_ κ°œμ²΄μ— λŒ€ν•œ κ΄€λ¦¬μž μΈν„°νŽ˜μ΄μŠ€ _is_이기 λ•Œλ¬Έμž…λ‹ˆλ‹€. κ±°κΈ°μ—μ„œ μ˜λ―Έκ°€ μžˆμŠ΅λ‹ˆλ‹€. REST API에 λŒ€ν•œ GET μš”μ²­μ€ μ •μ˜μ— 따라 _reading / viewing_μž…λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ κ°œλ°œμžλŠ” DjangoAuthorization이 λ³€κ²½ κΆŒν•œμ΄ μ—†μ–΄μ„œ 읽기λ₯Ό κ±°λΆ€ ν•  것이라고 κΈ°λŒ€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

이 버전은 κ°œλ°œμžκ°€ μžμ‹ μ΄ν•˜λŠ” 일에 λŒ€ν•΄ μƒκ°ν•˜κ²Œν•˜κΈ° λ•Œλ¬Έμ— 더 μ•ˆμ „ν•©λ‹ˆλ‹€.

tastypie의 κ΄‘κ³  κΈ°λŠ₯ 쀑 ν•˜λ‚˜λŠ” _ 합리적인 κΈ°λ³Έκ°’ _을 μ œκ³΅ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. API의 GET (μ •μ˜ : 읽기) 및 PUT (λ³€κ²½) λ©”μ„œλ“œκ°€ λͺ¨λ“  μ˜λ„μ™€ λͺ©μ μ—μ„œ μ„œλ‘œ λ‹€λ₯Έ μž‘μ—…μ΄λ―€λ‘œ λ‹€λ₯Έ κΆŒν•œλ„ ν•„μš”ν•˜λ‹€κ³  κ°€μ •ν•˜λŠ” 것이 합리적이지 μ•ŠμŠ΅λ‹ˆκΉŒ?

κ·€μ€‘ν•œ 좔가라고 μƒκ°ν•œλ‹€λ©΄ μ œκ°€ μ“΄ λ‚΄μš©μ— 따라 PR을 기꺼이 기꺼이 λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€.

λ³€κ²½ κΆŒν•œμ€ Django μžμ²΄μ—μ„œ μ œκ³΅λ©λ‹ˆλ‹€. (...) μ˜΅μ…˜λ³΄κΈ°κ°€ μ•„λ‹™λ‹ˆλ‹€.

Djangoμ—μ„œ view permission λ₯Ό μΆ”κ°€ν•˜κΈ° μœ„ν•΄ 보λ₯˜μ€‘인 PR이 μžˆμœΌλ―€λ‘œ λ·°λ₯Ό μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€.

기본적으둜 퍼블릭 / κΈ€λ‘œλ²Œ 읽기 μž‘μ—…μ„ ν—ˆμš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 그것은 μ΅œμ’…μž…λ‹ˆλ‹€. 그리고 μš°λ¦¬λŠ” ν˜„μž¬ κ·Έλ ‡κ²Œ ν•  μˆ˜μžˆλŠ” ν‘œμ€€μ μΈ 방법이 μ—†λŠ”λ° κ°œλ°œμžλ“€μ΄ μ–΄λ–»κ²Œ κΆŒν•œμ„ μ„€μ •ν•˜λŠ”μ§€ μΆ”μΈ‘ν•˜μ§€ μ•Šμ„ κ²ƒμž…λ‹ˆλ‹€. μš°λ¦¬λŠ” 그것을 "읽기"λ˜λŠ” "보기"라고 λΆ€λ₯Όμ§€μ‘°μ°¨ ν™•μ‹€ν•˜μ§€ μ•ŠμœΌλ©°, 여기에 μ˜€λŠ” λ§Žμ€ μ‚¬λžŒλ“€μ΄ "λ‚˜λŠ” 이런 μ‹μœΌλ‘œν•œλ‹€"λ˜λŠ” "μƒˆλ‘œμš΄ Django λ¦΄λ¦¬μŠ€μ—μ„œ 그것을 λ‹€λ₯Έ κ²ƒμœΌλ‘œ λΆ€λ₯΄λŠ” 것을 μ›ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€." .

Djangoκ°€ μ¦‰μ‹œ 읽기 /보기 κΆŒν•œμ„ μ§€μ›ν•˜λŠ” 경우 ν•΄λ‹Ή κΆŒν•œμœΌλ‘œ μ „ν™˜ν•©λ‹ˆλ‹€. μ§€κΈˆμ€ κ°œλ°œμžκ°€ κΆŒν•œμ„ μ²˜λ¦¬ν•˜λŠ” μ‚¬μš©μž 지정 방식을 μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ μ‚¬μš©μž 지정 μ½”λ“œλ₯Ό μž‘μ„±ν•΄μ•Όν•©λ‹ˆλ‹€.

이 λ¬Έμ œκ°€ μ’…κ²° 된 것을 μ•Œκ³  μžˆμ§€λ§Œμ΄ λ³€κ²½μœΌλ‘œ 인해 κΈ°μ‘΄ ν”„λ‘œμ νŠΈλ₯Ό 0.13.x둜 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•˜λŠ” 것이 기본적으둜 μ°¨λ‹¨λ˜μ—ˆλ‹€κ³  λ§ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

@miraculixx λ‹¨μˆœνžˆ 데이터λ₯Όλ³΄κΈ° μœ„ν•΄ λ³€κ²½ κΆŒν•œμ„ μš”κ΅¬ν•˜λŠ” 것이 μ•½κ°„ 미친 μ§“μ΄λΌλŠ” 사싀과 κ΄€λ ¨ν•˜μ—¬ κ·€ν•˜κ°€ μ™„μ „νžˆ μ˜³λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. λ‚˜λŠ” μš°λ¦¬κ°€ μ–΄λ–»κ²Œ λ“  μž₯κ³ λ₯Ό λΉ„λ‚œ ν•  수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. κ·Έλž˜λ„ λ·° κΆŒν•œμ˜ κ°œλ…μ΄ μ—†μŠ΅λ‹ˆλ‹€. CRUD의 READ λΆ€λΆ„).

생산을 μ€‘λ‹¨ν•˜λŠ” 변경을 ν•  λ•Œ μ΅œμ†Œν•œ 버전 관리에 반영 ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?
Tastypie의 x.y.z 버전 κ΄€λ¦¬λŠ” λŒ€λΆ€λΆ„μ˜ μ‚¬λžŒλ“€μ΄ κΈ°λŒ€ν•˜λŠ” 것과 맀우 μœ μ‚¬ν•©λ‹ˆλ‹€. 일반적으둜 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

버전 번호 MAJOR.MINOR.PATCHκ°€ 주어지면 λ‹€μŒμ„ μ¦κ°€μ‹œν‚΅λ‹ˆλ‹€.
..
이전 버전과 ν˜Έν™˜λ˜λŠ” 버그 μˆ˜μ •μ„ ν•  λ•Œ 패치 버전.

μƒˆλ‘œμš΄ ν”„λ‘œλ•μ…˜ 배포 쀑에 이것을 μΆ”μ ν•˜λŠ” 데 맀우 λΆˆνŽΈν•œ μ‹œκ°„μ„ λ³΄λƒˆμŠ΅λ‹ˆλ‹€.

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