Velmi jednoduché, objekt RequestHandler je vytvořen pro každý požadavek. Což znamená, že objekt uložený v mezipaměti, který ukládáte, je na objektu RequestHandler (např. expand).
Pokud byste k funkci dbmongo(...) přidali jednoduchý „tisk 'CREATED!'“, viděli byste, že se vytváří při každém požadavku GET.
Co musíte udělat, je připojit handler k objektu třídy nebo "globální" podle potřeby, i když nejlepším případem je umístit jej na objekt Tornado Application.
Jednoduché:
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
Druhým přístupem je pouze to, aby bylo globální ve vašem souboru:
dbmongo_connection = None
def dbmongo():
if not dbmongo_connection:
dbmongo_connection = apymongo.Connection("127.0.0.1", 27017)
return dbmongo_connection
Oba mají stejný problém, který spočívá v tom, že pokud máte mnoho tříd, které chtějí používat připojení DB, je těžší je sdílet. Protože DB je sdílená entita, pravděpodobně ji budete chtít pro celou aplikaci.
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()