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 --- 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 +++++++++++++----- 13 files changed, 106 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 (limited to 'examples') 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