Python

[Tornado] RequestHandler - 동작 순서와 메서드 재정의

비번변경 2024. 7. 23. 12:16

개요

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