2011-04-23 3 views
4

Je ne suis pas vraiment familier avec Python et j'essaie de transformer l'une de mes applications web php en python. Actuellement, je cours l'application sur localhost en utilisant le lanceur appengine et c'est ce que je suis en train de faire. J'essaie d'obtenir une liste de tous les paramètres postés sur l'URL, puis les soumettre à une page et obtenir son contenu.Paramètres Appengine GET

Donc, en gros: 1: obtenez les params 2: obtenir le contenu d'une URL en soumettant ces params (l'équivalent PHP de boucle de file_get_contents)

Ceci est mon code jusqu'à présent

from google.appengine.ext import webapp 

class MyHandler(webapp.RequestHandler): 
    def get(self): 
     name1 = self.request.get_all("q") 
     name2 = self.request.get_all("input") 
     return name1,name2 

x = MyHandler() 
print x.get() 

et l'url

http://localhost:8080/?q=test1&input=test2 

et ceci est l'erreur que je reçois

AttributeError: 'MyHandler' object has no attribute 'request' 

Maintenant, je ne peux pas l'obtenir pour imprimer quoi que ce soit et je ne sais pas comment je peux obtenir le contenu d'une autre URL en soumettant nom1 et nom2

J'ai essayé de regarder la documentation, mais je ne peux pas donner un sens Parce que tout ce qu'ils ont est juste 2 lignes de code pour obtenir l'utilisation de la fonction a commencé.

Répondre

4
x = MyHandler() 
print x.get() 

Ceci n'est pas une partie typique d'une application AppEngine. Vous n'utilisez pas print pour renvoyer la sortie au navigateur.

Lorsque vous créez une nouvelle application dans AppEngineLauncher il vous donne un projet de squelette qui ressemble à ceci:

from google.appengine.ext import webapp 
from google.appengine.ext.webapp import util 


class MainHandler(webapp.RequestHandler): 
    def get(self): 
     self.response.out.write('Hello world!') 


def main(): 
    application = webapp.WSGIApplication([('/', MainHandler)], 
             debug=True) 
    util.run_wsgi_app(application) 


if __name__ == '__main__': 
    main() 

Votre application doit être exécutée de manière similaire. Vous avez besoin d'une méthode main() qui crée un wsgi_app qui est chargé d'appeler votre gestionnaire. Cette fonction main() est appelée par dev_appserver, en supposant que votre fichier app.yaml est correctement configuré.

def get(self): 
    name1 = self.request.get_all("q") 
    name2 = self.request.get_all("input") 
    self.response.out.write(name1 + ',' + name2) 

Fonctionne correctement si vous avez configuré votre application correctement.

+0

Merci! ça a marché. Maintenant serait-il possible pour vous de m'aider avec la façon d'obtenir le contenu d'une autre page Web en entrant ces nom1 et nom2? – Kartik

+0

Vous devriez probablement lire quelques documents, ou poser une autre question. Ce que vous cherchez probablement, c'est quelque chose comme 'self.redirect ("/home ")'. Où la destination est choisie en fonction de vos paramètres nameX. – Calvin

0

Vous aurez besoin de quelques lignes de code supplémentaires pour que cela fonctionne si vous utilisez le framework WebApp. Collez les lignes suivantes à la fin de votre code (et se débarrasser des deux dernières lignes où vous instancier votre classe et appelez la méthode get)

application = webapp.WSGIApplication([('/', MyHandler)]) 

def main(): 
    run_wsgi_app(application) 

if __name__ == "__main__": 
    main()