Django-tastypie: рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: `DjangoAuthorization` рдХреЛ рд╕рднреА рдореЙрдбрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░` read` рдПрдХреНрд╕реЗрд╕ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдиреА рдЪрд╛рд╣рд┐рдП

рдХреЛ рдирд┐рд░реНрдорд┐рдд 6 рдЬрдире░ 2016  ┬╖  10рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: django-tastypie/django-tastypie

tastypie/authorization.py (1/4/2016 рдкрд░ 133 - рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдХреА рддрд░рд╣) рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдбрд┐рдлрд╝реЙрд▓реНрдЯ, рджреЛрдиреЛрдВ read_list рдФрд░ read_details рдмрд╛рдпрдкрд╛рд╕ user.has_perm() рдЪреЗрдХ, рдЬреЛ рдХрд╛рдлреА рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ рдФрд░ рдПрдХ рдЦрд░рд╛рдм рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИред

Django рдХрд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЕрдкрд░рдВрдкрд░рд╛рдЧрдд рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рдерд╛ рдХрд┐ рдЗрд╕рдХрд╛ рдЧрд▓рдд рдЕрд░реНрде рдХреИрд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдЧрдпрд╛ред

https://docs.djangoproject.com/es/1.9/topics/auth/default/#permissions-and- рдкреНрд░рд╛рдзрд┐рдХрд░рдг

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)

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЬрдм рдЖрдк рдкреНрд░реЛрдбрдХреНрд╢рди-рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рдЖрдк рдХрдо рд╕реЗ рдХрдо рдЙрд╕ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
Tastypie рдХрд╛ x.y.z рд╕рдВрд╕реНрдХрд░рдг рд╡реИрд╕рд╛ рд╣реА рджрд┐рдЦрддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рд▓реЛрдЧ рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ , рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рд╣реИ:

рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ MAJOR.MINOR.PATCH рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╡реЗрддрди рд╡реГрджреНрдзрд┐:
редред
рдЬрдм рдЖрдк рдкрд╢реНрдЪ-рд╕рдВрдЧрдд рдмрдЧ рд╕реБрдзрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдкреИрдЯрдЪ рд╕рдВрд╕реНрдХрд░рдгред

рдореИрдВрдиреЗ рдЕрднреА рдПрдХ рдирдИ рдЙрддреНрдкрд╛рджрди рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рджреМрд░рд╛рди рдПрдХ рдмрд╣реБрдд рд╣реА рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдШрдВрдЯреЗ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ред

рд╕рднреА 10 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореИрдВ рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╣реА рд╡рд┐рд▓рдп рд╣реЛ рдЧрдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА рдЗрд╕рдХреЗ рд╕рд╛рде рдореБрджреНрджрд╛ рдЙрдард╛рддрд╛ рд╣реВрдВред рдПрдХ рдирдпрд╛ рдЕрдиреБрд░реЛрдз рдЦреЛрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣рд╛рдБ рдореЗрд░реА рдЪрд┐рдВрддрд╛ рд╣реИ:

рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рддрд░рд╣ рдкреАрдЫреЗ рдХреА рдУрд░ рдЕрд╕рдВрдЧрдд рд╣реИ (рдкрд╣рд▓реЗ рд╕рднреА GET рдЕрдиреБрд░реЛрдз DjangoAuthorization рдкрд╛рд╕ рд╣реЛрдЧрд╛)ред рдХрд┐рд╕реА рдХреЗ рдХреЛрдб рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ рдпрд╛ рддреЛ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЕрдиреБрдорддрд┐ (рдЦрд░рд╛рдм) рджреЗрдВ, рдпрд╛ рд░реАрдб рдПрдХреНрд╢рди рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ) рдХреЗ рд▓рд┐рдП DjangoAuthorization рдХреЛ рдЙрдк-рд╡рд░реНрдЧ рдХрд░реЗрдВред рдХреНрдпрд╛ рдпрд╣ рдЗрд░рд╛рджрд╛ рдерд╛?

