[英]Tornado/Python – How do I avoid this repetition?
我是Tornado的新手,出于这个问题,我有以下简化代码:
class LoginHandler(BaseHandler):
def get(self):
error_message = None
title = "Log in to your account"
self.render("login.html", error_message=error_message, title=title)
def post(self):
#function and params excluded for brevity of question
error_message = self.authenticate_user()
title = "Log in to your account"
self.render("login.html", error_message=error_message, title=title)
self.render("login.html", error_message=error_message, title = title)
和title变量(看似不必要),因为否则,我得到的错误是“未定义全局变量'title'或'error_message' ”,具体取决于我使用post
还是get
网页。
我为每个页面使用了不同的标题,我想知道如何在每个页面处理程序(即LoginHandler
)中简单地拥有一个title
变量和一个self.render("login.html"...)
,当调用get或post函数。 我不喜欢逐字记录重复,但是当我在两个函数中都没有做相同的事情时,我很难避免出现错误消息。
我该如何解决? 谢谢。
通过将它们初始化为类成员,可以避免重新声明title
和error_message
变量。 (我在变量名中使用了下划线_
来指示此值应为私有值,并且只能在此类中使用。)
class LoginHandler(BaseHandler):
def __init__(self):
# Call the BaseHandler's __init__ function to initialize parent's members
BaseHandler.__init__()
self._title = "Log in to your account"
def get(self):
self.render("login.html", error_message=None, title=self._title)
def post(self):
self.render("login.html", error_message=self.authenticate_user(), title=self._title)
这样做的额外好处是,您只需要在一个位置更改title
,而不必冒根据方法是get
还是post
获得另一个标题的风险。
注意:似乎在error_message
中不是必需的-仅在一种情况下使用。 self.render()
调用不会接收相同的参数,因此都是必需的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.