mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-07-30 18:09:59 +03:00
Added a couple of key function to allow easier response tuning.
This commit is contained in:
parent
ee543e465f
commit
249588778c
|
@ -44,6 +44,16 @@ class CreateModelMixin(object):
|
||||||
"""
|
"""
|
||||||
Create a model instance.
|
Create a model instance.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
def valid_creation(self, serializer):
|
||||||
|
headers = self.get_success_headers(serializer.data)
|
||||||
|
return Response(serializer.data,
|
||||||
|
status=status.HTTP_201_CREATED,
|
||||||
|
headers=headers)
|
||||||
|
|
||||||
|
def invalid_creation(self, serializer):
|
||||||
|
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||||
|
|
||||||
def create(self, request, *args, **kwargs):
|
def create(self, request, *args, **kwargs):
|
||||||
serializer = self.get_serializer(data=request.DATA, files=request.FILES)
|
serializer = self.get_serializer(data=request.DATA, files=request.FILES)
|
||||||
|
|
||||||
|
@ -51,11 +61,9 @@ class CreateModelMixin(object):
|
||||||
self.pre_save(serializer.object)
|
self.pre_save(serializer.object)
|
||||||
self.object = serializer.save(force_insert=True)
|
self.object = serializer.save(force_insert=True)
|
||||||
self.post_save(self.object, created=True)
|
self.post_save(self.object, created=True)
|
||||||
headers = self.get_success_headers(serializer.data)
|
return self.valid_creation(serializer)
|
||||||
return Response(serializer.data, status=status.HTTP_201_CREATED,
|
|
||||||
headers=headers)
|
|
||||||
|
|
||||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
return self.invalid_creation(serializer)
|
||||||
|
|
||||||
def get_success_headers(self, data):
|
def get_success_headers(self, data):
|
||||||
try:
|
try:
|
||||||
|
@ -70,6 +78,9 @@ class ListModelMixin(object):
|
||||||
"""
|
"""
|
||||||
empty_error = "Empty list and '%(class_name)s.allow_empty' is False."
|
empty_error = "Empty list and '%(class_name)s.allow_empty' is False."
|
||||||
|
|
||||||
|
def get_list_response(self, serializer):
|
||||||
|
return Response(serializer.data)
|
||||||
|
|
||||||
def list(self, request, *args, **kwargs):
|
def list(self, request, *args, **kwargs):
|
||||||
self.object_list = self.filter_queryset(self.get_queryset())
|
self.object_list = self.filter_queryset(self.get_queryset())
|
||||||
|
|
||||||
|
@ -93,7 +104,7 @@ class ListModelMixin(object):
|
||||||
else:
|
else:
|
||||||
serializer = self.get_serializer(self.object_list, many=True)
|
serializer = self.get_serializer(self.object_list, many=True)
|
||||||
|
|
||||||
return Response(serializer.data)
|
return self.get_list_response(serializer)
|
||||||
|
|
||||||
|
|
||||||
class RetrieveModelMixin(object):
|
class RetrieveModelMixin(object):
|
||||||
|
@ -120,6 +131,16 @@ class UpdateModelMixin(object):
|
||||||
# or simply return None
|
# or simply return None
|
||||||
self.check_permissions(clone_request(self.request, 'POST'))
|
self.check_permissions(clone_request(self.request, 'POST'))
|
||||||
|
|
||||||
|
def valid_update(self, serializer):
|
||||||
|
if self.object is None:
|
||||||
|
success_status_code = status.HTTP_201_CREATED
|
||||||
|
else:
|
||||||
|
success_status_code = status.HTTP_200_OK
|
||||||
|
return Response(serializer.data, status=success_status_code)
|
||||||
|
|
||||||
|
def invalid_update(self, serializer):
|
||||||
|
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||||
|
|
||||||
def update(self, request, *args, **kwargs):
|
def update(self, request, *args, **kwargs):
|
||||||
partial = kwargs.pop('partial', False)
|
partial = kwargs.pop('partial', False)
|
||||||
self.object = self.get_object_or_none()
|
self.object = self.get_object_or_none()
|
||||||
|
@ -127,11 +148,9 @@ class UpdateModelMixin(object):
|
||||||
if self.object is None:
|
if self.object is None:
|
||||||
created = True
|
created = True
|
||||||
save_kwargs = {'force_insert': True}
|
save_kwargs = {'force_insert': True}
|
||||||
success_status_code = status.HTTP_201_CREATED
|
|
||||||
else:
|
else:
|
||||||
created = False
|
created = False
|
||||||
save_kwargs = {'force_update': True}
|
save_kwargs = {'force_update': True}
|
||||||
success_status_code = status.HTTP_200_OK
|
|
||||||
|
|
||||||
serializer = self.get_serializer(self.object, data=request.DATA,
|
serializer = self.get_serializer(self.object, data=request.DATA,
|
||||||
files=request.FILES, partial=partial)
|
files=request.FILES, partial=partial)
|
||||||
|
@ -140,9 +159,9 @@ class UpdateModelMixin(object):
|
||||||
self.pre_save(serializer.object)
|
self.pre_save(serializer.object)
|
||||||
self.object = serializer.save(**save_kwargs)
|
self.object = serializer.save(**save_kwargs)
|
||||||
self.post_save(self.object, created=created)
|
self.post_save(self.object, created=created)
|
||||||
return Response(serializer.data, status=success_status_code)
|
return self.valid_update(serializer)
|
||||||
|
|
||||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
return self.invalid_update(serializer)
|
||||||
|
|
||||||
def partial_update(self, request, *args, **kwargs):
|
def partial_update(self, request, *args, **kwargs):
|
||||||
kwargs['partial'] = True
|
kwargs['partial'] = True
|
||||||
|
|
Loading…
Reference in New Issue
Block a user