Стратегии¶
Определены различные стратегии для инкапсуляции возможностей различных фреймворков в общий 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')