2013-02-14 3 views
0

나는 토네이도에 새로운 오전, 나는이 질문의 목적이 단순화 된 코드를 가지고 :Tornado/Python -이 반복을 피하려면 어떻게해야합니까?

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는'하지 내가 페이지를 렌더링하는 post 또는 get 사용 여부에 따라 "정의.

내가 모든 페이지에 다른 제목을 가지고 있고, 나는 단순히 (즉, LoginHandler) 작동 하나 title 변수와 하나의 self.render("login.html"...) 페이지 당 핸들러를 가질 수 있는지 궁금 할 때 중 하나를 얻을 또는 포스트 함수가 호출된다. 축 어적 반복을 좋아하지 않지만 두 기능 모두에서 동일한 작업을 수행하지 않으면 오류 메시지를 피하는 데 문제가 있습니다.

어떻게 해결할 수 있습니까? 고맙습니다.

답변

1

당신은 클래스 멤버로를 시작하여 titleerror_message 변수를 재 선언 피할 수 있습니다. (I는이 값이 private 일 필요가 있음을 표시하기 위해 변수 이름에 밑줄 최고의 _을 사용하고이 클래스에 사용되는 전용입니다.)

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() 호출은 동일한 매개 변수를받지 않으므로 둘 다 필요합니다.

+0

대단합니다. 고맙습니다. 다행히 나는 마크로부터 뭔가를하지 않고 있었다. – JohnZ

관련 문제