2011-01-15 2 views
1

Я изучаю, как использовать GoogleAppEngine с Python в качестве языка выбора.Хранилище данных 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() 

Я хотел бы добавить класс BlogPost просто чтобы проверить вещи для себя, и, кажется, ни одной записи не сохраняются в хранилище данных. Я использую Komodo Edit в качестве моей 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 флаг.

Во-вторых, почему у вас все еще есть 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

The InternalError был только для меня. Из него избавился, перейдя на «C: \ Python27 \ pythonw.exe' в свойствах, я установил его в' Python25' – soulseekah

+2

Вы должны использовать Python 2.5 для App Engine - просто используйте новую версию. –

+0

@ Ник спасибо за головы. – soulseekah

Смежные вопросы