TurboGears – 후크

TurboGears에는 기존 애플리케이션 내부의 동작을 연결하는 세 가지 방법이 있습니다.

  • Hook − 이벤트를 정의하고 이벤트가 발생하면 등록 된 리스너에게 알릴 수있는 메커니즘입니다.

  • Controller Wrapper− TurboGears와 Controller 사이에 위치하여 데코레이터처럼 컨트롤러를 확장 할 수 있습니다. 따라서 타사 컨트롤러 응용 프로그램에 연결할 수 있습니다.

  • Application Wrapper − WSGI 미들웨어와 유사하지만 TurboGears 컨텍스트에서만 작동합니다.

이 장에서는 기존 애플리케이션 내에서 후크를 사용하는 방법에 대해 설명합니다.

후크

후크는 애플리케이션의 구성 파일에 등록 된 이벤트입니다. app_cfg.py. 그런 다음 모든 컨트롤러는 이벤트 데코레이터에 의해 이러한 이벤트에 연결됩니다.

다음 후크는 TurboGears에서 정의됩니다.

Sr. 아니. 후크 및 설명
1

Startup()

응용 프로그램 전체에만 해당되며 응용 프로그램이 시작될 때 호출됩니다.

2

shutdown()

애플리케이션 전체에만 해당되며 애플리케이션이 종료 될 때 호출됩니다.

configure_new_app

응용 프로그램 구성자가 새 응용 프로그램을 생성했습니다.

4

before_config(app)

응용 프로그램 전체에만 해당, 응용 프로그램을 만든 직후에 호출되지만 옵션 및 미들웨어를 설정하기 전에

5

after_config(app)

모든 설정을 마친 후 호출됩니다.

6

before_validate

유효성 검사를 수행하기 전에 호출 됨

7

before_call

실제 컨트롤러 메서드를 호출하기 전에 유효성 검사 후 호출됩니다.

8

before_render

컨트롤러 템플릿을 렌더링하기 전에 호출되는 출력은 컨트롤러 반환 값입니다.

9

after_render

컨트롤러 템플릿 렌더링을 마친 후 호출됩니다.

후크 등록

하기 위해 register a Hook, 함수 생성 app_cfg.py 다음 코드를 사용하여 등록하십시오-

tg.hooks.register(hookane, function, controller)

다음 코드에서 on_startup, on_shutdown 및 before_render 후크는 app_cfg.py에 등록됩니다.

def on_startup():
   print 'hello, startup world'
   
def on_shutdown():
   print 'hello, shutdown world'
   
def before_render(remainder, params, output):
   print 'system wide before render'
   
# ... (base_config init code)
tg.hooks.register('startup', on_startup)
tg.hooks.register('shutdown', on_shutdown)
tg.hooks.register('before_render', before_render)

before_render 후크는 Rootcontroller의 컨트롤러 함수에 등록됩니다. controllers \ root.py에 다음 코드를 추가하십시오.

from tg.decorators import before_render

class RootController(BaseController):
   @expose('hello.templates.index')
   @before_render(before_render_cb)
	
   def index(self, *args, **kw):
      return dict(page = 'index')

애플리케이션이 제공되면 콘솔에 시작 메시지가 표시됩니다.

hello, startup world
Starting Standard HTTP server on http://127.0.0.1:8080

브라우저에 '/'URL을 입력하면 before_render 후크에 해당하는 메시지가 콘솔에 표시됩니다.

system wide before render
Going to render {'page': 'index'}