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

Python 博客应用程序引擎系统中的评论,python,google-app-engine,Python,Google App Engine,最近,我阅读了《核心Python》一书中关于AppEngine的章节,并通过解释实现了博客示例。 我试图扩展这个示例,以允许在博客帖子中发表评论,但我面临一些困难 我有两种型号: BlogPost标记、文本、时间戳-它是存储标记、文本和创建日志的时间的表 评论blog_post,text-blog_post是BlogPost模型的一个引用属性,用于将评论与其相关的blog post一起分配 我的困难在于检索BlogPost键,以便使用用户输入的注释正确地分配它。我想我应该对帖子进行查询,获取它的

最近,我阅读了《核心Python》一书中关于AppEngine的章节,并通过解释实现了博客示例。 我试图扩展这个示例,以允许在博客帖子中发表评论,但我面临一些困难

我有两种型号:

BlogPost标记、文本、时间戳-它是存储标记、文本和创建日志的时间的表

评论blog_post,text-blog_post是BlogPost模型的一个引用属性,用于将评论与其相关的blog post一起分配

我的困难在于检索BlogPost键,以便使用用户输入的注释正确地分配它。我想我应该对帖子进行查询,获取它的键,并将它放在新创建的评论上,当然,如果它是由用户创建的。但在这一刻,我不清楚该如何编写这些步骤

换句话说,我需要做一些与这里提供的“一对多”解释相关的事情-。但是我需要按照我的实现来做,用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)

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


这里有一个这种设计的例子:相关的代码片段是,附带的标记是

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