运行 一个简单的 Python Tornado 应用程序初始化错误
Initialize error when running a simple Python Tornado app
我正在尝试学习如何使用 python 网络框架 Tornado。我已经熟悉 Flask,但到目前为止,我什至很难启动一个简单的应用程序。我的目录结构如下:
- 应用程序
- 静态
- 模板
- Testing.html
-app.py
我在 app.py 中的代码很简单:
define("port", default=5000, help="run on the given port", type=int)
class Application(tornado.web.Application):
def __init__(self):
handlers = [
(r"/", MainHandler),
]
settings = dict(
template_path=os.path.join(os.path.dirname(__file__), "templates"),
static_path=os.path.join(os.path.dirname(__file__), "static"),
debug=True,
)
super(Application, self).__init__(handlers, **settings)
class MainHandler(tornado.web.RedirectHandler):
def get(self):
self.render("Testing.html")
if __name__ == "__main__":
http_server = tornado.httpserver.HTTPServer(Application())
http_server.listen(options.port)
tornado.ioloop.IOLoop.current().start()
但是当我 运行 app.py 我得到错误:
ERROR:tornado.application:Uncaught exception
Traceback (most recent call last):
File "/vt/release/dist/3p/anaconda/lib/python2.7/site-packages/tornado/http1connection.py", line 238, in _read_message
delegate.finish()
File "/vt/release/dist/3p/anaconda/lib/python2.7/site-packages/tornado/httpserver.py", line 289, in finish
self.delegate.finish()
File "/vt/release/dist/3p/anaconda/lib/python2.7/site-packages/tornado/web.py", line 2047, in finish
self.execute()
File "/vt/release/dist/3p/anaconda/lib/python2.7/site-packages/tornado/web.py", line 2067, in execute
**self.handler_kwargs)
File "/vt/release/dist/3p/anaconda/lib/python2.7/site-packages/tornado/web.py", line 187, in __init__
self.initialize(**kwargs)
TypeError: initialize() takes at least 2 arguments (1 given)
这是为什么?我应该提一下,在我尝试连接之前它不会给我错误。
您的 MainHandler 应该继承自 RequestHandler,而不是 RedirectHandler。
(详细信息:RedirectHandler 需要两个参数,"self" 和 "target_path"。您可以在 Application.__init__ 中的处理程序列表中指定目标路径。因为您没有处理程序列表中的第二个参数,而你错误地从 RedirectHandler 继承,Tornado 得到一个异常。)
我正在尝试学习如何使用 python 网络框架 Tornado。我已经熟悉 Flask,但到目前为止,我什至很难启动一个简单的应用程序。我的目录结构如下:
- 应用程序
- 静态
- 模板
- Testing.html -app.py
我在 app.py 中的代码很简单:
define("port", default=5000, help="run on the given port", type=int)
class Application(tornado.web.Application):
def __init__(self):
handlers = [
(r"/", MainHandler),
]
settings = dict(
template_path=os.path.join(os.path.dirname(__file__), "templates"),
static_path=os.path.join(os.path.dirname(__file__), "static"),
debug=True,
)
super(Application, self).__init__(handlers, **settings)
class MainHandler(tornado.web.RedirectHandler):
def get(self):
self.render("Testing.html")
if __name__ == "__main__":
http_server = tornado.httpserver.HTTPServer(Application())
http_server.listen(options.port)
tornado.ioloop.IOLoop.current().start()
但是当我 运行 app.py 我得到错误:
ERROR:tornado.application:Uncaught exception
Traceback (most recent call last):
File "/vt/release/dist/3p/anaconda/lib/python2.7/site-packages/tornado/http1connection.py", line 238, in _read_message
delegate.finish()
File "/vt/release/dist/3p/anaconda/lib/python2.7/site-packages/tornado/httpserver.py", line 289, in finish
self.delegate.finish()
File "/vt/release/dist/3p/anaconda/lib/python2.7/site-packages/tornado/web.py", line 2047, in finish
self.execute()
File "/vt/release/dist/3p/anaconda/lib/python2.7/site-packages/tornado/web.py", line 2067, in execute
**self.handler_kwargs)
File "/vt/release/dist/3p/anaconda/lib/python2.7/site-packages/tornado/web.py", line 187, in __init__
self.initialize(**kwargs)
TypeError: initialize() takes at least 2 arguments (1 given)
这是为什么?我应该提一下,在我尝试连接之前它不会给我错误。
您的 MainHandler 应该继承自 RequestHandler,而不是 RedirectHandler。
(详细信息:RedirectHandler 需要两个参数,"self" 和 "target_path"。您可以在 Application.__init__ 中的处理程序列表中指定目标路径。因为您没有处理程序列表中的第二个参数,而你错误地从 RedirectHandler 继承,Tornado 得到一个异常。)