Стратегии

Определены различные стратегии для инкапсуляции возможностей различных фреймворков в общий API, чтобы повторно использовать как можно больше кода.

Описание

Ответственность стратегии заключается в обеспечении доступа к:

  • Запрос данных и информации о хосте и построение URI

  • Доступ к сессии

  • Настройки проекта

  • Типы ответов (HTML и перенаправления)

  • Рендеринг HTML

Различные фреймворки реализуют эти функции по-разному, поэтому возникает необходимость в таких интерфейсах.

Реализация новой стратегии

Следующие методы должны быть определены для подклассов стратегий.

Запрос:

def request_data(self):
    """Return current request data (POST or GET)"""
    raise NotImplementedError('Implement in subclass')

def request_host(self):
    """Return current host value"""
    raise NotImplementedError('Implement in subclass')

def build_absolute_uri(self, path=None):
    """Build absolute URI with given (optional) path"""
    raise NotImplementedError('Implement in subclass')

Сессия:

def session_get(self, name):
    """Return session value for given key"""
    raise NotImplementedError('Implement in subclass')

def session_set(self, name, value):
    """Set session value for given key"""
    raise NotImplementedError('Implement in subclass')

def session_pop(self, name):
    """Pop session value for given key"""
    raise NotImplementedError('Implement in subclass')

Настройки:

def get_setting(self, name):
    """Return value for given setting name"""
    raise NotImplementedError('Implement in subclass')

Ответы:

def html(self, content):
    """Return HTTP response with given content"""
    raise NotImplementedError('Implement in subclass')

def redirect(self, url):
    """Return a response redirect to the given URL"""
    raise NotImplementedError('Implement in subclass')

def render_html(self, tpl=None, html=None, context=None):
    """Render given template or raw html with given context"""
    raise NotImplementedError('Implement in subclass')
Вернуться на верх