aboutsummaryrefslogtreecommitdiffstats
path: root/examples/requestexample
diff options
context:
space:
mode:
authorSébastien Piquemal2012-01-25 00:11:54 +0200
committerSébastien Piquemal2012-01-25 00:11:54 +0200
commit152c385f4de37558fe4e522abad5b97f0cf7ddce (patch)
tree4950e8832756e74b998fd273c4addfcc186e842d /examples/requestexample
parent714a90d7559885c15e5b2c86ef6f457fdf857ee0 (diff)
downloaddjango-rest-framework-152c385f4de37558fe4e522abad5b97f0cf7ddce.tar.bz2
enhanced request how-to + example
Diffstat (limited to 'examples/requestexample')
-rw-r--r--examples/requestexample/__init__.py0
-rw-r--r--examples/requestexample/models.py3
-rw-r--r--examples/requestexample/tests.py0
-rw-r--r--examples/requestexample/urls.py7
-rw-r--r--examples/requestexample/views.py76
5 files changed, 86 insertions, 0 deletions
diff --git a/examples/requestexample/__init__.py b/examples/requestexample/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/examples/requestexample/__init__.py
diff --git a/examples/requestexample/models.py b/examples/requestexample/models.py
new file mode 100644
index 00000000..71a83623
--- /dev/null
+++ b/examples/requestexample/models.py
@@ -0,0 +1,3 @@
+from django.db import models
+
+# Create your models here.
diff --git a/examples/requestexample/tests.py b/examples/requestexample/tests.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/examples/requestexample/tests.py
diff --git a/examples/requestexample/urls.py b/examples/requestexample/urls.py
new file mode 100644
index 00000000..a5e3356a
--- /dev/null
+++ b/examples/requestexample/urls.py
@@ -0,0 +1,7 @@
+from django.conf.urls.defaults import patterns, url
+from requestexample.views import RequestExampleView, MockView, EchoRequestContentView
+
+urlpatterns = patterns('',
+ url(r'^$', RequestExampleView.as_view(), name='request-example'),
+ url(r'^content$', MockView.as_view(view_class=EchoRequestContentView), name='request-content'),
+)
diff --git a/examples/requestexample/views.py b/examples/requestexample/views.py
new file mode 100644
index 00000000..aa8a734f
--- /dev/null
+++ b/examples/requestexample/views.py
@@ -0,0 +1,76 @@
+from djangorestframework.compat import View
+from django.http import HttpResponse
+from django.core.urlresolvers import reverse
+
+from djangorestframework.mixins import RequestMixin
+from djangorestframework.views import View as DRFView
+from djangorestframework import parsers
+
+
+class RequestExampleView(DRFView):
+ """
+ A container view for request examples.
+ """
+
+ def get(self, request):
+ return [{'name': 'request.DATA Example', 'url': reverse('request-content')},]
+
+
+class MyBaseViewUsingEnhancedRequest(RequestMixin, View):
+ """
+ Base view enabling the usage of enhanced requests with user defined views.
+ """
+
+ parsers = parsers.DEFAULT_PARSERS
+
+ def dispatch(self, request, *args, **kwargs):
+ self.request = request
+ request = self.get_request()
+ return super(MyBaseViewUsingEnhancedRequest, self).dispatch(request, *args, **kwargs)
+
+
+class EchoRequestContentView(MyBaseViewUsingEnhancedRequest):
+ """
+ A view that just reads the items in `request.DATA` and echoes them back.
+ """
+
+ def post(self, request, *args, **kwargs):
+ return HttpResponse(("Found %s in request.DATA, content : %s" %
+ (type(request.DATA), request.DATA)))
+
+ def put(self, request, *args, **kwargs):
+ return HttpResponse(("Found %s in request.DATA, content : %s" %
+ (type(request.DATA), request.DATA)))
+
+
+class MockView(DRFView):
+ """
+ A view that just acts as a proxy to call non-djangorestframework views, while still
+ displaying the browsable API interface.
+ """
+
+ view_class = None
+
+ def dispatch(self, request, *args, **kwargs):
+ self.request = request
+ if self.get_request().method in ['PUT', 'POST']:
+ self.response = self.view_class.as_view()(request, *args, **kwargs)
+ return super(MockView, self).dispatch(request, *args, **kwargs)
+
+ def get(self, request, *args, **kwargs):
+ return
+
+ def put(self, request, *args, **kwargs):
+ return self.response.content
+
+ def post(self, request, *args, **kwargs):
+ return self.response.content
+
+ def __getattribute__(self, name):
+ if name == '__name__':
+ return self.view_class.__name__
+ elif name == '__doc__':
+ return self.view_class.__doc__
+ else:
+ return super(MockView, self).__getattribute__(name)
+