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