龙卷风:路线中同一类别的不同方法

时间:2017-07-14 16:11:06

标签: python tornado

我在龙卷风中相当新鲜。我可以使用下面的东西吗?

class HomeHandler(BaseHandler):

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

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

路线

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

这不起作用。我尝试使用HomeHandler.login(),但不确定如何传递必需的引用(应该类似于self)。

感谢您的帮助。感谢

2 个答案:

答案 0 :(得分:2)

不,那是不可能的。 Tornado根据HTTP请求(getpost等)选择调用哪种方法,因此无法在路由表中指定替代方法。改为使用不同的类(可能使用公共基类)。

答案 1 :(得分:1)

Tornado使用“处理程序”的概念,即处理特定路径的请求。处理程序是类。内部Tornado从这些类中选择与请求中使用的HTTP谓词相对应的方法。

在您的情况下,您有2个路径://login,我们分别称它们为“Home”和“Login”。现在,您需要有2个处理程序:HomeHandlerLoginHandler并将它们分配给相应的路线...

路线:

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

处理程序类:

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