Comment faire une "redirection interne" dans Tornado?
Je porte une application Web multi-locataire vers Python / Tornado. Disons que chaque site locataire a deux pages: "/ foo" et "/ bar". Jusqu'ici, si facile avec Handlers.
Cependant, les locataires peuvent choisir le contenu à afficher sur leur page d'accueil ("/"). Cela peut être le contenu de / foo ou / bar, mais les utilisateurs finaux ne doivent pas être redirigés. En fait, les locataires peuvent choisir n'importe quelle page de leur site et en faire leur page d'accueil.
Dans le cadre PHP auquel je suis habitué, cela a été accompli via une logique de routage interne. Mais je ne peux pas pour la vie de moi comprendre comment accomplir la même chose avec Tornado.
Je lis actuellement l'état de configuration de chaque client dans la méthode prepare () de mon BaseHandler. Mais c'est clairement trop tard pour affecter la logique de routage, qui a déjà mappé la demande à un gestionnaire.
Est-il possible que je puisse attacher une fonction de routage personnalisée à "/" qui me permet de sélectionner un gestionnaire pour répondre à la demande?
Je l'ai compris après l'indication de @xyres. Je ne crois pas que cela soit documenté nulle part.
La règle en application:
url(r"/", HomeRouter(self), name="home"),
La classe:
from tornado.routing import Router
class HomeRouter(Router):
def __init__(self, application):
self.application = application
def find_handler(self, request, **kwargs):
...logic here...
home_handler = ChosenHandler
return self.application.get_handler_delegate(request, home_handler)