1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
from piston.handler import BaseHandler, AnonymousBaseHandler
from piston.utils import rc, require_mime, require_extended
from blogserver.blog.models import Blogpost
class AnonymousBlogpostHandler(AnonymousBaseHandler):
"""
Anonymous entrypoint for blogposts.
"""
model = Blogpost
fields = ('id', 'title', 'content', 'created_on')
@classmethod
def resource_uri(self):
return ('blogposts', [ 'format', ])
class BlogpostHandler(BaseHandler):
"""
Authenticated entrypoint for blogposts.
"""
model = Blogpost
anonymous = AnonymousBlogpostHandler
fields = ('title', 'content', ('author', ('username',)),
'created_on', 'content_length')
def read(self, title=None):
"""
Returns a blogpost, if `title` is given,
otherwise all the posts.
Parameters:
- `title`: The title of the post to retrieve.
"""
base = Blogpost.objects
if title:
return base.get(title=title)
else:
return base.all()
def content_length(self, blogpost):
return len(blogpost.content)
@require_extended
def create(self, request):
"""
Creates a new blogpost.
"""
attrs = self.flatten_dict(request.POST)
if self.exists(**attrs):
return rc.DUPLICATE_ENTRY
else:
post = Blogpost(title=attrs['title'],
content=attrs['content'],
author=request.user)
post.save()
return post
@classmethod
def resource_uri(self):
return ('blogposts', [ 'format', ])
|