From 705af6601528c679068e05c56aebfa9436cfccc2 Mon Sep 17 00:00:00 2001 From: Andrew Somerville Date: Thu, 16 Jul 2015 00:19:51 -0400 Subject: [PATCH] add 'metadata' mixin to handle options requests re tomchristie/django-rest-framework#3157 --- rest_framework/mixins.py | 11 +++++++++++ rest_framework/viewsets.py | 1 + 2 files changed, 12 insertions(+) diff --git a/rest_framework/mixins.py b/rest_framework/mixins.py index 1104aa29c..a5ec9c3d9 100644 --- a/rest_framework/mixins.py +++ b/rest_framework/mixins.py @@ -89,3 +89,14 @@ class DestroyModelMixin(object): def perform_destroy(self, instance): instance.delete() + + +class MetadataModelMixin(object): + def metadata(self, request, *args, **kwargs): + """ + Handler method for HTTP 'OPTIONS' request. + """ + if self.metadata_class is None: + return self.http_method_not_allowed(request, *args, **kwargs) + data = self.metadata_class().determine_metadata(request, self) + return Response(data, status=status.HTTP_200_OK) diff --git a/rest_framework/viewsets.py b/rest_framework/viewsets.py index 819deb430..7f3c07ddd 100644 --- a/rest_framework/viewsets.py +++ b/rest_framework/viewsets.py @@ -146,6 +146,7 @@ class ModelViewSet(mixins.CreateModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin, mixins.ListModelMixin, + mixins.MetadataModelMixin, GenericViewSet): """ A viewset that provides default `create()`, `retrieve()`, `update()`,