我是一名python新手,开始在Google App Engine上使用Bottle网络框架。我一直在搞乱超小型,超级简单的Hello World样本,并且已经遇到了问题。嘿。我终于得到了代码来处理这个......
import bottle
from bottle import route
from google.appengine.ext.webapp import util
@route('/')
def index():
return "Hello World!"
util.run_wsgi_app(bottle.default_app())
我的问题是,我想我可以在没有第二行的情况下去'导入瓶'。但如果我拿出第二行,我会得到一个NameError。或者如果我从'瓶子导入''',我仍然得到错误。 bottle只是我网站根目录中名为'bottle.py'的单个文件。所以这些都不起作用......
import bottle
from google.appengine.ext.webapp import util
@route('/')
def index():
return "Hello World!"
util.run_wsgi_app(bottle.default_app())
或者
from bottle import *
from google.appengine.ext.webapp import util
@route('/')
def index():
return "Hello World!"
util.run_wsgi_app(bottle.default_app())
我得到的错误信息是......
追踪(最近的呼叫最后):
文件 “/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py” 第3180行,在_HandleRequest中 self._Dispatch(dispatcher,self.rfile,outfile,env_dict)文件 “/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py” 第3123行,在_Dispatch中 base_env_dict = env_dict)文件“/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py”, 第515行,在Dispatch中 base_env_dict = base_env_dict)文件 “/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py” 第2382行,在Dispatch中 self._module_dict)文件“/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py”, 第2292行,在ExecuteCGI中 reset_modules = exec_script(handler_path,cgi_path, hook)文件 “/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py” 第2188行,在ExecuteOrImportScript中 exec module_code在script_module。 dict 文件中 “/Users/tyler/Dropbox/sites/dietgrid/code2.py” 第4行,在 @route('/')NameError:未定义名称'route'
所以我认为它应该能够以其他方式工作或者不工作是错误的吗?
答案 0 :(得分:8)
在您的代码中,您有两种不同的方法从瓶包中调用方法。
route('/hello')
和
bottle.default_app()
首次通话需要from bottle import route
或from bottle import *
,第二次通话需要import bottle
。
from foo import bar
允许您在代码中使用方法或参数bar
,而无需在每次调用时指定包。
答案 1 :(得分:5)
关于为什么
from bottle import *
不起作用:当你这样导入时,只导入瓶子的_____all_____列表中指定的名称。因此,如果路由不存在,则必须明确指定导入:
from bottle import route
答案 2 :(得分:3)
route
是bottle
模块的一部分。
以下内容应解决问题
import bottle
...
@bottle.route('/hello')
def hello():
return "Hello World!"
...
答案 3 :(得分:2)
您可以将瓶子导入您的命名空间,因此每次您希望使用其中的某些内容时,您都需要bottle.
作为前缀。
import bottle
from google.appengine.ext.webapp import util
@bottle.route('/')
def index():
return "Hello World!"
util.run_wsgi_app(bottle.default_app())
另一种方法是将要使用的瓶子部分导入命名空间。
from bottle import route, default_app
from google.appengine.ext.webapp import util
@route('/')
def index():
return "Hello World!"
util.run_wsgi_app(default_app())
答案 4 :(得分:0)
我也学会了使用带GAE的瓶子,因为它的体积非常小。你可以做的是直接将瓶子与你的主文件保持在一起,这将允许你使用'import bottle',或者放入一个文件夹(将它与其他文件分开,给出一个整洁的结构),并添加一个空的{{1文件到该文件夹。然后您可以将其导入为__init__.py
,依此类推。
我在how to use Bottle with GAE上写了一个小教程。