我从未对AJAX做过任何事情,只使用javascript的基本内容,而我的python经验更多的是科学方面。也就是说,我在谷歌应用引擎上的网站开发工作进展顺利,直到我试图创建一个ajax功能的演示。
我在GAE网站上发现了这个demo,但它似乎没有用。这篇文章可能会很长,因为我想解释一下我遇到的障碍。可以提供的任何帮助或见解,无论是如何修复此演示或使用不同的ajax方法,都非常感谢
作为参考,我正在使用带有Python 2.7的Google App Engine,并且正在运行32位Ubuntu 12.04。此外,我知道其他questions已经被问到这个主题,但我没有找到满意的答复。
...
因此,从演示开始,我将必需的index.html
,main.py
和app.yaml
文件复制到名为get
的目录中。根据说明我还创建了一个子目录static
,我在其中放入了json2.js
的副本(演示文稿可以在json.org找到,但我只能找到{{}} 3}})。所以我的项目结构如下:
-dir:get
-app.yaml
-main.py
-index.html
-dir static:
-json2.js
通过一切设置,我启动了我的网络服务器:
chris@thinkpad:~/code/get$ python ~/google_appengine/dev_appserver.py ./
这成功启动。但是,当我将浏览器指向http://localhost:8080/
时,我收到导入错误:
File "/home/chris/code/get/main.py", line 6, in <module>
from django.utils import simplejson
ImportError: No module named django.utils
所以我做了一些挖掘,似乎教程是为python 2.5编写的,所以我需要对我的app.yaml
文件进行一些更改。演示中的版本如下所示:
application: get
version: 1
runtime: python
api_version: 1
handlers:
- url: /static
static_dir: static
- url: /.*
script: main.py
我的新版2.7版如下所示。请注意添加threadsafe: true
,main.py
到main.app
的转换以及libraries
参数的添加。
application: get
version: 1
runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /static
static_dir: static
- url: /.*
script: main.app
libraries:
- name: django
version: latest
再一次,我成功启动了appserver。现在,指向http://localhost:8080/
会引发以下错误:
ImportError: <module 'main' from '/home/chris/code/get/main.pyc'> has no attribute app
这导致我查看app
底部的main.py
函数。默认情况下,它看起来像这样:
def main():
app = webapp.WSGIApplication([
('/', MainPage),
('/rpc', RPCHandler),
], debug=True)
util.run_wsgi_app(app)
if __name__ == '__main__':
main()
按摩它以使其更加python27友好取代整个代码块,功能和所有,用:
app = webapp.WSGIApplication([
('/', MainPage),
('/rpc', RPCHandler),
], debug=True)
重新启动应用服务器并再次指向http://localhost:8080/
,我终于显示了该页面:
不幸的是,这个传奇仍在继续。我重启了appserver,得到了这个打印输出:
chris@thinkpad:~/code/get$ python ~/google_appengine/dev_appserver.py ./
INFO 2013-05-25 16:18:28,097 sdk_update_checker.py:244] Checking for updates to the SDK.
INFO 2013-05-25 16:18:28,322 sdk_update_checker.py:272] The SDK is up to date.
INFO 2013-05-25 16:18:28,354 api_server.py:153] Starting API server at: http://localhost:56101
INFO 2013-05-25 16:18:28,375 dispatcher.py:164] Starting server "default" running at: http://localhost:8080
INFO 2013-05-25 16:18:28,385 admin_server.py:117] Starting admin server at: http://localhost:8000
然后我点击“添加”按钮。这引发了一个错误,我在下面完整地印刷了这个错误,我无法弄明白:
INFO 2013-05-25 16:18:37,633 server.py:585] default: "GET / HTTP/1.1" 200 3597
INFO 2013-05-25 16:18:37,989 server.py:585] default: "GET /static/json2.js HTTP/1.1" 304 -
INFO 2013-05-25 16:18:38,164 server.py:585] default: "GET /favicon.ico HTTP/1.1" 404 154
ERROR 2013-05-25 16:18:41,469 webapp2.py:1528] __init__() takes exactly 1 argument (3 given)
Traceback (most recent call last):
File "/home/chris/google_appengine/lib/webapp2-2.3/webapp2.py", line 1511, in __call__
rv = self.handle_exception(request, response, e)
File "/home/chris/google_appengine/lib/webapp2-2.3/webapp2.py", line 1505, in __call__
rv = self.router.dispatch(request, response)
File "/home/chris/google_appengine/lib/webapp2-2.3/webapp2.py", line 1253, in default_dispatcher
return route.handler_adapter(request, response)
File "/home/chris/google_appengine/lib/webapp2-2.3/webapp2.py", line 1076, in __call__
handler = self.handler(request, response)
TypeError: __init__() takes exactly 1 argument (3 given)
ERROR 2013-05-25 16:18:41,471 wsgi.py:235]
Traceback (most recent call last):
File "/home/chris/google_appengine/google/appengine/runtime/wsgi.py", line 223, in Handle
result = handler(dict(self._environ), self._StartResponse)
File "/home/chris/google_appengine/lib/webapp2-2.3/webapp2.py", line 1519, in __call__
response = self._internal_error(e)
File "/home/chris/google_appengine/lib/webapp2-2.3/webapp2.py", line 1511, in __call__
rv = self.handle_exception(request, response, e)
File "/home/chris/google_appengine/lib/webapp2-2.3/webapp2.py", line 1505, in __call__
rv = self.router.dispatch(request, response)
File "/home/chris/google_appengine/lib/webapp2-2.3/webapp2.py", line 1253, in default_dispatcher
return route.handler_adapter(request, response)
File "/home/chris/google_appengine/lib/webapp2-2.3/webapp2.py", line 1076, in __call__
handler = self.handler(request, response)
TypeError: __init__() takes exactly 1 argument (3 given)
INFO 2013-05-25 16:18:41,479 server.py:585] default: "GET /rpc?action=Add&arg0=%221%22&arg1=%222%22&time=1369498721460 HTTP/1.1" 500 -
此时我被困住了。任何关于如何使这个演示正常运行的想法,或者更好的路径,让我的网络应用程序变得健壮,将不胜感激。
答案 0 :(得分:2)
如何让这个演示版本正常运行,或者更好的方法让我的网络应用程序变得健壮,我们将不胜感激。
由于在这里发布一个完整的应用程序会有点矫枉过正,我决定放一个very simple ajax demo on Github。这不会立即解决您的问题,但应该有助于理念。