рдореИрдВ django рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЗрд╕рдХреЗ рдкреАрдЫреЗ рдХреЗ рддрд░реНрдХ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ 'рд░реАрдб' рдХреЛ рдПрдкреАрдЖрдИ рд╕рдВрджрд░реНрдн рдореЗрдВ 'рдкрд░рд┐рд╡рд░реНрддрди' рдХреЗ рд╕рдордХрдХреНрд╖ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдПрдХ рд╕рдордЭрджрд╛рд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдзрд╛рд░рдгрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рдЕрдЧрд░ GET DjangoAuthorization рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдиреБрдордд рд╡рд┐рдзрд┐ рд╣реИ, рддреЛ рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкрд╣реБрдВрдЪ рд╕реЗ рдЗрдирдХрд╛рд░ рдХреНрдпреЛрдВ рдХрд░реЗрдЧрд╛ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ change рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ?

рдореИрдВ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд╣ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рдж:

_for read_detail_

  • рдпрджрд┐ рдореЙрдбрд▓ рдХреЗ рдкрд╛рд╕ view рдЕрдиреБрдорддрд┐ рд╣реИ, рддреЛ рдЬрд╛рдБрдЪ рдХрд░реЗрдВ (= рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реБрдзрд╛рд░ рдЬрд┐рдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)
  • рдЕрдЧрд░ рдХреЛрдИ view рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдореЗрд╢рд╛ рдЕрдиреБрдорддрд┐ рджреЗрдВ (= рдкреАрдЫреЗ рд╕рдВрдЧрдд)

_for read_list_

  • рдпрджрд┐ рдореЙрдбрд▓ рдХреЗ рдкрд╛рд╕ list рдЕрдиреБрдорддрд┐ рд╣реИ, рддреЛ рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдХрд┐ (= рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реБрдзрд╛рд░ рдЬреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)
  • рдпрджрд┐ рдХреЛрдИ list рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдореЗрд╢рд╛ рдЕрдиреБрдорддрд┐ рджреЗрдВ (= рдкреАрдЫреЗ рд╕рдВрдЧрдд)

рдЗрд╕ рддрд░рд╣ рд╕реЗ tastypie рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЬреЛ DjangoAuthorization рдХреЗ рдПрдХ рдХрд╕реНрдЯрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЬреЛ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рджреЗрдЦрдиреЗ рдФрд░ рд╕реВрдЪреА рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╕рд╛рди рд░рд╛рд╕реНрддрд╛ рджреЗрддреЗ рд╣реБрдП Django рдХреА рдЕрдиреБрдорддрд┐ рдЪреВрдХ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИред

