Très simple, l'objet RequestHandler est instancié pour chaque requête. Ce qui signifie que l'objet mis en cache que vous enregistrez se trouve sur l'objet RequestHandler (par exemple, développer).
Si vous deviez ajouter un simple "print 'CREATED!'" à la fonction dbmongo(...), vous verriez qu'il est créé à chaque requête GET.
Ce que vous devez faire est d'attacher le gestionnaire à l'objet de classe, ou à un "global" selon les besoins, bien que le meilleur des cas soit de le mettre sur l'objet Tornado Application.
Simple :
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
La deuxième approche consiste simplement à en faire un global dans votre fichier :
dbmongo_connection = None
def dbmongo():
if not dbmongo_connection:
dbmongo_connection = apymongo.Connection("127.0.0.1", 27017)
return dbmongo_connection
Les deux ont le même problème, c'est-à-dire que si vous avez beaucoup de classes qui veulent utiliser la connexion DB, il est plus difficile de la partager. Étant donné que la base de données est une entité partagée, vous en voudrez probablement une pour l'ensemble de votre application.
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()