aboutsummaryrefslogtreecommitdiffstats
path: root/examples/blogpost/views.py
blob: 05e795fac94c5fc3f4f0a9a8b5523a751cd3a92f (plain)
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 flywheel.response import Response, status
from flywheel.resource import Resource
from flywheel.modelresource import ModelResource, QueryModelResource
from blogpost.models import BlogPost, Comment

##### Root Resource #####

class RootResource(Resource):
    """This is the top level resource for the API.
    All the sub-resources are discoverable from here."""
    allowed_methods = ('GET',)

    def get(self, request, *args, **kwargs):
        return Response(status.HTTP_200_OK,
                        {'blog-posts': self.reverse(BlogPostList),
                         'blog-post': self.reverse(BlogPostCreator)})


##### Blog Post Resources #####

BLOG_POST_FIELDS = ('created', 'title', 'slug', 'content', 'absolute_url', 'comment_url', 'comments_url')

class BlogPostList(QueryModelResource):
    """A resource which lists all existing blog posts."""
    allowed_methods = ('GET', )
    model = BlogPost
    fields = BLOG_POST_FIELDS

class BlogPostCreator(ModelResource):
    """A resource with which blog posts may be created."""
    allowed_methods = ('POST',)
    model = BlogPost
    fields = BLOG_POST_FIELDS

class BlogPostInstance(ModelResource):
    """A resource which represents a single blog post."""
    allowed_methods = ('GET', 'PUT', 'DELETE')
    model = BlogPost
    fields = BLOG_POST_FIELDS


##### Comment Resources #####

COMMENT_FIELDS = ('username', 'comment', 'created', 'rating', 'absolute_url', 'blogpost_url')

class CommentList(QueryModelResource):
    """A resource which lists all existing comments for a given blog post."""
    allowed_methods = ('GET', )
    model = Comment
    fields = COMMENT_FIELDS

class CommentCreator(ModelResource):
    """A resource with which blog comments may be created for a given blog post."""
    allowed_methods = ('POST',)
    model = Comment
    fields = COMMENT_FIELDS

class CommentInstance(ModelResource):
    """A resource which represents a single comment."""
    allowed_methods = ('GET', 'PUT', 'DELETE')
    model = Comment
    fields = COMMENT_FIELDS