From 6ce5b643fbeab322d85dbaed87d11ffb950c5bed Mon Sep 17 00:00:00 2001
From: tom christie tom@tomchristie.com
Date: Tue, 1 Feb 2011 22:37:51 +0000
Subject: Added resourceexample, moved simpleexample to modelresourceexample
---
docs/templates/layout.html | 15 +++++++++++++
examples/modelresourceexample/__init__.py | 0
examples/modelresourceexample/models.py | 23 ++++++++++++++++++++
examples/modelresourceexample/urls.py | 6 ++++++
examples/modelresourceexample/views.py | 18 ++++++++++++++++
examples/resourceexample/__init__.py | 0
examples/resourceexample/urls.py | 6 ++++++
examples/resourceexample/views.py | 35 +++++++++++++++++++++++++++++++
examples/settings.py | 4 +++-
examples/simpleexample/__init__.py | 0
examples/simpleexample/models.py | 23 --------------------
examples/simpleexample/urls.py | 6 ------
examples/simpleexample/views.py | 18 ----------------
examples/urls.py | 20 +++++++++++++-----
14 files changed, 121 insertions(+), 53 deletions(-)
create mode 100644 examples/modelresourceexample/__init__.py
create mode 100644 examples/modelresourceexample/models.py
create mode 100644 examples/modelresourceexample/urls.py
create mode 100644 examples/modelresourceexample/views.py
create mode 100644 examples/resourceexample/__init__.py
create mode 100644 examples/resourceexample/urls.py
create mode 100644 examples/resourceexample/views.py
delete mode 100644 examples/simpleexample/__init__.py
delete mode 100644 examples/simpleexample/models.py
delete mode 100644 examples/simpleexample/urls.py
delete mode 100644 examples/simpleexample/views.py
diff --git a/docs/templates/layout.html b/docs/templates/layout.html
index 86ac3f33..6ba9e6ff 100644
--- a/docs/templates/layout.html
+++ b/docs/templates/layout.html
@@ -8,4 +8,19 @@
{% block htmltitle %}
{% if pagename == 'index' %}Django REST framework{% else %}{{ titleprefix }}{{ title|striptags|e }}{% endif %}{% endblock %}
+{% block extrahead %}
+{{ super() }}
+
+{% endblock %}
diff --git a/examples/modelresourceexample/__init__.py b/examples/modelresourceexample/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/examples/modelresourceexample/models.py b/examples/modelresourceexample/models.py
new file mode 100644
index 00000000..036501d0
--- /dev/null
+++ b/examples/modelresourceexample/models.py
@@ -0,0 +1,23 @@
+from django.db import models
+
+MAX_INSTANCES = 10
+
+class MyModel(models.Model):
+ foo = models.BooleanField()
+ bar = models.IntegerField(help_text='Must be an integer.')
+ baz = models.CharField(max_length=32, help_text='Free text. Max length 32 chars.')
+ created = models.DateTimeField(auto_now_add=True)
+
+ class Meta:
+ ordering = ('created',)
+
+ def save(self, *args, **kwargs):
+ """For the purposes of the sandbox, limit the maximum number of stored models."""
+ super(MyModel, self).save(*args, **kwargs)
+ while MyModel.objects.all().count() > MAX_INSTANCES:
+ MyModel.objects.all()[0].delete()
+
+ @models.permalink
+ def get_absolute_url(self):
+ return ('modelresourceexample.views.MyModelResource', (self.pk,))
+
diff --git a/examples/modelresourceexample/urls.py b/examples/modelresourceexample/urls.py
new file mode 100644
index 00000000..c43cf56a
--- /dev/null
+++ b/examples/modelresourceexample/urls.py
@@ -0,0 +1,6 @@
+from django.conf.urls.defaults import patterns, url
+
+urlpatterns = patterns('modelresourceexample.views',
+ url(r'^$', 'MyModelRootResource'),
+ url(r'^([0-9]+)/$', 'MyModelResource'),
+)
diff --git a/examples/modelresourceexample/views.py b/examples/modelresourceexample/views.py
new file mode 100644
index 00000000..e912c019
--- /dev/null
+++ b/examples/modelresourceexample/views.py
@@ -0,0 +1,18 @@
+from djangorestframework.modelresource import ModelResource, RootModelResource
+from modelresourceexample.models import MyModel
+
+FIELDS = ('foo', 'bar', 'baz', 'absolute_url')
+
+class MyModelRootResource(RootModelResource):
+ """A create/list resource for MyModel.
+ Available for both authenticated and anonymous access for the purposes of the sandbox."""
+ model = MyModel
+ allowed_methods = anon_allowed_methods = ('GET', 'POST')
+ fields = FIELDS
+
+class MyModelResource(ModelResource):
+ """A read/update/delete resource for MyModel.
+ Available for both authenticated and anonymous access for the purposes of the sandbox."""
+ model = MyModel
+ allowed_methods = anon_allowed_methods = ('GET', 'PUT', 'DELETE')
+ fields = FIELDS
diff --git a/examples/resourceexample/__init__.py b/examples/resourceexample/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/examples/resourceexample/urls.py b/examples/resourceexample/urls.py
new file mode 100644
index 00000000..01cc7c62
--- /dev/null
+++ b/examples/resourceexample/urls.py
@@ -0,0 +1,6 @@
+from django.conf.urls.defaults import patterns, url
+
+urlpatterns = patterns('resourceexample.views',
+ url(r'^$', 'ExampleResource'),
+ url(r'^(?P[0-9]+)/$', 'AnotherExampleResource'),
+)
diff --git a/examples/resourceexample/views.py b/examples/resourceexample/views.py
new file mode 100644
index 00000000..650a8e39
--- /dev/null
+++ b/examples/resourceexample/views.py
@@ -0,0 +1,35 @@
+from django import forms
+from djangorestframework.resource import Resource
+from djangorestframework.response import Response, status
+
+
+class MyForm(forms.Form):
+ foo = forms.BooleanField()
+ bar = forms.IntegerField(help_text='Must be an integer.')
+ baz = forms.CharField(max_length=32, help_text='Free text. Max length 32 chars.')
+
+
+class ExampleResource(Resource):
+ """A basic read only resource that points to 3 other resources."""
+ allowed_methods = anon_allowed_methods = ('GET',)
+
+ def get(self, request, auth):
+ return {"Some other resources": [self.reverse(AnotherExampleResource, num=num) for num in range(3)]}
+
+
+class AnotherExampleResource(Resource):
+ """A basic GET-able/POST-able resource."""
+ allowed_methods = anon_allowed_methods = ('GET', 'POST')
+ form = MyForm # Optional form validation on input
+
+ def get(self, request, auth, num):
+ """Handle GET requests"""
+ if int(num) > 2:
+ return Response(status.HTTP_404_NOT_FOUND)
+ return "GET request to AnotherExampleResource %s" % num
+
+ def post(self, request, auth, content, num):
+ """Handle POST requests"""
+ if int(num) > 2:
+ return Response(status.HTTP_404_NOT_FOUND)
+ return "POST request to AnotherExampleResource %s, with content: %s" % (num, repr(content))
diff --git a/examples/settings.py b/examples/settings.py
index 4aa5dd00..865dc394 100644
--- a/examples/settings.py
+++ b/examples/settings.py
@@ -95,7 +95,9 @@ INSTALLED_APPS = (
'django.contrib.messages',
#'django.contrib.admin',
'djangorestframework',
- 'simpleexample',
+
+ 'resourceexample',
+ 'modelresourceexample',
'objectstore',
'pygments_api',
'blogpost',
diff --git a/examples/simpleexample/__init__.py b/examples/simpleexample/__init__.py
deleted file mode 100644
index e69de29b..00000000
diff --git a/examples/simpleexample/models.py b/examples/simpleexample/models.py
deleted file mode 100644
index b628f895..00000000
--- a/examples/simpleexample/models.py
+++ /dev/null
@@ -1,23 +0,0 @@
-from django.db import models
-
-MAX_INSTANCES = 10
-
-class MyModel(models.Model):
- foo = models.BooleanField()
- bar = models.IntegerField(help_text='Must be an integer.')
- baz = models.CharField(max_length=32, help_text='Free text. Max length 32 chars.')
- created = models.DateTimeField(auto_now_add=True)
-
- class Meta:
- ordering = ('created',)
-
- def save(self, *args, **kwargs):
- """For the purposes of the sandbox, limit the maximum number of stored models."""
- super(MyModel, self).save(*args, **kwargs)
- while MyModel.objects.all().count() > MAX_INSTANCES:
- MyModel.objects.all()[0].delete()
-
- @models.permalink
- def get_absolute_url(self):
- return ('simpleexample.views.MyModelResource', (self.pk,))
-
diff --git a/examples/simpleexample/urls.py b/examples/simpleexample/urls.py
deleted file mode 100644
index 92e782dc..00000000
--- a/examples/simpleexample/urls.py
+++ /dev/null
@@ -1,6 +0,0 @@
-from django.conf.urls.defaults import patterns, url
-
-urlpatterns = patterns('simpleexample.views',
- url(r'^$', 'MyModelRootResource'),
- url(r'^([0-9]+)/$', 'MyModelResource'),
-)
diff --git a/examples/simpleexample/views.py b/examples/simpleexample/views.py
deleted file mode 100644
index 1f113ac2..00000000
--- a/examples/simpleexample/views.py
+++ /dev/null
@@ -1,18 +0,0 @@
-from djangorestframework.modelresource import ModelResource, RootModelResource
-from simpleexample.models import MyModel
-
-FIELDS = ('foo', 'bar', 'baz', 'absolute_url')
-
-class MyModelRootResource(RootModelResource):
- """A create/list resource for MyModel.
- Available for both authenticated and anonymous access for the purposes of the sandbox."""
- model = MyModel
- allowed_methods = anon_allowed_methods = ('GET', 'POST')
- fields = FIELDS
-
-class MyModelResource(ModelResource):
- """A read/update/delete resource for MyModel.
- Available for both authenticated and anonymous access for the purposes of the sandbox."""
- model = MyModel
- allowed_methods = anon_allowed_methods = ('GET', 'PUT', 'DELETE')
- fields = FIELDS
diff --git a/examples/urls.py b/examples/urls.py
index 2b8e6fcd..41b80d58 100644
--- a/examples/urls.py
+++ b/examples/urls.py
@@ -5,18 +5,28 @@ from djangorestframework.resource import Resource
#admin.autodiscover()
class RootResource(Resource):
+ """This is the sandbox for the examples provided with django-rest-framework.
+
+ These examples are here to help you get a better idea of the some of the
+ features of django-rest-framework API, such as automatic form and model validation,
+ support for multiple input and output media types, etc...
+
+ Please feel free to browse, create, edit and delete the resources here, either
+ in the browser, from the command line, or programmatically."""
allowed_methods = anon_allowed_methods = ('GET',)
def get(self, request, auth):
- return {'simple example': self.reverse('simpleexample.views.MyModelRootResource'),
- 'pygments example': self.reverse('pygments_api.views.PygmentsRoot'),
- 'object store example': self.reverse('objectstore.views.ObjectStoreRoot'),
- 'blog post example': self.reverse('blogpost.views.BlogPostRoot'),}
+ return {'Simple Resource example': self.reverse('resourceexample.views.ExampleResource'),
+ 'Simple ModelResource example': self.reverse('modelresourceexample.views.MyModelRootResource'),
+ 'Object store API (Resource)': self.reverse('objectstore.views.ObjectStoreRoot'),
+ 'A pygments pastebin API (Resource + forms)': self.reverse('pygments_api.views.PygmentsRoot'),
+ 'Blog posts API (ModelResource)': self.reverse('blogpost.views.BlogPostRoot'),}
urlpatterns = patterns('',
(r'^$', RootResource),
- (r'^simple-example/', include('simpleexample.urls')),
+ (r'^model-resource-example/', include('modelresourceexample.urls')),
+ (r'^resource-example/', include('resourceexample.urls')),
(r'^object-store/', include('objectstore.urls')),
(r'^pygments/', include('pygments_api.urls')),
(r'^blog-post/', include('blogpost.urls')),
--
cgit v1.2.3