龙卷风/ Python - 我如何避免这种重复?

时间:2013-02-14 06:18:21

标签: python tornado

我是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)以及标题变量(看似不必要),否则,我得到错误“全局变量'标题'或'error_message'未定义”,这取决于我是否使用{{1或post呈现页面。

我对每个页面都有不同的标题,我想知道如何只使用一个get变量和一个title每页处理程序(即self.render("login.html"...))当调用get或post函数时。我不喜欢逐字重复,但是当我在两个函数中都没有做同样的事情时,我无法避免错误消息。

我该如何解决这个问题?谢谢。

1 个答案:

答案 0 :(得分:1)

您可以通过将titleerror_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,并且根据方法是否为{{1},您不会冒险获得不同的标题}或get

注意:似乎post中没有必要 - 它仅用于单个案例。 error_message调用不会收到相同的参数,因此都是必需的。