0

最近、App Engine に関する本の「Core Python」の章を読み、説明から入手できるブログ サンプルを実装しました。このサンプルを拡張して、ブログ投稿でコメントできるようにしようとしていますが、いくつかの問題に直面しています。

私は2つのモデルを持っています:

BlogPost (タグ、テキスト、タイムスタンプ) - タグ、テキスト、および投稿が作成された時間を格納するテーブルです。

コメント (blog_post、テキスト) - blog_post は、関連するブログ投稿にコメントを割り当てるための、BlogPost モデルへの ReferenceProperty です。

私の問題は、BlogPost キーを取得して、ユーザーが入力したコメントに正しく割り当てることです。投稿に対してクエリを実行し、そのキーを取得して、ユーザーが作成した新しいコメント (もちろん、作成された場合) に配置する必要があると考えています。しかし、現時点では、これらの手順をどのようにコーディングすればよいか (はっきりと) わかりません。

つまり、 https://developers.google.com/appengine/articles/modelingで入手できる「1 対多」の説明に関連する何かを行う必要があります。しかし、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

1 つのデザインは、ブログ投稿ごとにコメント フォームを用意することです。次に、たとえば、のキーをBlogPost非表示フィールドとしてフォームに含めることができます。ランディング ページの煩雑さを軽減するためにBlogPost、ユーザーがコメントを送信できるように、各ページに個別のページを用意することをお勧めします。

この設計の例を次に示します: https://bitbucket.org/abernier/yab/src関連するコード部分はPostHandler/views.pyあり、付随するマークアップは にあり/templates/view.htmlます。

于 2013-01-26T14:57:47.090 に答える
0

NDB では、コメントに追加のフィールドがある場合、繰り返しプロパティまたは繰り返し構造化プロパティを使用できます。繰り返しプロパティは、ブログ投稿のすべてのコメントを配置できる Python リストのように動作します。そして、1 回の読み取りだけが必要です。

于 2013-01-26T21:13:44.640 に答える