2011-01-15 14 views
1

私は、選択した言語としてPythonでGoogleAppEngineを使用する方法を学習しています。GoogleAppEngineデータストアがレコードを返さない

は、ここに私のコードです:

import cgi 

from google.appengine.api import users 
from google.appengine.ext import webapp 
from google.appengine.ext.webapp.util import run_wsgi_app 
from google.appengine.ext import db 

class Greeting(db.Model): 
    author = db.UserProperty() 
    content = db.StringProperty(multiline=True) 
    date = db.DateTimeProperty(auto_now_add=True) 

class BlogPost(db.Model): 
    author = db.UserProperty(); 
    body = db.StringProperty(multiline=True) 
    postDate = db.DateTimeProperty(auto_now_add=True) 

class MainPage(webapp.RequestHandler): 
    def get(self): 
     self.response.out.write('<html><body>') 
     blogPosts = db.GqlQuery("SELECT * FROM BlogPost ORDER BY date DESC LIMIT 10") 
     greetings = db.GqlQuery("SELECT * FROM Greeting ORDER BY date DESC LIMIT 10") 

     for post in blogPosts: 
      if post.author: 
       self.response.out.write('<b>%s</b>' % post.author.nickname()) 
      else: 
       self.response.out.write('<b>A guest wrote:</b>') 
      self.response.out.write(cgi.escape(post.body)) 

     # Write the submission form and the footer of the page 
     self.response.out.write(""" 
       <form action="/sign" method="post"> 
       <div><textarea name="content" rows="3" cols="60"></textarea></div> 
       <div><input type="submit" value="Sign Guestbook"></div> 
       </form> 
      </body> 
      </html>""") 

class Guestbook(webapp.RequestHandler): 
    def post(self): 
     post = BlogPost() 

     if users.get_current_user(): 
      post.author = users.get_current_user() 

     post.body = self.request.get('content') 
     post.put() 
     self.redirect('/') 

application = webapp.WSGIApplication(
            [('/', MainPage), 
             ('/sign', Guestbook)], 
            debug=True) 

def main(): 
    run_wsgi_app(application) 

if __name__ == "__main__": 
    main() 

が、私は自分のために物事をテストするためだけのブログ投稿のクラスを追加したい、レコードがデータストアに保存されていないようです。私は私のIDEとして私はブレークポイントを使用することはできませんコモドの編集を使用しています。

目立つ間違いはありますか?

ありがとうございました!

答えて

3

私はエラーに次のログのエラーを取得していますすべての最初まあ、(それは多分私だけのためである):

dev_appserver_main.py:466] <class 'google.appengine.api.datastore_errors.InternalError'> Are you using FloatProperty and/or GeoPtProperty? Unfortunately loading float values from the datastore file does not work with Python 2.5.0.

-cフラグを使用して、それを取り除くために持っていました。

第2に、なぜまだGreetingのdbModelがありますか?あなたはそれを使用していません。ちょうどそれを取り除くだけかもしれません。

しかし、実際の間違いはblogPosts = db.GqlQuery("SELECT * FROM BlogPost ORDER BY date DESC LIMIT 10")date行のクエリにあります。

postDate = db.DateTimeProperty(auto_now_add=True)

が言ってあなたの要求を変更します:あなたはそれを名前のものを見てblogPosts = db.GqlQuery("SELECT * FROM BlogPost ORDER BY postDate DESC LIMIT 10")をし、それが魅力のように動作します。これが助けてくれたらと思っています。

+0

InternalErrorは私のためだけだった。プロパティで 'C:\ Python27 \ pythonw.exe'に切り替えることでそれを取り除きました。私は' Python25'に設定しました – soulseekah

+2

App Engine用のPython 2.5を使うべきです - 新しいリビジョンを使用してください。 –

+0

@Nickは頭をアップしてくれてありがとう。 – soulseekah

関連する問題