TurboGears - Móc
Có ba cách trong TurboGears để cắm các hành vi bên trong các ứng dụng hiện có.
Hook - Đây là một cơ chế có thể xác định một sự kiện và thông báo cho người nghe đã đăng ký khi và khi các sự kiện được phát ra.
Controller Wrapper- Nó nằm giữa TurboGears và Bộ điều khiển, do đó có thể mở rộng bộ điều khiển như một người trang trí. Do đó, nó có thể được gắn vào bất kỳ ứng dụng bộ điều khiển nào của bên thứ ba.
Application Wrapper - Nó tương tự như bất kỳ phần mềm trung gian WSGI nào, nhưng chỉ hoạt động trong ngữ cảnh TurboGears.
Ở đây trong chương này, chúng ta sẽ thảo luận về cách sử dụng hook bên trong một ứng dụng hiện có.
Móc
Hooks là các sự kiện được đăng ký trong tệp cấu hình của ứng dụng app_cfg.py. Bất kỳ bộ điều khiển nào sau đó được kết nối với các sự kiện này bởi người trang trí sự kiện.
Các móc sau được định nghĩa trong TurboGears:
Sr.No. | Móc & Mô tả |
---|---|
1 | Startup() chỉ trên toàn ứng dụng, được gọi khi ứng dụng khởi động. |
2 | shutdown() chỉ trên toàn ứng dụng, được gọi khi ứng dụng thoát. |
3 | configure_new_app ứng dụng mới được tạo bởi trình cấu hình ứng dụng. |
4 | before_config(app) chỉ trên toàn ứng dụng, được gọi ngay sau khi tạo ứng dụng, nhưng trước khi thiết lập các tùy chọn và phần mềm trung gian |
5 | after_config(app) chỉ trên toàn ứng dụng, được gọi sau khi hoàn tất thiết lập mọi thứ. |
6 | before_validate Đã gọi trước khi thực hiện xác thực |
7 | before_call Được gọi sau khi xác thực, trước khi gọi phương thức bộ điều khiển thực tế. |
số 8 | before_render Được gọi trước khi hiển thị mẫu bộ điều khiển, đầu ra là giá trị trả về bộ điều khiển. |
9 | after_render Được gọi sau khi hoàn thành kết xuất mẫu bộ điều khiển. |
Đăng ký một Hook
Để mà register a Hook, tạo các chức năng trong app_cfg.py và sau đó đăng ký chúng bằng mã sau:
tg.hooks.register(hookane, function, controller)
Trong đoạn mã sau, các móc on_startup, on_shutdown và before_render được đăng ký trong 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 được đăng ký với một chức năng điều khiển trong Rootcontroller. Thêm mã sau vào bộ điều khiển \ 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')
Khi ứng dụng được phục vụ, thông báo khởi động sẽ hiển thị trong bảng điều khiển.
hello, startup world
Starting Standard HTTP server on http://127.0.0.1:8080
Khi URL '/' được nhập vào trình duyệt, một thông báo tương ứng với hook before_render sẽ hiển thị trên bảng điều khiển.
system wide before render
Going to render {'page': 'index'}