2011-01-15 6 views
1

J'apprends comment utiliser GoogleAppEngine avec Python comme langue de choix.Le magasin de données GoogleAppEngine ne renvoie aucun enregistrement

Voici mon code:

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() 

Je voulais ajouter une classe BlogPost juste pour tester des choses pour moi-même, et il ne semble pas enregistrement est enregistré dans la banque de données. J'utilise Komodo Edit comme IDE, donc je ne peux pas utiliser un breakpoint.

Des erreurs flagrantes?

Merci!

Répondre

3

Eh bien, d'abord tout ce que je reçois erreur l'erreur du journal ci-dessous (il est peut-être juste pour moi):

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.

Il fallait se débarrasser en utilisant le drapeau -c. Deuxièmement, pourquoi avez-vous toujours le Greeting dbModel? Vous ne l'utilisez pas. Pourrait aussi bien l'enlever.

Mais la véritable erreur est dans la requête blogPosts = db.GqlQuery("SELECT * FROM BlogPost ORDER BY date DESC LIMIT 10") vous n'avez pas date ligne. Regardez ce que vous l'avez nommé:

postDate = db.DateTimeProperty(auto_now_add=True)

Modifier votre demande de dire: blogPosts = db.GqlQuery("SELECT * FROM BlogPost ORDER BY postDate DESC LIMIT 10") et il fonctionnera comme un charme. J'espère que cela a aidé.

+0

L'InternalError était juste pour moi. Je me suis débarrassé de cela en passant à C: \ Python27 \ pythonw.exe dans les propriétés, je l'avais mis à 'Python25' – soulseekah

+2

Vous devriez utiliser Python 2.5 pour App Engine - juste utiliser une révision plus récente. –

+0

@Nick merci pour les heads-up. – soulseekah

Questions connexes