我现在正在学习龙卷风,我认为这是一个很好的框架。 一切顺利,直到我将一些方法与main.py分开。
例如:
在main.py中,这是我的服务器启动程序。我使用tornado.options.define来定义一些这样的属性:
define("port", default=8888, help="run on the given port", type=int)
define("mysql_host", default="127.0.0.1:3306", help="blog database host")
define("mysql_database", default="forum", help="database name")
define("mysql_user", default="root", help="database user")
define("mysql_password", default="passwd", help="database password")
其中有一个BaseHandler:
class BaseHandler(tornado.web.RequestHandler):
@property
def db(self):
return self.application.db
def get_current_user(self):
return self.get_secure_cookie("username")
在另一个文件中,例如topic.py,topic.py中的每个处理程序都会在main.py中扩展BaseHandler,所以我像这样导入BaseHandler:
from main import BaseHandler
然后当我启动程序时出现问题:
Traceback (most recent call last):
File "/Users/abc/money/main.py", line 85, in <module>
define("port", default=8888, help="run on the given port", type=int)
File "/Library/Python/2.7/site-packages/tornado-2.2-py2.7.egg/tornado/options.py", line 93, in define
options[name].file_name)
tornado.options.Error: ('Option %r already defined in %s', 'port', '/Users/suyejun/Dropbox/money/main.py')
我该如何避免这种问题?或者还有另一种编写代码的方法吗?
答案 0 :(得分:4)
您需要将BaseHandler移动到另一个main.py文件。您遇到的问题是您有效地加载了main.py的代码两次。一旦启动应用程序,再次将代码导入topic.py。
我建议创建一个名为'pagemanager.py'的单独文件,并在其中放置任何共享类,函数和代码。然后将它们导入main.py和topic.py,而不会导致特定于Tornado初始化的代码出现问题。