我在龙卷风中相当新鲜。我可以使用下面的东西吗?
类
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)。
感谢您的帮助。感谢
答案 0 :(得分:2)
不,那是不可能的。 Tornado根据HTTP请求(get
,post
等)选择调用哪种方法,因此无法在路由表中指定替代方法。改为使用不同的类(可能使用公共基类)。
答案 1 :(得分:1)
Tornado使用“处理程序”的概念,即处理特定路径的请求。处理程序是类。内部Tornado从这些类中选择与请求中使用的HTTP谓词相对应的方法。
在您的情况下,您有2个路径:/
和/login
,我们分别称它们为“Home”和“Login”。现在,您需要有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