Start adding example app

This commit is contained in:
Tom Christie 2011-01-07 17:07:20 +00:00
parent f144b769fe
commit 95ac2396d6
5 changed files with 55 additions and 4 deletions

View File

@ -284,6 +284,7 @@ class Resource(object):
# Serialize the response content # Serialize the response content
ret = self.cleanup_response(ret) ret = self.cleanup_response(ret)
content = emitter(self, request, status, headers, form).emit(ret) content = emitter(self, request, status, headers, form).emit(ret)
print content
# Build the HTTP Response # Build the HTTP Response
resp = HttpResponse(content, mimetype=mimetype, status=status) resp = HttpResponse(content, mimetype=mimetype, status=status)

View File

@ -1,4 +1,6 @@
from django.db import models from django.db import models
from django.template.defaultfilters import slugify
from datetime import datetime
import uuid import uuid
def uuid_str(): def uuid_str():
@ -29,3 +31,33 @@ class ExampleItem(models.Model):
index = models.IntegerField() index = models.IntegerField()
note = models.CharField(max_length=1024) note = models.CharField(max_length=1024)
unique_together = (container, index) 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()

View File

@ -8,4 +8,7 @@ urlpatterns = patterns('testapp.views',
(r'^model$', 'ModelFormResource'), (r'^model$', 'ModelFormResource'),
(r'^container$', 'ContainerFactory'), (r'^container$', 'ContainerFactory'),
(r'^container/((?P<key>[^/]+))$', 'ContainerInstance'), (r'^container/((?P<key>[^/]+))$', 'ContainerInstance'),
(r'^blogpost/create$', 'BlogPostCreator'),
(r'^blogposts/(?P<slug>[^/]+)', 'BlogPostInstance'),
) )

View File

@ -1,6 +1,6 @@
from rest.resource import Resource, ModelResource from rest.resource import Resource, ModelResource
from testapp.forms import ExampleForm from testapp.forms import ExampleForm
from testapp.models import ExampleModel, ExampleContainer from testapp.models import ExampleModel, ExampleContainer, BlogPost, Comment
class RootResource(Resource): class RootResource(Resource):
"""This is my docstring """This is my docstring
@ -12,7 +12,8 @@ class RootResource(Resource):
'write-only-api': self.reverse(WriteOnlyResource), 'write-only-api': self.reverse(WriteOnlyResource),
'read-write-api': self.reverse(ReadWriteResource), 'read-write-api': self.reverse(ReadWriteResource),
'model-api': self.reverse(ModelFormResource), 'model-api': self.reverse(ModelFormResource),
'create-container': self.reverse(ContainerFactory)}, {}) 'create-container': self.reverse(ContainerFactory),
'blog-post-creator': self.reverse(BlogPostCreator)}, {})
class ReadOnlyResource(Resource): class ReadOnlyResource(Resource):
@ -61,3 +62,17 @@ class ContainerInstance(ModelResource):
fields = ('absolute_uri', 'name', 'key') fields = ('absolute_uri', 'name', 'key')
form_fields = ('name',) 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