aboutsummaryrefslogtreecommitdiffstats
path: root/djangorestframework/views.py
diff options
context:
space:
mode:
authorCarles Barrobés2011-07-30 22:23:53 +0200
committerCarles Barrobés2011-07-30 22:23:53 +0200
commit3b413dbb40128fb3e3b62a5359b2bd2968d626d8 (patch)
tree437d0a58ede41c649a1a926e1c4a3ca71048707f /djangorestframework/views.py
parent53fcf290811f062c54939f40db1cd7c06544f002 (diff)
downloaddjango-rest-framework-3b413dbb40128fb3e3b62a5359b2bd2968d626d8.tar.bz2
Added support for OPTIONS method, including a few unit tests
Diffstat (limited to 'djangorestframework/views.py')
-rw-r--r--djangorestframework/views.py28
1 files changed, 25 insertions, 3 deletions
diff --git a/djangorestframework/views.py b/djangorestframework/views.py
index 5f8e84cd..ffb389d9 100644
--- a/djangorestframework/views.py
+++ b/djangorestframework/views.py
@@ -13,6 +13,7 @@ from djangorestframework.compat import View as DjangoView
from djangorestframework.response import Response, ErrorResponse
from djangorestframework.mixins import *
from djangorestframework import resources, renderers, parsers, authentication, permissions, status
+from djangorestframework.utils.description import get_name, get_description
__all__ = (
@@ -140,8 +141,13 @@ class View(ResourceMixin, RequestMixin, ResponseMixin, AuthMixin, DjangoView):
else:
response = Response(status.HTTP_204_NO_CONTENT)
- # Pre-serialize filtering (eg filter complex objects into natively serializable types)
- response.cleaned_content = self.filter_response(response.raw_content)
+ if request.method == 'OPTIONS':
+ # do not filter the response for HTTP OPTIONS, else the response fields are lost,
+ # as they do not correspond with model fields
+ response.cleaned_content = response.raw_content
+ else:
+ # Pre-serialize filtering (eg filter complex objects into natively serializable types)
+ response.cleaned_content = self.filter_response(response.raw_content)
except ErrorResponse, exc:
response = exc.response
@@ -156,7 +162,23 @@ class View(ResourceMixin, RequestMixin, ResponseMixin, AuthMixin, DjangoView):
# merge with headers possibly set at some point in the view
response.headers.update(self.headers)
- return self.render(response)
+ return self.render(response)
+
+
+ def options(self, request, *args, **kwargs):
+ response_obj = {
+ 'name' : get_name(self),
+ 'description' : get_description(self),
+ 'renders': self._rendered_media_types,
+ 'parses': self._parsed_media_types,
+ }
+ form = self.get_bound_form()
+ if form is not None:
+ field_name_types = {}
+ for name, field in form.fields.iteritems():
+ field_name_types[name] = field.__class__.__name__
+ response_obj['fields'] = field_name_types
+ return response_obj
class ModelView(View):