Tornado'da yeniyim ve şu anda bu yeni engelle karşılaşmaya çalışıyorum. Şu anda bazı veritabanı değişkenleri tanımlanmış ve Uygulama sınıfını başlattığımda işleyicileri, ayarları ve veritabanı bağlantı bilgilerini başlatıyorum. Ayrıca, diğer sınıflara basit bir veritabanı arabirimi sağlayan bir temel işleyici sınıfı (BaseHandler adlı) var. Sınıflarımın bir kısmını diğer dosyalara bölmek ve diğer sınıf yöntemlerinde veritabanı mantığımın çoğuna sahip olmak ve rotalar için application.py'yi tutmak ve gerektiğinde bu diğer sınıfları başlatmak ve gerekli verileri iletmek istiyorum. veritabanı için onları. Bu self.db işlevine diğer dosya/sınıflardan nasıl erişirim?Veritabanı düzey işlevlerime Tornado'daki diğer sınıflar/dosyalar içinde nasıl erişirim?
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("[email protected])))
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
Ben ayrı dosyaya dışarı mantığı ayrılmış hallerdeki mantık yüzden, ince işliyor Açıkçası bir şeyleri yanlış/eksik yapıyorum.
Awesome! Doğru yönde ilerlediğiniz için teşekkür ederim. –
:). Şimdi kodumda bazı değişiklikler yaptım. Db'yi da.py'de tanımlarım ve veri erişim yöntemlerini 'GetKindById (self, id)' gibi yazdım. Ve self.db'yi server.py içinde tanımlamanıza gerek yoktur, çünkü db'yi kullanmak istediğiniz her zaman, onu da.py'den içe aktarabilir veya verilere erişmek için 'GetKindById (self, id)' gibi yöntemleri çağırabilirsiniz. – goofansu
Tornado 2.4 gün boyunca tornado.database'in kullanımdan kaldırıldığını ve Tornado 3.0'ın artık kullanılmadığı [torndb] 'a (https://github.com/bdarnell/torndb) taşındığını unutmamak önemlidir. Python 3 ile uyumlu değil – Marc