0

これはばかばかしいほど些細なことですが、私はそれを解決するために30分を費やしました.

class SocialPost(model.Model):
  total_comments=model.IntegerProperty(default=0)

def create_reply_comment(self,content,author):
    ...
    logging.info(self)
    self.total_comments=self.total_comments+1
    self.put()

ログファイルでは、total_comments が 0 であることを確認できますが、管理コンソールでは 1 です。このフィールドを除いて、他のフィールドは正しいです。

おそらくその「デフォルト= 0」に何か問題がありますが、何が問題なのかわかりません。

編集:私の機能の完全なコード

def create_reply_comment(self,content,author): floodControl=memcache.get("FloodControl-"+str(author.key)) フラッドコントロールの場合: base.FloodControlException を発生させます

    new_comment= SocialComment(parent=self.key)
    new_comment.author=author.key
    new_comment.content=content
    new_comment.put()

    logging.info(self)
    self.latest_comment_date=new_comment.creation_date
    self.latest_comment=new_comment.key
    self.total_comments=self.total_comments+1
    self.put()
    memcache.add("FloodControl-"+str(author.key), datetime.now(),time=SOCIAL_FLOOD_TIME)

関数を呼び出す場所:

if cmd == "create_reply_post":
           post=memcache.get("SocialPost-"+str(self.request.get('post')))
           if post is None:
              post=model.Key(urlsafe=self.request.get('post')).get()
              memcache.add("SocialPost-"+str(self.request.get('post')),post)
           node=node.get()
           if not node.get_subscription(user).can_reply:
               self.success()
               return


           post.create_reply_comment(feedparser._sanitizeHTML(self.request.get("content"),"UTF-8"),user)  
4

1 に答える 1

0

total_comments に変更を加える前に memcache.add を呼び出しているため、後続の呼び出しで memcache から読み戻すと、キャッシュから古い値が取得されます。create_reply_comment は、"SocialPost-"+str(self.request.get('post')キャッシュ キーを削除または上書きする必要があります。

[編集] あなたの投稿のタイトルには、NDB を使用していると書かれていますが (model.Model でも? うーん)、memcache ビットを完全にスキップして、NDB に任せることができますか?

于 2012-09-12T20:13:29.633 に答える