mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-07-27 08:29:59 +03:00
added new Generic api view that Concrete all views into one endpoint
This commit is contained in:
parent
efc7c1d664
commit
d74a5bfd18
|
@ -39,6 +39,9 @@ class GenericAPIView(views.APIView):
|
||||||
lookup_field = 'pk'
|
lookup_field = 'pk'
|
||||||
lookup_url_kwarg = None
|
lookup_url_kwarg = None
|
||||||
|
|
||||||
|
# set it to lookup field if you want to enable ListCreateRetrieveUpdateDestroyAPIView
|
||||||
|
lookup_arg = None
|
||||||
|
|
||||||
# The filter backend classes to use for queryset filtering
|
# The filter backend classes to use for queryset filtering
|
||||||
filter_backends = api_settings.DEFAULT_FILTER_BACKENDS
|
filter_backends = api_settings.DEFAULT_FILTER_BACKENDS
|
||||||
|
|
||||||
|
@ -92,7 +95,19 @@ class GenericAPIView(views.APIView):
|
||||||
(self.__class__.__name__, lookup_url_kwarg)
|
(self.__class__.__name__, lookup_url_kwarg)
|
||||||
)
|
)
|
||||||
|
|
||||||
filter_kwargs = {self.lookup_field: self.kwargs[lookup_url_kwarg]}
|
lookup_arg = self.lookup_arg
|
||||||
|
|
||||||
|
assert lookup_arg in self.request.GET, (
|
||||||
|
'Expected view %s to be called with a URL keyword argument '
|
||||||
|
'named "%s". Fix your URL conf, or set the `.lookup_arg` '
|
||||||
|
'attribute on the view correctly.' %
|
||||||
|
(self.__class__.__name__, lookup_arg)
|
||||||
|
)
|
||||||
|
|
||||||
|
filter_kwargs = {self.lookup_field: self.request.GET[lookup_arg]} \
|
||||||
|
if lookup_arg is not None \
|
||||||
|
else {self.lookup_field: self.kwargs[lookup_url_kwarg]}
|
||||||
|
|
||||||
obj = get_object_or_404(queryset, **filter_kwargs)
|
obj = get_object_or_404(queryset, **filter_kwargs)
|
||||||
|
|
||||||
# May raise a permission denied
|
# May raise a permission denied
|
||||||
|
@ -186,6 +201,7 @@ class CreateAPIView(mixins.CreateModelMixin,
|
||||||
"""
|
"""
|
||||||
Concrete view for creating a model instance.
|
Concrete view for creating a model instance.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def post(self, request, *args, **kwargs):
|
def post(self, request, *args, **kwargs):
|
||||||
return self.create(request, *args, **kwargs)
|
return self.create(request, *args, **kwargs)
|
||||||
|
|
||||||
|
@ -195,6 +211,7 @@ class ListAPIView(mixins.ListModelMixin,
|
||||||
"""
|
"""
|
||||||
Concrete view for listing a queryset.
|
Concrete view for listing a queryset.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
return self.list(request, *args, **kwargs)
|
return self.list(request, *args, **kwargs)
|
||||||
|
|
||||||
|
@ -204,6 +221,7 @@ class RetrieveAPIView(mixins.RetrieveModelMixin,
|
||||||
"""
|
"""
|
||||||
Concrete view for retrieving a model instance.
|
Concrete view for retrieving a model instance.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
return self.retrieve(request, *args, **kwargs)
|
return self.retrieve(request, *args, **kwargs)
|
||||||
|
|
||||||
|
@ -213,6 +231,7 @@ class DestroyAPIView(mixins.DestroyModelMixin,
|
||||||
"""
|
"""
|
||||||
Concrete view for deleting a model instance.
|
Concrete view for deleting a model instance.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def delete(self, request, *args, **kwargs):
|
def delete(self, request, *args, **kwargs):
|
||||||
return self.destroy(request, *args, **kwargs)
|
return self.destroy(request, *args, **kwargs)
|
||||||
|
|
||||||
|
@ -222,6 +241,7 @@ class UpdateAPIView(mixins.UpdateModelMixin,
|
||||||
"""
|
"""
|
||||||
Concrete view for updating a model instance.
|
Concrete view for updating a model instance.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def put(self, request, *args, **kwargs):
|
def put(self, request, *args, **kwargs):
|
||||||
return self.update(request, *args, **kwargs)
|
return self.update(request, *args, **kwargs)
|
||||||
|
|
||||||
|
@ -235,6 +255,7 @@ class ListCreateAPIView(mixins.ListModelMixin,
|
||||||
"""
|
"""
|
||||||
Concrete view for listing a queryset or creating a model instance.
|
Concrete view for listing a queryset or creating a model instance.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
return self.list(request, *args, **kwargs)
|
return self.list(request, *args, **kwargs)
|
||||||
|
|
||||||
|
@ -248,6 +269,7 @@ class RetrieveUpdateAPIView(mixins.RetrieveModelMixin,
|
||||||
"""
|
"""
|
||||||
Concrete view for retrieving, updating a model instance.
|
Concrete view for retrieving, updating a model instance.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
return self.retrieve(request, *args, **kwargs)
|
return self.retrieve(request, *args, **kwargs)
|
||||||
|
|
||||||
|
@ -264,6 +286,7 @@ class RetrieveDestroyAPIView(mixins.RetrieveModelMixin,
|
||||||
"""
|
"""
|
||||||
Concrete view for retrieving or deleting a model instance.
|
Concrete view for retrieving or deleting a model instance.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
return self.retrieve(request, *args, **kwargs)
|
return self.retrieve(request, *args, **kwargs)
|
||||||
|
|
||||||
|
@ -278,6 +301,7 @@ class RetrieveUpdateDestroyAPIView(mixins.RetrieveModelMixin,
|
||||||
"""
|
"""
|
||||||
Concrete view for retrieving, updating or deleting a model instance.
|
Concrete view for retrieving, updating or deleting a model instance.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
return self.retrieve(request, *args, **kwargs)
|
return self.retrieve(request, *args, **kwargs)
|
||||||
|
|
||||||
|
@ -289,3 +313,31 @@ class RetrieveUpdateDestroyAPIView(mixins.RetrieveModelMixin,
|
||||||
|
|
||||||
def delete(self, request, *args, **kwargs):
|
def delete(self, request, *args, **kwargs):
|
||||||
return self.destroy(request, *args, **kwargs)
|
return self.destroy(request, *args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class ListCreateRetrieveUpdateDestroyAPIView(mixins.ListModelMixin,
|
||||||
|
mixins.CreateModelMixin,
|
||||||
|
mixins.RetrieveModelMixin,
|
||||||
|
mixins.UpdateModelMixin,
|
||||||
|
mixins.DestroyModelMixin,
|
||||||
|
GenericAPIView):
|
||||||
|
"""
|
||||||
|
Concrete view for listing ,creating ,retrieving, updating or deleting a model instance.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def get(self, request, *args, **kwargs):
|
||||||
|
if self.lookup_arg in request.GET:
|
||||||
|
return self.retrieve(request, *args, **kwargs)
|
||||||
|
return self.list(request, *args, **kwargs)
|
||||||
|
|
||||||
|
def post(self, request, *args, **kwargs):
|
||||||
|
return self.create(request, *args, **kwargs)
|
||||||
|
|
||||||
|
def put(self, request, *args, **kwargs):
|
||||||
|
return self.update(request, *args, **kwargs)
|
||||||
|
|
||||||
|
def patch(self, request, *args, **kwargs):
|
||||||
|
return self.partial_update(request, *args, **kwargs)
|
||||||
|
|
||||||
|
def delete(self, request, *args, **kwargs):
|
||||||
|
return self.destroy(request, *args, **kwargs)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user