рдХрдо рд╕реЗ рдХрдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЕрдиреБрдорддрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

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`)

@ рд╕реАрдирд╣реЗрд╕ рд╡рд╣реА рд╣реЛрдЧрд╛ рдЬреЛ рдлреИрд╕рд▓рд╛ рдХрд░реЗрдЧрд╛ред

рдпрд╣рд╛рдБ рд╕рд┐рд░реНрдл рдореЗрд░реА рд░рд╛рдп рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рдореБрджреНрджрд╛ рдерд╛ред рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрд╕рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛, рдЬрдм рддрдХ рдХрд┐ рдореИрдВ рдЙрддреНрдкрд╛рджрди рдХреЗ рдмрд╣реБрдд рдХрд░реАрдм рдирд╣реАрдВ рдерд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкрд┐рдЫрдбрд╝реЗ-рдирд╛рдпрдХреЛрдВ рдХреЛ рддреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рдЕрдкрдиреЗ рд╕реБрдЭрд╛рд╡ рдХреЛ рджреЗрдЦреЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдореМрдЬреВрджрд╛ рдХреЛрдб рдореЗрдВ рдмрджрд▓рддреЗ рдкреИрд░рд╛рдореЗрдЯреНрд╕ рдХреЛ 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)

рдЗрд╕ рдмрджрд▓рд╛рд╡ рдиреЗ рдмрджрд▓рд╛рд╡ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдФрд░ рдЗрд╕реЗ рдЖрд╕рд╛рди рдмрдирд╛рдпрд╛ред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЗрдирд┐рдЯ рдкрд░рдо рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рдореБрджреНрджрд╛ рдерд╛ред

рдореИрдВ рдореВрд▓ рдореБрджреНрджреЗ рдХреА рдордВрд╢рд╛ рдкрд░ рд╕рд╡рд╛рд▓ рдирд╣реАрдВ рдЙрдард╛ рд░рд╣рд╛ рд╣реВрдВред рдХреЗрд╡рд▓ рдпрд╣ рдмрддрд╛рддреЗ рд╣реБрдП рдХрд┐ рд╡рд┐рд▓рдп рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓реЛрдЧреЛрдВ рдХреЗ рдореМрдЬреВрджрд╛ рдХреЛрдб рдФрд░ рдорд╛рдиреНрдпрддрд╛рдУрдВ рдХреЛ рдмрд┐рдирд╛ рдХрд╣реЗ рдФрд░ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкреНрд░рднрд╛рд╡реА рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреЛрдбрд╝ рд░рд╣рд╛ рд╣реИред

рдЕрдкрдиреЗ рд╕реБрдЭрд╛рд╡ рдХреА рддрд░рд╣ рджреЗрдЦреЗрдВ, рдЕрдкрдиреЗ рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЛ DjangoAuthorization рдХреЗ рд▓рд┐рдП рдмрджрд▓рддреЗ рдкреИрд░рд╛рдореЗрдЯреНрд╕ рдкрд╛рд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ,

рдпрджрд┐ рдЖрдк рдореЗрд░реЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдХреЛ рдлрд┐рд░ рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЬреЛ рдореИрдВ рд╡рдХрд╛рд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рд▓реЛрдЧреЛрдВ рдХреЛ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдФрд░ рдкреАрдЫреЗ рд╕рдВрдЧрдд рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд▓реНрдк рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдХреЛрдб рдореЗрдВ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкрд┐рдЫрдбрд╝реЗ-рдирд╛рдпрдХреЛрдВ рдХреЛ рддреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рдореИрдВ рдЕрд╕рд╣рдордд рд╣реВрдВред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдорд┐рд▓рд╛рдпрд╛ рдЧрдпрд╛ рдкрд░рд┐рд╡рд░реНрддрди рди рдХреЗрд╡рд▓ рдкрд╢реНрдЪрдЧрд╛рдореА-рд╕рдВрдЧрддрддрд╛ рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕рдореЗрдВ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╕рдВрднрд╛рд╡рд┐рдд рд╕реБрд░рдХреНрд╖рд╛ рдореБрджреНрджрд╛ рднреА рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХрд╛ (рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреНрд╡рд╛рд░рд╛ рдирд┐рд╣рд┐рдд) рдЙрди рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ GET рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред

рд╕рдЪ рдХрд╣реВрдВ, рддреЛ рдореИрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реВрдВ рдХрд┐ рдХреИрд╕реЗ рдкрдврд╝рдиреЗ рдХреА рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП change рдЕрдиреБрдорддрд┐ рд╕реЗ рд╕реБрд░рдХреНрд╖рд╛ рдмрдврд╝ рдЬрд╛рддреА рд╣реИ, рд╕рд╛рде рд╣реА рдпрд╣ рдЕрдиреБрдорддрд┐ рднреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рд╡рд┐рднрд┐рдиреНрди рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдорд┐рд▓рд╛рдирд╛ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЖрдкрдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд ModifiedDjangoAuthorization рдЪрд╛рд▓ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдЬрдм рддрдХ рдХрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЙрдбрд▓ рдореЗрдВ view рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдлрд┐рд░ рд╕реЗ рдкреАрдЫреЗ рдХреА рд╕рдВрдЧрддрддрд╛ рдХреЛ рддреЛрдбрд╝ рд░рд╣рд╛ рд╣реИред рдХрдо рд╕реЗ рдХрдо рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ - рдЗрд╕рд▓рд┐рдП рд╣рдо рдкреАрдЫреЗ рдХреА рд╕рдВрдЧрддрддрд╛ рдХреЛ рддреЛрдбрд╝рддреЗ рд╣реИрдВ _ рдФрд░_ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрдкрдиреЗ рдХреЛрдб рдЖрдзрд╛рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддреЗ рд╣реИрдВред

рдмреЗрд╢рдХ рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рд╣рдореЗрд╢рд╛ рдХрд┐рд╕реА рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯреИрд╕реНрдЯреАрдкреА рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░ рд╕рдордЭрджрд╛рд░ рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдЪреВрдХ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдХрд╕реНрдЯрдо рдХреЛрдб рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ ...

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдмрджрд▓рд╛рд╡ рдХреЛ рдмреЗрд╣рддрд░ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

change рдЕрдиреБрдорддрд┐ Django рд╕реЗ рд╣реА рдЖ рд░рд╣реА рд╣реИред рдпрд╣ Django рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИ, рдпрд╣ рдХреИрд╕реЗ Django рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрдЯрдЕрдк рд╣реИред рд╡рд┐рдХрд▓реНрдк view рдирд╣реАрдВ рд╣реИред рдореИрдВрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореЗрд░рд╛ рдирд╛рдо read ред

model рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рд╕реЗ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ, рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдк рдХрд╛ рдЕрд░реНрде рд╣реИ _meta рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛, рддреЛ рдпрд╣ рдЕрдзреВрд░рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк db рдХреЛ рдорд╛рд░рддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдпрд╣ рдЕрдкреНрд░рд╛рдкреНрдп рдорд╣рдВрдЧрд╛ рд▓рдЧрд╛ред

рдореЗрд░реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рд▓рд┐рдП, рдЖрдкрдиреЗ рдЬреЛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рд╣реИ рд╡рд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП "рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЬрд╛рджреВ" рдХреА рдУрд░ рд╣реИред рдмрд╕ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛрдирд╛, рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрддрд┐-рдпреЛрдЧреНрдп, рдкрд░реНрдпрд╛рдкреНрдд рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдорд╣рдЬ рдореЗрд░реА рд░рд╛рдп рд╣реИред

рдпрд╣рд╛рдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдкреНрд░рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: https://github.com/django-tastypie/django-tastypie/blob/master/docs/release_notes/v0.13.2.rst

рд╕рдЪ рдХрд╣реВрдВ, рддреЛ рдореИрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реВрдВ рдХрд┐ рдкрдврд╝реА рдЧрдИ рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЕрдиреБрдорддрд┐ рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдХреИрд╕реЗ рдмрдврд╝рд╛рддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЙрд╕реА рд╕рдордп рдпрд╣ рдЕрдиреБрдорддрд┐ PUT рдХреЛ рднреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рд╡рд┐рднрд┐рдиреНрди рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдорд┐рд▓рд╛рдирд╛ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред

рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрджрд┐ рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреБрдЫ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рд╡реЗ рдЗрд╕реЗ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣реА рд╣реИ рдХрд┐ Django рдПрдбрдорд┐рди рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рд╕рдВрд╕реНрдХрд░рдг рдЕрдзрд┐рдХ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдпрд╣ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрджрд┐ рдЙрдирдХреА рдЦреБрдж рдХреА "рд░реАрдб" рдЕрдиреБрдорддрд┐ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдбреЗрд╡рд▓рдкрд░ рдЬрд╛рдирдмреВрдЭрдХрд░ рд╕рднреА рдХреЛ "рдкрд░рд┐рд╡рд░реНрддрди" рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрдм рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ "рд░реАрдб" рдХреА рдЕрдиреБрдорддрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рддреЛ рдпрд╣ рдЙрдирдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИ; рдореИрдВ рдЕрдиреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЬрд╛рдирдмреВрдЭрдХрд░ рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рдЪреАрдЬреЗрдВ рдХрд░рдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХ рд╕рдХрддрд╛, рдореИрдВ рдпрд╣рд╛рдВ рддрд╕реНрдЯрд┐рдкреА рдХреЛ рдмреЗрд╡рдХреВрдл рдЪреАрдЬреЗрдВ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реВрдВред рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп DjangoAuthorization рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╕рдВрд╕рд╛рдзрди рдкрд░ рд╡реИрд╢реНрд╡рд┐рдХ рд░реАрдб рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЛ рд░реЛрдХрдирд╛ рдерд╛, рдЬрд┐рд╕реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ; рдирдпрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ Django рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдореЗрдВ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдЕрдиреБрднрд╡ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИред

рдпрджрд┐ рдЖрдк рдкреБрд░рд╛рдирд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

  1. 0.13.2 рдкрд░ рдЕрдкрдЧреНрд░реЗрдб рди рдХрд░реЗрдВред
  2. рдпрд╛ read_list and read_detail` рддрд░реАрдХреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдВред

