mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-07-18 04:02:35 +03:00
replaced resource property by 'get_resource' method
This commit is contained in:
parent
e96666fa44
commit
b17f159de7
|
@ -444,12 +444,9 @@ class ResourceMixin(object):
|
||||||
else:
|
else:
|
||||||
return Resource
|
return Resource
|
||||||
|
|
||||||
@property
|
def get_resource(self):
|
||||||
def resource(self):
|
resource_class = self.get_resource_class()
|
||||||
if not hasattr(self, '_resource'):
|
return resource_class(view=self)
|
||||||
resource_class = self.get_resource_class()
|
|
||||||
self._resource = resource_class(view=self)
|
|
||||||
return self._resource
|
|
||||||
|
|
||||||
def validate_request(self, data, files=None):
|
def validate_request(self, data, files=None):
|
||||||
"""
|
"""
|
||||||
|
@ -458,17 +455,21 @@ class ResourceMixin(object):
|
||||||
May raise an :class:`response.ErrorResponse` with status code 400
|
May raise an :class:`response.ErrorResponse` with status code 400
|
||||||
(Bad Request) on failure.
|
(Bad Request) on failure.
|
||||||
"""
|
"""
|
||||||
return self.resource.validate_request(data, files)
|
# TODO: shouldn't `validate_request` be a class method ?
|
||||||
|
return self.get_resource().validate_request(data, files)
|
||||||
|
|
||||||
def filter_response(self, obj):
|
def filter_response(self, obj):
|
||||||
"""
|
"""
|
||||||
Given the response content, filter it into a serializable object.
|
Given the response content, filter it into a serializable object.
|
||||||
"""
|
"""
|
||||||
return self.resource.filter_response(obj)
|
# TODO: shouldn't `filter_response` be a class method ?
|
||||||
|
return self.get_resource().filter_response(obj)
|
||||||
|
|
||||||
def get_bound_form(self, content=None, method=None):
|
def get_bound_form(self, content=None, method=None):
|
||||||
if hasattr(self.resource, 'get_bound_form'):
|
# TODO: shouldn't `get_bound_form` be a class method ?
|
||||||
return self.resource.get_bound_form(content, method=method)
|
resource = self.get_resource()
|
||||||
|
if hasattr(resource, 'get_bound_form'):
|
||||||
|
return resource.get_bound_form(content, method=method)
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -506,51 +507,55 @@ class InstanceMixin(object):
|
||||||
class GetResourceMixin(object):
|
class GetResourceMixin(object):
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
|
resource = self.get_resource()
|
||||||
try:
|
try:
|
||||||
self.resource.retrieve(*args, **kwargs)
|
resource.retrieve(*args, **kwargs)
|
||||||
except self.resource.DoesNotExist:
|
except resource.DoesNotExist:
|
||||||
raise ErrorResponse(status.HTTP_404_NOT_FOUND)
|
raise ErrorResponse(status.HTTP_404_NOT_FOUND)
|
||||||
return self.resource.instance
|
return resource.instance
|
||||||
|
|
||||||
|
|
||||||
class PostResourceMixin(object):
|
class PostResourceMixin(object):
|
||||||
|
|
||||||
def post(self, request, *args, **kwargs):
|
def post(self, request, *args, **kwargs):
|
||||||
self.resource.create(*args, **kwargs)
|
resource = self.get_resource()
|
||||||
self.resource.update(self.CONTENT, *args, **kwargs)
|
resource.create(*args, **kwargs)
|
||||||
headers = {'Location': self.resource.get_url()}
|
resource.update(self.CONTENT, *args, **kwargs)
|
||||||
return Response(status.HTTP_201_CREATED, self.resource.instance, headers)
|
headers = {'Location': resource.get_url()}
|
||||||
|
return Response(status.HTTP_201_CREATED, resource.instance, headers)
|
||||||
|
|
||||||
|
|
||||||
class PutResourceMixin(object):
|
class PutResourceMixin(object):
|
||||||
|
|
||||||
def put(self, request, *args, **kwargs):
|
def put(self, request, *args, **kwargs):
|
||||||
headers = {}
|
resource = self.get_resource()
|
||||||
try:
|
try:
|
||||||
self.resource.retrieve(*args, **kwargs)
|
resource.retrieve(*args, **kwargs)
|
||||||
status_code = status.HTTP_204_NO_CONTENT
|
status_code = status.HTTP_204_NO_CONTENT
|
||||||
except self.resource.DoesNotExist:
|
except resource.DoesNotExist:
|
||||||
self.resource.create(*args, **kwargs)
|
resource.create(*args, **kwargs)
|
||||||
status_code = status.HTTP_201_CREATED
|
status_code = status.HTTP_201_CREATED
|
||||||
self.resource.update(self.CONTENT, *args, **kwargs)
|
resource.update(self.CONTENT, *args, **kwargs)
|
||||||
return Response(status_code, self.resource.instance, {})
|
return Response(status_code, resource.instance, {})
|
||||||
|
|
||||||
|
|
||||||
class DeleteResourceMixin(object):
|
class DeleteResourceMixin(object):
|
||||||
|
|
||||||
def delete(self, request, *args, **kwargs):
|
def delete(self, request, *args, **kwargs):
|
||||||
|
resource = self.get_resource()
|
||||||
try:
|
try:
|
||||||
self.resource.retrieve(*args, **kwargs)
|
resource.retrieve(*args, **kwargs)
|
||||||
except self.resource.DoesNotExist:
|
except resource.DoesNotExist:
|
||||||
raise ErrorResponse(status.HTTP_404_NOT_FOUND)
|
raise ErrorResponse(status.HTTP_404_NOT_FOUND)
|
||||||
self.resource.delete(*args, **kwargs)
|
resource.delete(*args, **kwargs)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
class ListResourceMixin(object):
|
class ListResourceMixin(object):
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
return self.resource.list(*args, **kwargs)
|
resource = self.get_resource()
|
||||||
|
return resource.list(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
########## Pagination Mixins ##########
|
########## Pagination Mixins ##########
|
||||||
|
@ -618,11 +623,12 @@ class PaginatorMixin(object):
|
||||||
The serialised objects are put into `results` on this new, modified
|
The serialised objects are put into `results` on this new, modified
|
||||||
response
|
response
|
||||||
"""
|
"""
|
||||||
|
resource = self.get_resource()
|
||||||
|
|
||||||
# We don't want to paginate responses for anything other than GET
|
# We don't want to paginate responses for anything other than GET
|
||||||
# requests
|
# requests
|
||||||
if self.method.upper() != 'GET':
|
if self.method.upper() != 'GET':
|
||||||
return self.resource.filter_response(obj)
|
return resource.filter_response(obj)
|
||||||
|
|
||||||
paginator = Paginator(obj, self.get_limit())
|
paginator = Paginator(obj, self.get_limit())
|
||||||
|
|
||||||
|
@ -638,7 +644,7 @@ class PaginatorMixin(object):
|
||||||
|
|
||||||
page = paginator.page(page_num)
|
page = paginator.page(page_num)
|
||||||
|
|
||||||
serialized_object_list = self.resource.filter_response(page.object_list)
|
serialized_object_list = resource.filter_response(page.object_list)
|
||||||
serialized_page_info = self.serialize_page_info(page)
|
serialized_page_info = self.serialize_page_info(page)
|
||||||
|
|
||||||
serialized_page_info['results'] = serialized_object_list
|
serialized_page_info['results'] = serialized_object_list
|
||||||
|
|
|
@ -216,4 +216,4 @@ class PerResourceThrottling(BaseThrottle):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_cache_key(self):
|
def get_cache_key(self):
|
||||||
return 'throttle_resource_%s' % self.view.resource.__class__.__name__
|
return 'throttle_resource_%s' % self.view.get_resource().__class__.__name__
|
||||||
|
|
Loading…
Reference in New Issue
Block a user