TurboGears - Kancalar

TurboGears'ta, mevcut uygulamaların içindeki davranışları eklemenin üç yolu vardır.

  • Hook - Bir olayı tanımlamanın ve kayıtlı dinleyicileri olayların yayınlandığı zaman ve ne zaman yayınlanacağını bildirmenin mümkün olduğu bir mekanizmadır.

  • Controller Wrapper- TurboGears ile Denetleyici arasında bulunur, böylece denetleyiciyi bir dekoratör gibi genişletmek mümkündür. Böylece, herhangi bir üçüncü taraf denetleyici uygulamasına eklenebilir.

  • Application Wrapper - Herhangi bir WSGI ara yazılımına benzer, ancak yalnızca TurboGears bağlamında çalışır.

İşte bu bölümde, mevcut bir uygulamada kancaların nasıl kullanılacağını tartışacağız.

Kancalar

Hook'lar, uygulamanın yapılandırma dosyasında kayıtlı olaylardır app_cfg.py. Daha sonra herhangi bir denetleyici, olay dekoratörleri tarafından bu olaylara bağlanır.

Aşağıdaki kancalar TurboGears'ta tanımlanmıştır -

Sr.No. Kancalar ve Açıklama
1

Startup()

yalnızca uygulama geniş, uygulama başladığında çağrılır.

2

shutdown()

yalnızca uygulama genişliğinde, uygulama çıkıldığında çağrılır.

3

configure_new_app

uygulama yapılandırıcısı tarafından yeni uygulama oluşturuldu.

4

before_config(app)

yalnızca uygulama genelinde, uygulama oluşturulduktan hemen sonra, ancak seçenekleri ve ara yazılımları ayarlamadan önce çağrılır

5

after_config(app)

yalnızca uygulama geniş, her şeyi ayarladıktan sonra çağrılır.

6

before_validate

Doğrulama yapılmadan önce çağrıldı

7

before_call

Doğrulamadan sonra, gerçek denetleyici yöntemini çağırmadan önce çağrılır.

8

before_render

Bir denetleyici şablonunu oluşturmadan önce çağrılan çıktı, denetleyici dönüş değeridir.

9

after_render

Bir denetleyici şablonunun işlenmesi tamamlandıktan sonra çağrılır.

Bir Kanca Kaydedin

amacıyla register a Hook, fonksiyonlar oluşturmak app_cfg.py ve sonra aşağıdaki kodu kullanarak bunları kaydedin -

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

Aşağıdaki kodda, on_startup, on_shutdown ve before_render kancaları app_cfg.py dosyasında kayıtlıdır.

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 kancası, Kök denetleyicideki bir denetleyici işlevi ile kaydedilir. Aşağıdaki kodu controllers \ root.py içine ekleyin.

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')

Uygulama sunulduğunda konsolda başlatma mesajı görüntülenir.

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

Tarayıcıya '/' URL'si girildiğinde, konsolda before_render kancasına karşılık gelen bir mesaj görüntülenir.

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