рдЕрдЧрд░ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдмреЗрдЭрд┐рдЭрдХ рдкреАрдЖрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВред

рдЖрдкрдХреА рдкреНрд░рддрд┐рдкреБрд╖реНрдЯрд┐ рдХреА рд╕рд░рд╛рд╣рдирд╛ред рдбреЙрдХреНрдЯрд░ рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдХрд╛рдлреА рдирд┐рд╖реНрдкрдХреНрд╖, рд▓рд╛рдкрддрд╛ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рдмреБрд░рд╛ (рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореБрджреНрджрд╛ v0.13.4 рдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИ рдЬрдмрдХрд┐ рдбреЙрдХреНрд╕ v0.13.2 рдореЗрдВ рд╣реИрдВ)ред

рдореБрдЭреЗ рдЕрдкрдиреЗ рдкреЛрд╡ рд╕реЗ рдХреБрдЫ рдЕрдВрддрд┐рдо рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рджреЗрдВ:

рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрджрд┐ рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреБрдЫ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рд╡реЗ рдЗрд╕реЗ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣реА рд╣реИ рдХрд┐ Django рдПрдбрдорд┐рди рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

Django рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ change рдЕрдиреБрдорддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди _is_ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ _changing_ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдпрд╣ рд╡рд╣рд╛рдБ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдкрд░рд┐рднрд╛рд╖рд╛ рджреНрд╡рд╛рд░рд╛ REST API рдкрд░ GET рдЕрдиреБрд░реЛрдз _reading / view_ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рджреЗрд╡реЛрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ DjangoAuthorization рдкрдврд╝рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рд╣реИред

