Я новичок в Tornado, и в настоящее время я пытаюсь преодолеть этот недавний камень преткновения. В настоящее время у меня определены некоторые переменные базы данных, и я создаю экземпляры обработчиков, настроек и информации о подключении к базе данных, когда запускаю класс приложения. У меня также есть базовый класс-обработчик (с именем BaseHandler), который предоставляет простой интерфейс базы данных для других классов. Я хотел бы разделить некоторые из моих классов на другие файлы и иметь большую часть моей логики базы данных в этих других методах класса и сохранить application.py для маршрутов и создания экземпляров этих других классов, когда это необходимо, и передать необходимые данные в их для базы данных. Как мне получить доступ к этой функции self.db из этих других файлов/классов?
application.py:
import tornado.database
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
from tornado.options import define, options
from user import User
# Define some startup settings, can be changed through the command line
define("port", default=8888, help="Run on the given HTTP port", type=int)
define("db_host", default="localhost:3306", help="Database host")
define("db_name", default="database_name", help="Database name")
define("db_user", default="user", help="Database username")
define("db_pass", default="password", help="Database password")
class Application(tornado.web.Application):
def __init__(self):
handlers = [
(r"/", MainHandler)
]
settings = dict(
application_title = u"Test Application",
template_path = os.path.join(os.path.dirname(__file__), "templates"),
static_path = os.path.join(os.path.dirname(__file__), "static"),
autoescape = None
)
tornado.web.Application.__init__(self, handlers, **settings)
self.db = tornado.database.Connection(
host=options.db_host, database=options.db_name,
user=options.db_user, password=options.db_pass)
class BaseHandler(tornado.web.RequestHandler):
@property
def db(self):
return self.application.db
class MainHandler(BaseHandler):
def get(self):
u = User()
self.write(tornado.escape.json_encode(u.get_user("test@test.com)))
user.py:
class User(object):
def get_user(self, email):
result = self.db.get("SELECT first_name, last_name FROM users WHERE email = %s", email)
if not result: return False
return True, result
Эта логика работает нормально, если я не выделил логику в отдельный файл, так что я явно делаю что-то не так или что-то упускаю.