Sangat sederhana, objek RequestHandler dipakai untuk setiap permintaan. Artinya, objek cache yang Anda simpan ada di objek RequestHandler (mis. expand).
Jika Anda menambahkan "print 'CREATED!'" sederhana ke fungsi dbmongo(...) Anda akan melihat bahwa itu dibuat pada setiap permintaan GET.
Yang perlu Anda lakukan adalah melampirkan handler ke objek kelas, atau "global" sesuai kebutuhan, meskipun kasus terbaik adalah meletakkannya di objek Aplikasi Tornado.
Sederhana:
class setup(tornado.web.RequestHandler):
@classmethod
def dbmongo(cls):
if not hasattr(cls, '_dbmongo'):
cls._dbmongo = apymongo.Connection("127.0.0.1", 27017)
return cls._dbmongo
Pendekatan kedua adalah menjadikannya global di file Anda:
dbmongo_connection = None
def dbmongo():
if not dbmongo_connection:
dbmongo_connection = apymongo.Connection("127.0.0.1", 27017)
return dbmongo_connection
Keduanya memiliki masalah yang sama yaitu jika Anda memiliki banyak kelas yang ingin menggunakan koneksi DB, akan lebih sulit untuk membagikannya. Karena DB adalah entitas bersama, Anda mungkin menginginkannya untuk seluruh aplikasi Anda.
class MongoMixin(object):
def mongodb(self):
if not hasattr(self.application, 'mongodb'):
self.application.mongodb = apymongo.Connection(self.application.settings.get("mongohost", "127.0.0.1"), 27017)
return self.application.mongodb
class expand(tornado.web.RequestHandler, MongoMixin):
def get(self):
db = self.mongodb()