Appengine GET 参数

5 投票
2 回答
6105 浏览
提问于 2025-04-16 16:18

我对Python不是很熟悉,正在尝试把我的一个PHP网页应用转到Python上。目前我在本地用appengine launcher运行这个应用,下面是我想做的事情。

我想获取所有发送到网址的参数,然后把这些参数提交到一个页面,获取它的内容。

简单来说就是:
1: 获取参数
2: 通过提交这些参数来获取网址的内容(在PHP中类似于curl或file_get_contents的功能)

这是我到目前为止写的代码

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

还有这个网址

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

这是我遇到的错误

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

现在我无法打印任何东西,也不确定如何通过提交name1和name2来获取另一个网址的内容。

我试着查看文档,但因为文档里只有两行代码来说明如何使用这个功能,所以我看得一头雾水。

2 个回答

0

如果你打算使用WebApp框架,那么你需要再加几行代码才能让它正常工作。把下面这些代码放在你代码的最后面(同时把你创建类和调用get方法的最后两行代码删掉)

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

def main():
    run_wsgi_app(application)

if __name__ == "__main__":
    main()
6
x = MyHandler()
print x.get() 

这不是一个典型的AppEngine应用程序的部分。你不能用print来把输出返回给浏览器。

当你在AppEngineLauncher中创建一个新应用时,它会给你一个像这样的基础项目:

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

你的应用也必须以类似的方式运行。你需要一个main()方法,这个方法会创建一个wsgi_app,它负责调用你的处理程序。这个main()函数是由dev_appserver调用的,前提是你的app.yaml文件设置正确。

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

如果你正确设置了你的应用,这样应该可以正常工作。

撰写回答