From 152c385f4de37558fe4e522abad5b97f0cf7ddce Mon Sep 17 00:00:00 2001 From: Sébastien Piquemal Date: Wed, 25 Jan 2012 00:11:54 +0200 Subject: enhanced request how-to + example --- examples/requestexample/__init__.py | 0 examples/requestexample/models.py | 3 ++ examples/requestexample/tests.py | 0 examples/requestexample/urls.py | 7 ++++ examples/requestexample/views.py | 76 +++++++++++++++++++++++++++++++++++++ 5 files changed, 86 insertions(+) create mode 100644 examples/requestexample/__init__.py create mode 100644 examples/requestexample/models.py create mode 100644 examples/requestexample/tests.py create mode 100644 examples/requestexample/urls.py create mode 100644 examples/requestexample/views.py (limited to 'examples/requestexample') diff --git a/examples/requestexample/__init__.py b/examples/requestexample/__init__.py new file mode 100644 index 00000000..e69de29b 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 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) + -- cgit v1.2.3 From 6963fd3623ee217fe489abb25f0ffa8c0781e4cd Mon Sep 17 00:00:00 2001 From: Sébastien Piquemal Date: Tue, 7 Feb 2012 16:22:14 +0200 Subject: some docs for Request/Response/mixins --- examples/requestexample/views.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'examples/requestexample') diff --git a/examples/requestexample/views.py b/examples/requestexample/views.py index aa8a734f..5411a323 100644 --- a/examples/requestexample/views.py +++ b/examples/requestexample/views.py @@ -21,11 +21,10 @@ class MyBaseViewUsingEnhancedRequest(RequestMixin, View): Base view enabling the usage of enhanced requests with user defined views. """ - parsers = parsers.DEFAULT_PARSERS + parser_classes = parsers.DEFAULT_PARSERS def dispatch(self, request, *args, **kwargs): - self.request = request - request = self.get_request() + request = self.prepare_request(request) return super(MyBaseViewUsingEnhancedRequest, self).dispatch(request, *args, **kwargs) -- cgit v1.2.3 From 2cdff1b01e3aca6c56cef433e786e3ae75362739 Mon Sep 17 00:00:00 2001 From: Sébastien Piquemal Date: Tue, 7 Feb 2012 16:52:15 +0200 Subject: modified examples, somethin' still broken, can't find what --- examples/requestexample/urls.py | 4 +++- examples/requestexample/views.py | 35 ++--------------------------------- 2 files changed, 5 insertions(+), 34 deletions(-) (limited to 'examples/requestexample') diff --git a/examples/requestexample/urls.py b/examples/requestexample/urls.py index a5e3356a..3c31e4a9 100644 --- a/examples/requestexample/urls.py +++ b/examples/requestexample/urls.py @@ -1,5 +1,7 @@ from django.conf.urls.defaults import patterns, url -from requestexample.views import RequestExampleView, MockView, EchoRequestContentView +from requestexample.views import RequestExampleView, EchoRequestContentView +from examples.views import MockView + urlpatterns = patterns('', url(r'^$', RequestExampleView.as_view(), name='request-example'), diff --git a/examples/requestexample/views.py b/examples/requestexample/views.py index 5411a323..876db864 100644 --- a/examples/requestexample/views.py +++ b/examples/requestexample/views.py @@ -5,6 +5,7 @@ from django.core.urlresolvers import reverse from djangorestframework.mixins import RequestMixin from djangorestframework.views import View as DRFView from djangorestframework import parsers +from djangorestframework.response import Response class RequestExampleView(DRFView): @@ -13,7 +14,7 @@ class RequestExampleView(DRFView): """ def get(self, request): - return [{'name': 'request.DATA Example', 'url': reverse('request-content')},] + return Response([{'name': 'request.DATA Example', 'url': reverse('request-content')},]) class MyBaseViewUsingEnhancedRequest(RequestMixin, View): @@ -41,35 +42,3 @@ class EchoRequestContentView(MyBaseViewUsingEnhancedRequest): 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) - -- cgit v1.2.3 From b33579a7a18c2cbc6e3789d4a7dc78c82fb0fe80 Mon Sep 17 00:00:00 2001 From: Sébastien Piquemal Date: Fri, 10 Feb 2012 11:05:20 +0200 Subject: attempt at fixing the examples --- examples/requestexample/urls.py | 4 ++-- examples/requestexample/views.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'examples/requestexample') diff --git a/examples/requestexample/urls.py b/examples/requestexample/urls.py index 3c31e4a9..d644a599 100644 --- a/examples/requestexample/urls.py +++ b/examples/requestexample/urls.py @@ -1,9 +1,9 @@ from django.conf.urls.defaults import patterns, url from requestexample.views import RequestExampleView, EchoRequestContentView -from examples.views import MockView +from examples.views import ProxyView urlpatterns = patterns('', url(r'^$', RequestExampleView.as_view(), name='request-example'), - url(r'^content$', MockView.as_view(view_class=EchoRequestContentView), name='request-content'), + url(r'^content$', ProxyView.as_view(view_class=EchoRequestContentView), name='request-content'), ) diff --git a/examples/requestexample/views.py b/examples/requestexample/views.py index 876db864..b5d2c1e7 100644 --- a/examples/requestexample/views.py +++ b/examples/requestexample/views.py @@ -25,7 +25,7 @@ class MyBaseViewUsingEnhancedRequest(RequestMixin, View): parser_classes = parsers.DEFAULT_PARSERS def dispatch(self, request, *args, **kwargs): - request = self.prepare_request(request) + self.request = request = self.create_request(request) return super(MyBaseViewUsingEnhancedRequest, self).dispatch(request, *args, **kwargs) -- cgit v1.2.3