2017-07-14 3 views
0

Je suis assez nouveau dans Tornado. Puis-je utiliser quelque chose comme ci-dessous?Tornade: différentes méthodes dans la même classe dans les routes

Classe

class HomeHandler(BaseHandler): 

    def get(self): 
     return self.render("home.html") 

    def login(self): 
     return self.render("login.html") 

Routes

(r"/", HomeHandler), 
(r"/login", HomeHandler.login, dict(db=db)), 

Ce ne fonctionne pas. J'ai essayé d'utiliser HomeHandler.login(), mais je ne suis pas sûr de savoir comment passer les références requises (qui devrait être similaire à soi-même).

J'apprécie votre aide. Merci

Répondre

1

Tornado utilise le concept de "gestionnaires", qui, de plus, gère les demandes à un certain chemin. Les gestionnaires sont des classes. En interne, Tornado sélectionne une méthode de ces classes correspondant au verbe HTTP utilisé dans la requête.

Dans votre cas, vous avez 2 chemins: / et /login, nous allons les appeler « Accueil » et « Connexion respectivement Maintenant, vous devez avoir 2 gestionnaires:. HomeHandler et LoginHandler et les affecter à des itinéraires correspondants ...

Routes:

(r"/", HomeHandler), 
(r"/login", LoginHandler, {"db": db}) 

Classes handler:

class HomeHandler(BaseHandler): 

    def get(self): 
     # Will work for GET yoursite.com/, e.g. when opened in a browser 
     # The next line will render a template and return it to the browser 
     self.render("home.html") 


class LoginHandler(BaseHandler): 

    def initialize(self, db): 
     # That `db` from route declaration is passed as an argument 
     # to this Tornado specific method 
     self.db = db 

    def get(self): 
     # Will work for GET yoursite.com/login, e.g. when opened in a browser 
     # You may use self.db here 
     # The next line will render a template and return it to the browser 
     self.render("login.html") 

    def post(self): 
     # Will work for POST yoursite.com/login, e.g. when the data 
     # from the form on the Login page is sent back to the server 
     # You may use self.db here 
     return 
1

Non, ce n'est pas possible. Tornado choisit la méthode à appeler en fonction de la requête HTTP (get, post, etc.), il n'est donc pas possible de spécifier une autre méthode dans la table de routage. Utilisez plutôt des classes différentes (probablement avec une classe de base commune).