2013-05-21 6 views
3

J'ai suivi this exemple à partir du site de google, et j'ai quelques difficultés à comprendre comment fonctionnent les choses sous-jacentes. Généralement, lorsque vous soumettez du texte, dans le HTML MainHandler, comment sait-il utiliser GuestBook? Je suppose que cela a quelque chose à voir avec le <form action="/sign" method=post> et ('/sign', GuestBook) mais je ne suis pas tout à fait sûr comment tout cela fonctionne.HTML dans Google App Engine

from google.appengine.ext import db 
import webapp2 

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

class MainHandler(webapp2.RequestHandler): 
    def get(self): 
     self.response.write('Hello world!') 
     self.response.write('<h1>My GuestBook</h1><ol>') 
     #greetings = db.GqlQuery("SELECT * FROM Greeting") 
     greetings = Greeting.all() 
     for greeting in greetings: 
      self.response.write('<li> %s' % greeting.content) 
     self.response.write(''' 
      </ol><hr> 
      <form action="/sign" method=post> 
      <textarea name=content rows=3 cols=60></textarea> 
      <br><input type=submit value="Sign Guestbook"> 
      </form> 
     ''') 

class GuestBook(webapp2.RequestHandler): 
    def post(self): 
     greeting = Greeting() 
     greeting.content = self.request.get('content') 
     greeting.put() 
     self.redirect('/') 

app = webapp2.WSGIApplication([ 
    ('/', MainHandler), 
    ('/sign', GuestBook), 
], debug=True) 

Répondre

2

Vous avez raison! Les routes sont configurés dans le bloc suivant:

app = webapp2.WSGIApplication([ 
    ('/', MainHandler), 
    ('/sign', GuestBook), 
], debug=True) 

Donc, quand il y a une demande à /sign, une nouvelle instance GuestBook est créé, et le procédé approprié est appelé avec l'instance GuestBook (qui contient une référence à la demande) comme premier argument. Dans votre exemple, il s'agit d'un POST, mais webapp2 prend en charge toutes les méthodes http populaires documentées à http://webapp-improved.appspot.com/guide/handlers.html

+0

Ajout de quelques détails sur la création d'instance de la classe, puis l'invocation ultérieure de 'post (..)' ou ' get (..) '(selon le cas) en ferait une meilleure réponse :) – SuperSaiyan

+0

@Thrustmaster bonne idée! Merci pour les commentaires :) – Andbdrew

+2

En ajoutant à la réponse de @ Andbdrew, GAE lui-même n'est pas au courant du routage de webapp2. La propre configuration de routage de GAE se trouve dans le fichier 'app.yaml', qui doit pointer vers une variable contenant un gestionnaire WSGI (dans ce cas,' app') –