Хранилище данных GoogleAppEngine не возвращает никаких записей - PullRequest
1 голос
/ 15 января 2011

Я изучаю, как использовать GoogleAppEngine с Python в качестве языка выбора.

Вот мой код:

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, поэтому не могу использовать точку останова.

Есть какие-либо явные ошибки?

Спасибо!

1 Ответ

3 голосов
/ 15 января 2011

Ну, во-первых, я получаю сообщение об ошибке в следующей ошибке журнала (возможно, это только для меня):

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 flag.

Во-вторых, почему у вас все еще есть 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"), и он будет работать как шарм.Надеюсь, это помогло.

...