最近我阅读了关于 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)