РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
180 of 252 menu

Класс Plugin

Класс Plugin представляет собой базовый класс для всех плагинов Bottle. Плагины позволяют расширять функциональность приложения: добавлять новые типы маршрутов, изменять поведение обработчиков, внедрять зависимости и многое другое. Каждый плагин должен наследоваться от этого класса и реализовывать методы setup, apply и close.

Метод setup вызывается при установке плагина в приложение и получает объект приложения. Метод apply применяется к каждому обработчику маршрута и позволяет обернуть его. Метод close вызывается при удалении плагина из приложения и служит для освобождения ресурсов.

Синтаксис

from bottle import Plugin class MyPlugin(Plugin): name = 'my-plugin' api = 2 def setup(self, app): pass def apply(self, callback, route): return callback def close(self): pass

Пример

Давайте создадим простой плагин, который логирует вызов каждого обработчика:

from bottle import Bottle, Plugin class LogPlugin(Plugin): name = 'log' api = 2 def setup(self, app): self.app = app def apply(self, callback, route): def wrapper(*args, **kwargs): print('before:', route.rule) res = callback(*args, **kwargs) print('after:', route.rule) return res return wrapper def close(self): pass app = Bottle() app.install(LogPlugin()) @app.route('/') def index(): return 'hello'

Результат выполнения кода для адреса /:

before: / after: / hello

Пример

Давайте создадим плагин, который добавляет префикс к результату каждого обработчика:

from bottle import Bottle, Plugin class PrefixPlugin(Plugin): name = 'prefix' api = 2 def __init__(self, prefix): self.prefix = prefix def setup(self, app): pass def apply(self, callback, route): def wrapper(*args, **kwargs): res = callback(*args, **kwargs) return self.prefix + res return wrapper def close(self): pass app = Bottle() app.install(PrefixPlugin('>> ')) @app.route('/') def index(): return 'hello'

Результат выполнения кода для адреса /:

>> hello

Пример

Давайте создадим плагин, который считает количество вызовов обработчиков:

from bottle import Bottle, Plugin class CounterPlugin(Plugin): name = 'counter' api = 2 def setup(self, app): self.count = 0 def apply(self, callback, route): def wrapper(*args, **kwargs): self.count += 1 return callback(*args, **kwargs) return wrapper def close(self): print('total calls:', self.count) app = Bottle() plugin = CounterPlugin() app.install(plugin) @app.route('/') def index(): return 'hello' app.uninstall(plugin)

Результат выполнения кода:

total calls: 0

Смотрите также

  • метод apply,
    который применяет плагин к обработчику
  • метод setup,
    который вызывается при установке плагина
  • метод close,
    который вызывается при удалении плагина
  • атрибут name,
    который задаёт имя плагина
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить