diff options
| author | Tom Christie | 2012-02-17 09:19:13 +0000 |
|---|---|---|
| committer | Tom Christie | 2012-02-17 09:19:13 +0000 |
| commit | fbf76c87affc88f04bb0d0acaecc6af6442ba921 (patch) | |
| tree | 5a75cbb061829694c4f714ae0e8413c584131739 /examples | |
| parent | 426493a78f3003fdba39053b6af23b93b312a777 (diff) | |
| parent | c04cb5145c4398cfac090ca7eef032296a04446f (diff) | |
| download | django-rest-framework-fbf76c87affc88f04bb0d0acaecc6af6442ba921.tar.bz2 | |
Merge git://github.com/sebpiq/django-rest-framework into develop
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/mixin/urls.py | 9 | ||||
| -rw-r--r-- | examples/objectstore/views.py | 14 | ||||
| -rw-r--r-- | examples/permissionsexample/views.py | 9 | ||||
| -rw-r--r-- | examples/pygments_api/views.py | 11 | ||||
| -rw-r--r-- | examples/requestexample/__init__.py | 0 | ||||
| -rw-r--r-- | examples/requestexample/models.py | 3 | ||||
| -rw-r--r-- | examples/requestexample/tests.py | 0 | ||||
| -rw-r--r-- | examples/requestexample/urls.py | 9 | ||||
| -rw-r--r-- | examples/requestexample/views.py | 44 | ||||
| -rw-r--r-- | examples/resourceexample/views.py | 8 | ||||
| -rw-r--r-- | examples/sandbox/views.py | 9 | ||||
| -rw-r--r-- | examples/settings.py | 1 | ||||
| -rw-r--r-- | examples/urls.py | 1 | ||||
| -rw-r--r-- | examples/views.py | 32 |
14 files changed, 124 insertions, 26 deletions
diff --git a/examples/mixin/urls.py b/examples/mixin/urls.py index a3da3b2c..58cf370c 100644 --- a/examples/mixin/urls.py +++ b/examples/mixin/urls.py @@ -10,12 +10,13 @@ from django.core.urlresolvers import reverse class ExampleView(ResponseMixin, View): """An example view using Django 1.3's class based views. Uses djangorestframework's RendererMixin to provide support for multiple output formats.""" - renderers = DEFAULT_RENDERERS + renderer_classes = DEFAULT_RENDERERS def get(self, request): - response = Response(200, {'description': 'Some example content', - 'url': reverse('mixin-view')}) - return self.render(response) + response = Response({'description': 'Some example content', + 'url': reverse('mixin-view')}, status=200) + self.response = self.prepare_response(response) + return self.response urlpatterns = patterns('', diff --git a/examples/objectstore/views.py b/examples/objectstore/views.py index d85ed9f4..ae545394 100644 --- a/examples/objectstore/views.py +++ b/examples/objectstore/views.py @@ -41,7 +41,7 @@ class ObjectStoreRoot(View): filepaths = [os.path.join(OBJECT_STORE_DIR, file) for file in os.listdir(OBJECT_STORE_DIR) if not file.startswith('.')] ctime_sorted_basenames = [item[0] for item in sorted([(os.path.basename(path), os.path.getctime(path)) for path in filepaths], key=operator.itemgetter(1), reverse=True)] - return [reverse('stored-object', kwargs={'key':key}) for key in ctime_sorted_basenames] + return Response([reverse('stored-object', kwargs={'key':key}) for key in ctime_sorted_basenames]) def post(self, request): """ @@ -51,7 +51,8 @@ class ObjectStoreRoot(View): pathname = os.path.join(OBJECT_STORE_DIR, key) pickle.dump(self.CONTENT, open(pathname, 'wb')) remove_oldest_files(OBJECT_STORE_DIR, MAX_FILES) - return Response(status.HTTP_201_CREATED, self.CONTENT, {'Location': reverse('stored-object', kwargs={'key':key})}) + self.headers['Location'] = reverse('stored-object', kwargs={'key':key}) + return Response(self.CONTENT, status=status.HTTP_201_CREATED) class StoredObject(View): @@ -66,8 +67,8 @@ class StoredObject(View): """ pathname = os.path.join(OBJECT_STORE_DIR, key) if not os.path.exists(pathname): - return Response(status.HTTP_404_NOT_FOUND) - return pickle.load(open(pathname, 'rb')) + return Response(status=status.HTTP_404_NOT_FOUND) + return Response(pickle.load(open(pathname, 'rb'))) def put(self, request, key): """ @@ -75,7 +76,7 @@ class StoredObject(View): """ pathname = os.path.join(OBJECT_STORE_DIR, key) pickle.dump(self.CONTENT, open(pathname, 'wb')) - return self.CONTENT + return Response(self.CONTENT) def delete(self, request, key): """ @@ -83,5 +84,6 @@ class StoredObject(View): """ pathname = os.path.join(OBJECT_STORE_DIR, key) if not os.path.exists(pathname): - return Response(status.HTTP_404_NOT_FOUND) + return Response(status=status.HTTP_404_NOT_FOUND) os.remove(pathname) + return Response() diff --git a/examples/permissionsexample/views.py b/examples/permissionsexample/views.py index 86f458f8..bcf6619c 100644 --- a/examples/permissionsexample/views.py +++ b/examples/permissionsexample/views.py @@ -1,4 +1,5 @@ from djangorestframework.views import View +from djangorestframework.response import Response from djangorestframework.permissions import PerUserThrottling, IsAuthenticated from django.core.urlresolvers import reverse @@ -9,7 +10,7 @@ class PermissionsExampleView(View): """ def get(self, request): - return [ + return Response([ { 'name': 'Throttling Example', 'url': reverse('throttled-resource') @@ -18,7 +19,7 @@ class PermissionsExampleView(View): 'name': 'Logged in example', 'url': reverse('loggedin-resource') }, - ] + ]) class ThrottlingExampleView(View): @@ -36,7 +37,7 @@ class ThrottlingExampleView(View): """ Handle GET requests. """ - return "Successful response to GET request because throttle is not yet active." + return Response("Successful response to GET request because throttle is not yet active.") class LoggedInExampleView(View): @@ -49,4 +50,4 @@ class LoggedInExampleView(View): permissions = (IsAuthenticated, ) def get(self, request): - return 'You have permission to view this resource' + return Response('You have permission to view this resource') diff --git a/examples/pygments_api/views.py b/examples/pygments_api/views.py index ffea60ae..852b6730 100644 --- a/examples/pygments_api/views.py +++ b/examples/pygments_api/views.py @@ -61,7 +61,7 @@ class PygmentsRoot(View): Return a list of all currently existing snippets. """ unique_ids = [os.path.split(f)[1] for f in list_dir_sorted_by_ctime(HIGHLIGHTED_CODE_DIR)] - return [reverse('pygments-instance', args=[unique_id]) for unique_id in unique_ids] + return Response([reverse('pygments-instance', args=[unique_id]) for unique_id in unique_ids]) def post(self, request): """ @@ -81,7 +81,8 @@ class PygmentsRoot(View): remove_oldest_files(HIGHLIGHTED_CODE_DIR, MAX_FILES) - return Response(status.HTTP_201_CREATED, headers={'Location': reverse('pygments-instance', args=[unique_id])}) + self.headers['Location'] = reverse('pygments-instance', args=[unique_id]) + return Response(status=status.HTTP_201_CREATED) class PygmentsInstance(View): @@ -89,7 +90,7 @@ class PygmentsInstance(View): Simply return the stored highlighted HTML file with the correct mime type. This Resource only renders HTML and uses a standard HTML renderer rather than the renderers.DocumentingHTMLRenderer class. """ - renderers = (HTMLRenderer,) + renderer_classes = (HTMLRenderer,) def get(self, request, unique_id): """ @@ -98,7 +99,7 @@ class PygmentsInstance(View): pathname = os.path.join(HIGHLIGHTED_CODE_DIR, unique_id) if not os.path.exists(pathname): return Response(status.HTTP_404_NOT_FOUND) - return open(pathname, 'r').read() + return Response(open(pathname, 'r').read()) def delete(self, request, unique_id): """ @@ -107,5 +108,5 @@ class PygmentsInstance(View): pathname = os.path.join(HIGHLIGHTED_CODE_DIR, unique_id) if not os.path.exists(pathname): return Response(status.HTTP_404_NOT_FOUND) - return os.remove(pathname) + return Response(os.remove(pathname)) 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..d644a599 --- /dev/null +++ b/examples/requestexample/urls.py @@ -0,0 +1,9 @@ +from django.conf.urls.defaults import patterns, url +from requestexample.views import RequestExampleView, EchoRequestContentView +from examples.views import ProxyView + + +urlpatterns = patterns('', + url(r'^$', RequestExampleView.as_view(), name='request-example'), + url(r'^content$', ProxyView.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..b5d2c1e7 --- /dev/null +++ b/examples/requestexample/views.py @@ -0,0 +1,44 @@ +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 +from djangorestframework.response import Response + + +class RequestExampleView(DRFView): + """ + A container view for request examples. + """ + + def get(self, request): + return Response([{'name': 'request.DATA Example', 'url': reverse('request-content')},]) + + +class MyBaseViewUsingEnhancedRequest(RequestMixin, View): + """ + Base view enabling the usage of enhanced requests with user defined views. + """ + + parser_classes = parsers.DEFAULT_PARSERS + + def dispatch(self, request, *args, **kwargs): + self.request = request = self.create_request(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))) + diff --git a/examples/resourceexample/views.py b/examples/resourceexample/views.py index e6b5eeb8..44c4176a 100644 --- a/examples/resourceexample/views.py +++ b/examples/resourceexample/views.py @@ -16,12 +16,12 @@ class ExampleView(View): """ Handle GET requests, returning a list of URLs pointing to 3 other views. """ - return {"Some other resources": [reverse('another-example', kwargs={'num':num}) for num in range(3)]} + return Response({"Some other resources": [reverse('another-example', kwargs={'num':num}) for num in range(3)]}) class AnotherExampleView(View): """ - A basic view, that can be handle GET and POST requests. + A basic view, that can handle GET and POST requests. Applies some simple form validation on POST requests. """ form = MyForm @@ -33,7 +33,7 @@ class AnotherExampleView(View): """ if int(num) > 2: return Response(status.HTTP_404_NOT_FOUND) - return "GET request to AnotherExampleResource %s" % num + return Response("GET request to AnotherExampleResource %s" % num) def post(self, request, num): """ @@ -42,4 +42,4 @@ class AnotherExampleView(View): """ if int(num) > 2: return Response(status.HTTP_404_NOT_FOUND) - return "POST request to AnotherExampleResource %s, with content: %s" % (num, repr(self.CONTENT)) + return Response("POST request to AnotherExampleResource %s, with content: %s" % (num, repr(self.CONTENT))) diff --git a/examples/sandbox/views.py b/examples/sandbox/views.py index f7a3542d..49b59b40 100644 --- a/examples/sandbox/views.py +++ b/examples/sandbox/views.py @@ -2,6 +2,7 @@ from django.core.urlresolvers import reverse from djangorestframework.views import View +from djangorestframework.response import Response class Sandbox(View): @@ -23,15 +24,17 @@ class Sandbox(View): 5. A code highlighting API. 6. A blog posts and comments API. 7. A basic example using permissions. + 8. A basic example using enhanced request. Please feel free to browse, create, edit and delete the resources in these examples.""" def get(self, request): - return [{'name': 'Simple Resource example', 'url': reverse('example-resource')}, + return Response([{'name': 'Simple Resource example', 'url': reverse('example-resource')}, {'name': 'Simple ModelResource example', 'url': reverse('model-resource-root')}, {'name': 'Simple Mixin-only example', 'url': reverse('mixin-view')}, {'name': 'Object store API', 'url': reverse('object-store-root')}, {'name': 'Code highlighting API', 'url': reverse('pygments-root')}, {'name': 'Blog posts API', 'url': reverse('blog-posts-root')}, - {'name': 'Permissions example', 'url': reverse('permissions-example')} - ] + {'name': 'Permissions example', 'url': reverse('permissions-example')}, + {'name': 'Simple request mixin example', 'url': reverse('request-example')} + ]) diff --git a/examples/settings.py b/examples/settings.py index 5ff9fd0f..d7da6b0a 100644 --- a/examples/settings.py +++ b/examples/settings.py @@ -106,6 +106,7 @@ INSTALLED_APPS = ( 'pygments_api', 'blogpost', 'permissionsexample', + 'requestexample', ) import os diff --git a/examples/urls.py b/examples/urls.py index 33297b55..f246828a 100644 --- a/examples/urls.py +++ b/examples/urls.py @@ -15,6 +15,7 @@ urlpatterns = patterns('', (r'^pygments/', include('pygments_api.urls')), (r'^blog-post/', include('blogpost.urls')), (r'^permissions-example/', include('permissionsexample.urls')), + (r'^request-example/', include('requestexample.urls')), (r'^', include('djangorestframework.urls')), ) diff --git a/examples/views.py b/examples/views.py new file mode 100644 index 00000000..e0e4c3c4 --- /dev/null +++ b/examples/views.py @@ -0,0 +1,32 @@ +from djangorestframework.views import View +from djangorestframework.response import Response + + +class ProxyView(View): + """ + 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 = self.create_request(request) + if request.method in ['PUT', 'POST']: + self.response = self.view_class.as_view()(request, *args, **kwargs) + return super(ProxyView, self).dispatch(request, *args, **kwargs) + + def get(self, request, *args, **kwargs): + return Response() + + def put(self, request, *args, **kwargs): + return Response(self.response.content) + + def post(self, request, *args, **kwargs): + return Response(self.response.content) + + def get_name(self): + return self.view_class.__name__ + + def get_description(self, html): + return self.view_class.__doc__ |
