개요
2024.06.28-[Tornado] RequestHandler - 동작 순서와 메서드 재정의에서 initialize 함수는 전달받은 매개변수를 멤버 변수로 저장하는 역할을 수행한다고 했었다.
이번 글에서는 initialize에 매개변수를 전달하는 방법을 적어둔다.
RequestHandler
예시로 아래의 MainHandler의 initialize는 2개의 매개변수를 전달받아 멤버 변수로 저장한다.
class MainHandler(RequestHandler):
def initialize(self, admin_id, admin_password):
self.admin_id = admin_id
self.admin_password = admin_password
Application
Application 생성자는 Rule 객체 리스트 또는 Rule 생성자의 인수에 해당하는 튜플 리스트를 전달받는다. 전달받는 튜플 원소는 (matcher, target, [target_kwargs], [name])인데, 그 중 target_kwargs가 핸들러의 initialize 함수의 키워드 인수로 전달된다.
아래 코드는 예로 들었던 햄들러에 값을 전달하는 예시이다.
def make_app():
admin_id, admin_password = 'ADMIN', 'PASSWD'
return Application([
(r"/", MainHandler, dict(admin_id=admin_id, admin_password=admin_password)),
])
테스트
핸들러에 값 그대로 응답하는 get 함수를 재정의하여 값이 제대로 전달되었는지 확인해 보았다.
class MainHandler(RequestHandler):
def initialize(self, admin_id, admin_password):
self.admin_id = admin_id
self.admin_password = admin_password
def get(self):
self.write(self.admin_id)
전체 코드는 접은글로 적어둔다.
더보기
from tornado.web import Application, RequestHandler
from tornado.ioloop import IOLoop
class MainHandler(RequestHandler):
def initialize(self, admin_id, admin_password):
self.admin_id = admin_id
self.admin_password = admin_password
def get(self):
self.write(self.admin_id)
def make_app():
admin_id, admin_password = 'ADMIN', 'PASSWD'
return Application([
(r"/", MainHandler, dict(admin_id=admin_id, admin_password=admin_password)),
])
if __name__ == "__main__":
app = make_app()
app.listen(8888)
IOLoop.current().start()
정상적으로 응답이 돌아온 것을 확인할 수 있다.
참고 문서
https://www.tornadoweb.org/en/stable/web.html#tornado.web.Application