0

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

我有两个模型:

BlogPost (tag, text, timestamp) - 它是存储标签、文本和帖子创建时间的表格

Comment (blog_post, text) - blog_post 是 BlogPost 模型的 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)
4

2 回答 2

1

一种设计是为每篇博文设置一个评论表。然后,例如,您可以将 的键BlogPost作为隐藏字段包含在表单中。为了减少登录页面上的混乱,您可能希望为每个页面设置一个单独的页面BlogPost,您可以在其中允许用户提交他们的评论。

这里有一个这种设计的例子:https ://bitbucket.org/abernier/yab/src相关的代码PostHandler/views.py里面,附带的标记在/templates/view.html.

于 2013-01-26T14:57:47.090 回答
0

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

于 2013-01-26T21:13:44.640 回答