Comment faire une "redirection interne" dans Tornado?


Dziga Vertov

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?

Dziga Vertov

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)

Articles connexes


Comment faire une redirection interne dans reactjs?

Henrydoe Je suis un peu nouveau pour réagir et je me demandais comment rediriger en interne vos pages dans reactjs. J'ai deux pages appelées register et register2. Dans la page d'inscription, je vérifie simplement si l'e-mail existe dans la base de données ou

Redirection interne dans Flask

sinistre En bref: En utilisant uniquement le micro-framework Flask (et ses dépendances), pouvons-nous effectuer une redirection interne d'une route à une autre? Par exemple: L'utilisateur soumet le formulaire d'inscription (à la fois usernameet password) à@app

Comment faire une boucle dans une variable

Skyyy J'ai un tableau contenant les noms de colonne d'une table que je veux créer et que j'ai obtenue à partir d'une feuille Excel. J'ai essayé quelque chose comme ça $sql = "CREATE TABLE IF NOT EXISTS ".$month."-".date('Y')."( ".foreach($tableColumnNames

Comment faire une soustraction dans une liste?

TangerCity J'ai 3 listes et 1 valeur: my_value = 500 minimal_values = ['0,32', '0,35', '0,45'] maximal_values = ['0,78', '0,85', '0,72'] my_list = [ ['Morocco', 'Meat', '190,00', '0,15'], ['Morocco', 'Meat', '189,90', '0,32'], ['Morocco', 'Meat

Comment obtenir une entrée POST de formulaire dans Tornado?

Jand Je suis nouveau sur le framework Tornado et j'essaie de créer un formulaire simple pour télécharger des images: <form method="post" action="/uploads/{{uid}}/" enctype="multipart/form-data" > <input type="file" name="file1" /> <br /> Image info: <in

Comment recevoir plusieurs demandes dans une application Tornado

k4ppa J'ai une application Web Tornado, cette application peut recevoir des requêtes GET et POST du client. La requête POSTs place une information reçue dans une file d'attente Tornado, puis je fais sortir cette information de la file d'attente et avec elle je