  
  class AuthMixin(object):
      """Mixin class to provide authentication and permissions."""
      authenticators = ()
      permitters = ()
  
      @property
      def auth(self):
          if not hasattr(self, '_auth'):
              self._auth = self._authenticate()
 
</s> remove     """Mixin class to provide authentication and permissions."""
 </s> add     """Mixin class to provide authentication and permission checking.""" </s> remove     # Map standard HTTP methods to function calls
    callmap = { 'GET': 'get', 'POST': 'post', 
                'PUT': 'put', 'DELETE': 'delete' }

    def get(self, request, *args, **kwargs):
        """Must be subclassed to be implemented."""
        self.not_implemented('GET')


    def post(self, request, *args, **kwargs):
        """Must be subclassed to be implemented."""
        self.not_implemented('POST')


    def put(self, request, *args, **kwargs):
        """Must be subclassed to be implemented."""
        self.not_implemented('PUT')


    def delete(self, request, *args, **kwargs):
        """Must be subclassed to be implemented."""
        self.not_implemented('DELETE')
 </s> add     @property
    def allowed_methods(self):
        return [method.upper() for method in self.http_method_names if hasattr(self, method)] </s> remove             anon_allowed_methods = allowed_methods = ('GET',)
 </s> add             permissions = ()
 </s> remove             allowed_methods = anon_allowed_methods = ('POST',)
 </s> add             permissions = ()
    permissions = ()
  
  class AuthMixin(object):
      """Mixin class to provide authentication and permissions."""
      authenticators = ()
    permissions = ()
  
      @property
      def auth(self):
          if not hasattr(self, '_auth'):
              self._auth = self._authenticate()
keep keep keep keep replace keep keep keep keep keep
 Generic permissions added, allowed_methods and anon_allowed_methods now defunct, dispatch now mirrors View.dispatch more nicely 
djangorestframework/mixins.py