Как получить доступ к своим функциям уровня базы данных внутри других классов/файлов в Tornado?

Я новичок в 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

Эта логика работает нормально, если я не выделил логику в отдельный файл, так что я явно делаю что-то не так или что-то упускаю.

7
задан Zac Clancy 1 April 2012 в 00:40
поделиться