aboutsummaryrefslogtreecommitdiffstats
path: root/djangorestframework/views.py
diff options
context:
space:
mode:
authorTom Christie2011-12-09 04:40:14 -0800
committerTom Christie2011-12-09 04:40:14 -0800
commit325ee1e3a459aa33c045d6574d48a40e403b3e92 (patch)
tree4bed79b9cd39b517224c6bbb2b962ddcc537272f /djangorestframework/views.py
parent20f8956c8f92f2a6fe812bce80f4ecc188450cf1 (diff)
parent3b413dbb40128fb3e3b62a5359b2bd2968d626d8 (diff)
downloaddjango-rest-framework-325ee1e3a459aa33c045d6574d48a40e403b3e92.tar.bz2
Merge pull request #62 from txels/master
HTTP OPTIONS support
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):