рдпрд╣ рд╕рдВрд╕реНрдХрд░рдг рдЕрдзрд┐рдХ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдпрд╣ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

Tastypie рдХреА рд╡рд┐рдЬреНрдЮрд╛рдкрд┐рдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ _reasonable рдЪреВрдХ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рдорд╛рди рд▓реЗрдирд╛ рдЙрдЪрд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ API рдХрд╛ GET (рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░: рдкрдврд╝реЗрдВ) рдФрд░ PUT (рдкрд░рд┐рд╡рд░реНрддрди) рдХреЗ рддрд░реАрдХреЗ, рд╕рднреА рдЗрд░рд╛рджреЗ рдФрд░ рдЙрджреНрджреЗрд╢реНрдп рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдСрдкрд░реЗрд╢рди рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗ рднреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ?

рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреА рдХрд┐ рдореИрдВрдиреЗ рдЬреЛ рд▓рд┐рдЦрд╛ рд╣реИ, рдЙрд╕рдХреА рддрд░реНрдЬ рдкрд░ рдПрдХ рдкреАрдЖрд░ рдХрд╛ рдпреЛрдЧрджрд╛рди рджреЗрдиреЗ рдореЗрдВ рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреА рдЕрдЧрд░ рдЖрдк рд▓реЛрдЧ рдЗрд╕реЗ рдПрдХ рдореВрд▓реНрдпрд╡рд╛рди рдЬреЛрдбрд╝ рдорд╛рдирддреЗ рд╣реИрдВред

рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЕрдиреБрдорддрд┐ Django рд╕реЗ рд╣реА рдЖ рд░рд╣реА рд╣реИред (...) рд╡рд┐рдХрд▓реНрдк рджреГрд╢реНрдп рдирд╣реАрдВ рд╣реИред

Django рдореЗрдВ view permission рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рдВрдмрд┐рдд рдкреАрдЖрд░ рд╣реИ, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рджреГрд╢реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред

