博客应用引擎系统中的评论

时间:2013-01-26 14:24:13

标签: python google-app-engine

最近我阅读了关于App Engine的“核心Python”一书,并通过解释实现了博客示例。 我正在尝试扩展此示例以允许在博客帖子中发表评论,但我遇到了一些困难。

我有两个型号:

BlogPost(标签,文本,时间戳) - 它是存储标签,文本和帖子创建时间的表

评论(blog_post,text) - blog_post是一个BlogProost模型的ReferenceProperty,用于分配评论及其相关的博客文章。

我的难点在于检索BlogPost密钥以使用用户输入的注释正确分配它。我认为我应该对帖子执行查询,获取其密钥并将其放在用户创建的新评论(当然,如果它是创建的)上。但是在这一刻我不明白(以明确的方式)我应该如何编写这些步骤。

换句话说,我需要做一些与此处提供的“一对多”解释相关的事情 - https://developers.google.com/appengine/articles/modeling。但是我需要根据我的实现来做,用我的html表单中的用户输入生成实例模型。

下面,我让我现在正在使用的代码,感谢您的帮助。

//app.yaml

application: src
version: 1
runtime: python27
api_version: 1
threadsafe: true


handlers:
- url: /favicon\.ico
  static_files: favicon.ico
  upload: favicon\.ico

- url: .*
  script: main.app

// main.py

import webapp2
from google.appengine.ext import db 

class MainHandler(webapp2.RequestHandler):
    def get(self):
        self.response.out.write('''
            <h1>The Blog Posts</h1>
            <form action="/post" method=post>
            Title:
            <br><input type=text name=title>
            <br>Body:
            <br><textarea name=body rows=3 cols=60></textarea>
            <br><input type=submit value="Post">
            </form>
            <hr>
        ''')

        #posts = db.GqlQuery("SELECT * FROM BlogEntry")
        posts = BlogPost.all().order('-timestamp').fetch(10)
        for post in posts:
            self.response.out.write('''<hr>
                <strong>%s</strong><br>%s
                <blockquote>%s</blockquote>''' % (
                post.title, post.timestamp, post.body)
            )

class BlogEntry(webapp2.RequestHandler):
    def post(self):
        post = BlogPost()
        post.title = self.request.get('title')
        post.body = self.request.get('body')
        post.put()
        self.redirect('/')

#model
class BlogPost(db.Model):
    title = db.StringProperty()
    body = db.TextProperty()
    timestamp = db.DateTimeProperty(auto_now_add=True)

app = webapp2.WSGIApplication([
    ('/', MainHandler),
    ('/post', BlogEntry)
], debug=True)

2 个答案:

答案 0 :(得分:1)

一种设计是为每篇博文发布评论表。然后,您可以将BlogPost的键作为表单中的隐藏字段包含在内。为了减少目标网页上的混乱,您可能希望为每个BlogPost设置一个单独的页面,您可以在其中提交用户的评论。

此处有一个设计示例:https://bitbucket.org/abernier/yab/src相关的代码片段为PostHandler in /views.py,随附的标记位于/templates/view.html

答案 1 :(得分:0)

在NDB中,如果评论中有其他字段,则可以使用重复属性或重复的结构化属性。重复属性的行为类似于Python列表,您可以在其中放置博客文章的所有注释。而且你只需要一次阅读。