龙卷风:路线中相同 class 的不同方法

Tornado: Different methods in same class in routes

我是 Tornado 的新手。我可以使用类似下面的东西吗?

Class

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)。

感谢您的帮助。谢谢

不,那不可能。 Tornado 根据 HTTP 请求(getpost 等)选择调用哪个方法,因此无法在路由 table 中指定替代方法。改用不同的 classes(可能有一个共同的基础 class)。

Tornado 使用 "handlers" 的概念,它处理特定路径上的请求。处理程序是 类。在内部 Tornado 从这些 类 中选择一个方法,对应于请求中使用的 HTTP 动词。

在您的例子中,您有 2 条路径://login,我们分别称它们为 "Home" 和“登录”。现在,您需要有 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