개요
RequestHandler의 get, post 외의 여러 메서드는 하위 클래스에서 재정의될 수 있도록 설계되어 있다.
이번 글에서는 요청 받은 RequestHandler의 동작 순서, 그리고 일반적으로 재정의되는 메서드를 적어둔다.
동작 순서
RequestHandler는 모든 요청에 대해 다음과 같이 동작한다.
1. 각 요청마다 새로운 RequestHandler 객체가 생성된다.
2. initialize 함수가 호출된다. initialize 함수는 Application 구성으로부터 초기화 변수를 전달받아 호출되며, 전달 받은 인수를 멤버 변수로 저장한다. 또한 send_error와 같은 함수를 호출하거나 출력을 생성하지 않는다.
3. prepare 함수가 호출된다. prepare 함수는 어떤 HTTP 요청이 와도 항상 호출된다. 따라서 모든 핸들러에서 공유하는 기본 핸들러 클래스에서 유용한다. 또한 출력을 생성할 수 있고, finish 함수나 redirect 함수를 호출하면 처리가 중지된다.
4. get(), post(), put() 등 HTTP 메서드가 호출된다. URL 정규 표현식에 캡쳐링 그룹(capturing groups)이 포함되어 있으면 메서드에 인수로 전달된다.
5. 요청이 끝나면 on_finish 함수가 호출된다. 일반적으로 get이나 다른 HTTP 메소드가 반환된 이후가 된다.
필요 시에 initialize, prepare, on_finish 등의 함수도 재정의하여 사용하면 된다.
메서드
공식 문서에 따르면 RequestHandler에서 재정의할 수있는 메서드는 https://www.tornadoweb.org/en/branch6.1/web.html#tornado.web.RequestHandler에서 전부 확인할 수 있다.
다만 일반적으로 재정의하는 메서드는 아래와 같다고 한다.
- write_error : 오류 페이지에서 사용할 HTML 출력
- on_connection_close : 클라이언트가 연결을 끊을 때 호출한다. 클라이언트가 연결을 종료하는 경우를 감지하여 처리가 더이 상 이어지지 않도록 한다. 연결이 끊기는 것을 즉시 감지하지는 않을 수 있다.
- get_current_user - see User authentication.
- get_user_locale - returns Locale object to use for the current user.
- set_default_headers - may be used to set additional headers on the response (such as a custom Server header).
참고 문서
https://www.tornadoweb.org/en/branch6.1/guide/structure.html#overriding-requesthandler-methods