aboutsummaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/mixin/urls.py9
-rw-r--r--examples/objectstore/views.py14
-rw-r--r--examples/permissionsexample/views.py9
-rw-r--r--examples/pygments_api/views.py11
-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.py9
-rw-r--r--examples/requestexample/views.py44
-rw-r--r--examples/resourceexample/views.py8
-rw-r--r--examples/sandbox/views.py9
-rw-r--r--examples/settings.py1
-rw-r--r--examples/urls.py1
-rw-r--r--examples/views.py32
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__