Я сталкиваюсь с такой же ситуацией только сейчас, затем я просматриваю некоторые примеры на github и сделал это.
Я разделяю мои файлы как:
- server.py: запустить приложение
- urls.py: определить handers и ui_modules
- da.py: определить полезные методы для доступа к данным
Ниже приведено краткое описание каждого файла, я думаю, что это можетпоможет вам решить вашу проблему.
urls.py
import main
import topic
handlers=[]
handlers.extend(main.handlers)
handlers.extend(topic.handlers)
ui_modules={}
da.py
import tornado.database
from tornado.options import define,options
define("mysql_host", default="127.0.0.1:3306", help="database host")
define("mysql_database", default="forum", help="database name")
define("mysql_user", default="root", help="database user")
define("mysql_password", default="111111", help="database password")
db = tornado.database.Connection(
host=options.mysql_host, database=options.mysql_database,
user=options.mysql_user, password=options.mysql_password)
server.py
import os
import tornado.database
import tornado.httpserver
import tornado.ioloop
import tornado.web
from tornado.options import define, options
define("port", default=8888, help="run on the given port", type=int)
import da
class Application(tornado.web.Application):
def __init__(self):
from urls import handlers,ui_modules
settings = dict(
template_path=os.path.join(os.path.dirname(__file__), "templates"),
static_path=os.path.join(os.path.dirname(__file__), "static"),
xsrf_cookies=True,
cookie_secret="11oETzKXQAGaYdkL5gEmGeJJFuYh7EQnp2XdTP1o/Vo=",
login_url="/signin",
ui_modules=ui_modules,
debug=True,
)
super(Application,self).__init__(handlers,**settings)
# tornado.web.Application.__init__(self, handlers, **settings)
# Have one global connection to the blog DB across all handlers
self.db = da.db
def runserver():
tornado.options.parse_command_line()
http_server = tornado.httpserver.HTTPServer(Application())
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()
if __name__ == "__main__":
runserver()
Вы можете использовать db просто 'из da import *', и тогда все будет хорошо, или вы можете написать BaseHandler, расширяет tornado.web.RequestHandler и определить свойство:
class BaseHandler(tornado.web.RequestHandler):
@property
def db(self):
return self.application.db
Каждый обработчик, расширяющий BaseHandler, может использовать self.db для выполнения операций с базой данных.