龙卷风:路线中相同 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 请求(get
、post
等)选择调用哪个方法,因此无法在路由 table 中指定替代方法。改用不同的 classes(可能有一个共同的基础 class)。
Tornado 使用 "handlers" 的概念,它处理特定路径上的请求。处理程序是 类。在内部 Tornado 从这些 类 中选择一个方法,对应于请求中使用的 HTTP 动词。
在您的例子中,您有 2 条路径:/
和 /login
,我们分别称它们为 "Home" 和“登录”。现在,您需要有 2 个处理程序:HomeHandler
和 LoginHandler
并将它们分配给相应的路由...
路线:
(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
我是 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 请求(get
、post
等)选择调用哪个方法,因此无法在路由 table 中指定替代方法。改用不同的 classes(可能有一个共同的基础 class)。
Tornado 使用 "handlers" 的概念,它处理特定路径上的请求。处理程序是 类。在内部 Tornado 从这些 类 中选择一个方法,对应于请求中使用的 HTTP 动词。
在您的例子中,您有 2 条路径:/
和 /login
,我们分别称它们为 "Home" 和“登录”。现在,您需要有 2 个处理程序:HomeHandler
和 LoginHandler
并将它们分配给相应的路由...
路线:
(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