aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTom Christie2011-01-07 17:07:20 +0000
committerTom Christie2011-01-07 17:07:20 +0000
commit95ac2396d65c42f7b801d8760dc00020d2f33e12 (patch)
tree5621490ec4e47fa5239740882295138332bd7703
parentf144b769fedd421f3ec24dfd3a4f10c681192337 (diff)
downloaddjango-rest-framework-95ac2396d65c42f7b801d8760dc00020d2f33e12.tar.bz2
Start adding example app
-rw-r--r--src/rest/resource.py1
-rw-r--r--src/testapp/models.py34
-rw-r--r--src/testapp/tests.py2
-rw-r--r--src/testapp/urls.py3
-rw-r--r--src/testapp/views.py19
5 files changed, 55 insertions, 4 deletions
diff --git a/src/rest/resource.py b/src/rest/resource.py
index 85aea8cf..f14b2ba5 100644
--- a/src/rest/resource.py
+++ b/src/rest/resource.py
@@ -284,6 +284,7 @@ class Resource(object):
# Serialize the response content
ret = self.cleanup_response(ret)
content = emitter(self, request, status, headers, form).emit(ret)
+ print content
# Build the HTTP Response
resp = HttpResponse(content, mimetype=mimetype, status=status)
diff --git a/src/testapp/models.py b/src/testapp/models.py
index 75304c9c..3960d004 100644
--- a/src/testapp/models.py
+++ b/src/testapp/models.py
@@ -1,4 +1,6 @@
from django.db import models
+from django.template.defaultfilters import slugify
+from datetime import datetime
import uuid
def uuid_str():
@@ -28,4 +30,34 @@ class ExampleItem(models.Model):
container = models.ForeignKey(ExampleContainer, related_name='items')
index = models.IntegerField()
note = models.CharField(max_length=1024)
- unique_together = (container, index) \ No newline at end of file
+ unique_together = (container, index)
+
+
+class BlogPost(models.Model):
+ slug = models.SlugField(editable=False, primary_key=True, default='blah')
+ title = models.CharField(max_length=128)
+ content = models.TextField()
+ when = models.DateTimeField(editable=False)
+
+ @models.permalink
+ def get_absolute_url(self):
+ return ('testapp.views.BlogPostInstance', (self.slug,))
+
+ def save(self, *args, **kwargs):
+ self.slug = slugify(self.title)
+ self.when = datetime.now()
+ super(self.__class__, self).save(*args, **kwargs)
+
+
+class Comment(models.Model):
+ blogpost = models.ForeignKey(BlogPost, related_name='comments')
+ name = models.CharField(max_length=128)
+ content = models.TextField()
+ when = models.DateTimeField(auto_now_add=True)
+
+ @models.permalink
+ def get_absolute_url(self):
+ return ('testapp.views.CommentInstance', (self.blogpost.slug, self.id))
+
+ def save(self):
+ self.index = self.blogpost.comments.count() \ No newline at end of file
diff --git a/src/testapp/tests.py b/src/testapp/tests.py
index 0e2cde63..ec1607ad 100644
--- a/src/testapp/tests.py
+++ b/src/testapp/tests.py
@@ -143,4 +143,4 @@ class CreatedModelTests(TestCase):
self.assertEquals(resp.status_code, 200)
container = json.loads(resp.content)
self.assertEquals(container, self.container)
- \ No newline at end of file
+
diff --git a/src/testapp/urls.py b/src/testapp/urls.py
index b90590db..6f87c698 100644
--- a/src/testapp/urls.py
+++ b/src/testapp/urls.py
@@ -8,4 +8,7 @@ urlpatterns = patterns('testapp.views',
(r'^model$', 'ModelFormResource'),
(r'^container$', 'ContainerFactory'),
(r'^container/((?P<key>[^/]+))$', 'ContainerInstance'),
+
+ (r'^blogpost/create$', 'BlogPostCreator'),
+ (r'^blogposts/(?P<slug>[^/]+)', 'BlogPostInstance'),
)
diff --git a/src/testapp/views.py b/src/testapp/views.py
index f121efa3..33e56bbd 100644
--- a/src/testapp/views.py
+++ b/src/testapp/views.py
@@ -1,6 +1,6 @@
from rest.resource import Resource, ModelResource
from testapp.forms import ExampleForm
-from testapp.models import ExampleModel, ExampleContainer
+from testapp.models import ExampleModel, ExampleContainer, BlogPost, Comment
class RootResource(Resource):
"""This is my docstring
@@ -12,7 +12,8 @@ class RootResource(Resource):
'write-only-api': self.reverse(WriteOnlyResource),
'read-write-api': self.reverse(ReadWriteResource),
'model-api': self.reverse(ModelFormResource),
- 'create-container': self.reverse(ContainerFactory)}, {})
+ 'create-container': self.reverse(ContainerFactory),
+ 'blog-post-creator': self.reverse(BlogPostCreator)}, {})
class ReadOnlyResource(Resource):
@@ -61,3 +62,17 @@ class ContainerInstance(ModelResource):
fields = ('absolute_uri', 'name', 'key')
form_fields = ('name',)
+#######################
+
+
+class BlogPostCreator(ModelResource):
+ """A Resource with which blog posts may be created.
+ This is distinct from blog post instance so that it is discoverable by the client.
+ (ie the client doens't need to know how to form a blog post url in order to create a blog post)"""
+ allowed_operations = ('create',)
+ model = BlogPost
+
+class BlogPostInstance(ModelResource):
+ """Represents a single Blog Post."""
+ allowed_operations = ('read', 'update', 'delete')
+ model = BlogPost \ No newline at end of file