public
Description: Simple Blog using Google Application Engine
Homepage:
Clone URL: git://github.com/d0nk/gae-blog.git
d0nk (author)
Wed Apr 09 12:01:14 -0700 2008
gae-blog / blog.py
100644 130 lines (108 sloc) 4.067 kb
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
import os
import wsgiref.handlers
 
from google.appengine.ext.webapp import template
from google.appengine.api import users
from google.appengine.ext import db
from google.appengine.ext import webapp
 
class Post(db.Model):
    title = db.StringProperty()
    author = db.UserProperty()
    body = db.TextProperty()
    date = db.DateTimeProperty(auto_now_add=True)
    comments = db.IntegerProperty(default=0)
    
class Comment(db.Model):
    comment = db.StringProperty()
    author = db.UserProperty()
    reference = db.ReferenceProperty(Post)
    date = db.DateTimeProperty(auto_now_add=True)
  
def render_page(webob, tmpl_file, params):
    params['user'] = users.get_current_user()
    if params['user']:
        params['url'] = '<a href="%s">Sign out</a>' % \
              users.create_logout_url(webob.request.uri)
    else:
        params['url'] = '<a href="%s">Sign in</a>' % \
              users.create_login_url(webob.request.uri)
    params['admin'] = users.is_current_user_admin()
    
    path = os.path.join(os.path.dirname(__file__), tmpl_file)
    webob.response.out.write(template.render(path, params))
    
class MainPage(webapp.RequestHandler):
    def get(self):
        posts = Post.all().order('-date')[:5]
        
        params = { 'posts': posts, }
        render_page(self, 'index.html', params)
        
class BlogPost(webapp.RequestHandler):
    def get(self):
        if not users.get_current_user():
            self.redirect(users.create_login_url("/"))
        
        render_page(self, 'post.html', {})
        
    def post(self):
        if users.get_current_user():
            p = Post()
            p.author = users.get_current_user()
            p.title = self.request.get('title')
            p.body = self.request.get('body')
            p.put()
            self.redirect('/')
        else:
            self.redirect(users.create_login_url(self.request.uri))
 
class ViewPost(webapp.RequestHandler):
    def get(self):
        try:
            p = Post.get(self.request.get('key'))
        except db.BadKeyError:
            self.redirect("/")
        else:
            c = None
            if p:
                c = db.GqlQuery("SELECT * FROM Comment WHERE reference=:1",
                            p.key())
            params = { 'post': p, 'comments': c, }
            render_page(self, 'view.html', params)
 
    def post(self):
        p = Post.get(self.request.get('key'))
        
        comment = Comment()
        comment.reference = p.key()
        comment.comment = self.request.get('comment')
        comment.author = users.get_current_user()
        comment.put()
        p.comments += 1
        p.put()
        
        self.redirect(self.request.referrer)
        
class DeletePost(webapp.RequestHandler):
    def get(self):
        if users.is_current_user_admin():
            try:
                p = Post.get(self.request.get('key'))
            except db.BadKeyError:
                self.redirect(self.request.referrer)
            else:
                c = db.GqlQuery("SELECT * FROM Comment WHERE reference=:1",
                        p.key())
                p.delete()
                db.delete(c)
        
                self.redirect('/')
 
class DeleteComment(webapp.RequestHandler):
    def get(self):
        if users.is_current_user_admin():
            try:
                c = Comment.get(self.request.get('key'))
            except db.BadKeyError:
                self.redirect(self.request.referrer)
            else:
                p = Post.get(c.reference.key())
                c.delete()
                p.comments -= 1
                p.put()
                
                self.redirect(self.request.referrer)
                
        
def main():
    application = webapp.WSGIApplication([
        ('/', MainPage),
        ('/post', BlogPost),
        ('/view', ViewPost),
        ('/delete', DeletePost),
        ('/deletecomment', DeleteComment),
        ], debug=True)
    
    wsgiref.handlers.CGIHandler().run(application)
 
if __name__ == "__main__":
    main()