TurboGears - Pengait

Ada tiga cara di TurboGears untuk menyambungkan perilaku di dalam aplikasi yang sudah ada.

  • Hook - Ini adalah mekanisme yang memungkinkan untuk mendefinisikan suatu peristiwa, dan memberi tahu pendengar terdaftar saat dan kapan peristiwa itu dipancarkan.

  • Controller Wrapper- Itu berada di antara TurboGears dan Controller, sehingga memungkinkan untuk memperluas controller seperti dekorator. Dengan demikian, ini dapat dilampirkan ke aplikasi pengontrol pihak ketiga mana pun.

  • Application Wrapper - Ini mirip dengan middleware WSGI, tetapi hanya bekerja dalam konteks TurboGears.

Di sini, di bab ini, kita akan membahas cara menggunakan hook di dalam aplikasi yang sudah ada.

Pengait

Hooks adalah peristiwa yang terdaftar di file konfigurasi aplikasi app_cfg.py. Setiap pengontrol kemudian dihubungkan ke acara ini oleh dekorator acara.

Pengait berikut ditentukan di TurboGears -

Sr.No. Hooks & Description
1

Startup()

application wide only, dipanggil saat aplikasi dimulai.

2

shutdown()

aplikasi hanya lebar, dipanggil saat aplikasi keluar.

3

configure_new_app

aplikasi baru dibuat oleh konfigurator aplikasi.

4

before_config(app)

aplikasi hanya luas, dipanggil tepat setelah membuat aplikasi, tetapi sebelum mengatur opsi dan middleware

5

after_config(app)

aplikasi hanya lebar, dipanggil setelah menyelesaikan pengaturan semuanya.

6

before_validate

Dipanggil sebelum melakukan validasi

7

before_call

Dipanggil setelah validasi, sebelum memanggil metode pengontrol yang sebenarnya.

8

before_render

Dipanggil sebelum merender template pengontrol, keluarannya adalah nilai kembali pengontrol.

9

after_render

Dipanggil setelah selesai merender template pengontrol.

Daftarkan Hook

Untuk register a Hook, buat fungsi di app_cfg.py dan kemudian daftarkan mereka menggunakan kode berikut -

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

Dalam kode berikut, pengait on_startup, on_shutdown dan before_render terdaftar di 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)

Hook before_render terdaftar dengan fungsi pengontrol di Rootcontroller. Tambahkan kode berikut di 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')

Saat aplikasi disajikan, pesan start up ditampilkan di konsol.

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

Saat URL '/' dimasukkan di browser, pesan yang sesuai dengan hook before_render ditampilkan di konsol.

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