рд╣рдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ / рд╡реИрд╢реНрд╡рд┐рдХ рд░реАрдб рдСрдкрд░реЗрд╢рдВрд╕ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рд╡рд╣ рдЕрдВрддрд┐рдо рд╣реИред рдФрд░ рд╣рдо рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдЕрдкрдиреА рдЕрдиреБрдорддрд┐ рддрдм рджреА рд╣реИ рдЬрдм рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдорд╛рдирдХ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рд╣рдореЗрдВ рдпрд╣ рднреА рдкрдХреНрдХрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ "рд░реАрдб" рдпрд╛ "рд╡реНрдпреВ" рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдФрд░ рдореИрдВ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдХрд┐ рдпрд╣рд╛рдБ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХрд╛ рдЭреБрдВрдб рдпрд╣ рдХрд╣реЗ рдХрд┐ "рдореИрдВ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд░рддрд╛ рд╣реВрдБ" рдпрд╛ "рдирдпрд╛ Django рд░рд┐рд▓реАрдЬрд╝ рдЗрд╕реЗ рдХреБрдЫ рдФрд░ рдХрд╣рддрд╛ рд╣реИ" ред

рдпрджрд┐ рдФрд░ рдЬрдм Django рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдкрдврд╝рдиреЗ / рджреЗрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рддреЛ рд╣рдо рдЙрд╕ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВрдЧреЗред рдЕрднреА рдХреЗ рд▓рд┐рдП рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рддрд░реАрдХреЗ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХрд╕реНрдЯрдо рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рдмрдВрдж рд╣реЛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╕рд┐рд░реНрдл рдЗрд╕рдореЗрдВ рдЭрдВрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдмрджрд▓рд╛рд╡ рдиреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдореМрдЬреВрджрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ 0.13.x рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХ рджрд┐рдпрд╛ рд╣реИред

@ рдорд┐рд░рд╛рдХреБрд▓рд┐рдХреНрд╕ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рддрдереНрдп рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рд╣реИрдВ рдХрд┐ рдбреЗрдЯрд╛ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЕрдиреБрдорддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдереЛрдбрд╝рд╛ рдкрд╛рдЧрд▓ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХреЗ рд▓рд┐рдП Django рдХреЛ рджреЛрд╖ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдлрд┐рд░ рднреА, рдПрдХ рджреГрд╢реНрдп рдЕрдиреБрдорддрд┐ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдирд╣реАрдВ рд╣реИ (рдЬреЛ рдореЗрд░реА рдЦрд╛рди рдХреЛ рдкреВрд░реЗ рдЕрдиреНрдп рд╕реНрддрд░ рдкрд░ рдЙрдбрд╝рд╛рддрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрд╛рдЧрд▓ рд╣реИ рдХрд┐ рдПрдХ CRUD рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдШрдЯрдХ рд╕рд╣рд┐рдд рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдмрд╕ рдПрдХ рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ CRUD рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛)ред

рдЬрдм рдЖрдк рдкреНрд░реЛрдбрдХреНрд╢рди-рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рдЖрдк рдХрдо рд╕реЗ рдХрдо рдЙрд╕ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
Tastypie рдХрд╛ x.y.z рд╕рдВрд╕реНрдХрд░рдг рд╡реИрд╕рд╛ рд╣реА рджрд┐рдЦрддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рд▓реЛрдЧ рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ , рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рд╣реИ:

рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ MAJOR.MINOR.PATCH рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╡реЗрддрди рд╡реГрджреНрдзрд┐:
редред
рдЬрдм рдЖрдк рдкрд╢реНрдЪ-рд╕рдВрдЧрдд рдмрдЧ рд╕реБрдзрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдкреИрдЯрдЪ рд╕рдВрд╕реНрдХрд░рдгред

рдореИрдВрдиреЗ рдЕрднреА рдПрдХ рдирдИ рдЙрддреНрдкрд╛рджрди рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рджреМрд░рд╛рди рдПрдХ рдмрд╣реБрдд рд╣реА рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдШрдВрдЯреЗ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