@gpm7315

Зачем Flask использует систему расширений?

Существуют, например, python библиотеки mako и WTForms. И есть соответствующие flask расширения flask_mako, flask_wtforms. Зачем делать по сути библиотеку, реализующую функционал другой библиотеки? Почему бы не использовать "оригинальные" библиотеки напрямую? Т.е.
import mako
import wtforms
...
Доки фласка читал, но внятного объяснения не нашел.
Помогите, пожалуйста, разобраться.
  • Вопрос задан
  • 268 просмотров
Решения вопроса 1
  • ri_gilfanov
    @ri_gilfanov
    Web- and desktop-developer
    mako и WTForms библиотеки, что не заточены специально под Flask.

    flask_mako, flask_wtforms -- не реализуют ту же функциональность, а должны упрощать работу с mako и WTForms внутри Flask приложения, а так же упрощать взаимодействие mako и WTForms с другими библиотеками в рамках Flask-приложения.

    То есть, смысл расширений:
    1. нам не писать одно и то же в каждом проекте,
    2. разработчикам Flask не набивать фреймворк классами, сигналами, шаблонными тегами для каждой Python библиотеки.


    О первой причине прямо сказано в документации Flask ( flask.pocoo.org/docs/0.12/extensiondev ):
    Flask, being a microframework, often requires some repetitive steps to get a third party library working. Because very often these steps could be abstracted to support multiple projects the Flask Extension Registry was created.


    Например, flask_mako состоит из 1 файла ( https://github.com/benselme/flask-mako/blob/master... ) и судя по описанию --
    Extension implementing Mako Templates support in Flask with support for flask-babel

    -- расширение решает две задачи:
    1. интеграция с самим фреймворком Flask;
    2. интеграция с расширением flask-babel (обёртка вокруг python-библиотеки для интернационализации babel).

    Далее мы видим множественные импорты из Flask, werkzeug и mako.

    Например, из werkzeug импортируются инструменты для отладки, а из mako исключения:
    from werkzeug.debug.tbtools import Traceback, Frame, Line
    ...
    from mako import exceptions
    from mako.exceptions import RichTraceback, text_error_template

    Очевидно, это для того, чтобы в интерактивном отладчике Flask видеть внятные ошибки в html-шаблонах (в духе, "после такой-то строки ожидалось закрытие цикла через тег % endfor"). Подробнее, можно посмотреть ниже по коду в классе TemplateError.

    Внутри flask_mako я насчитал всего 6 одиночных функций и 3 класса -- можно в сжатые сроки разобраться и в назначении остальных.

    С документацией, комментированием исходников и именованием сущностей во Flask и его популярных расширениях -- всё очень даже неплохо, можно легко найти ответы на большинство вопросов.
    Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
Вакансии с Моего Круга Все вакансии
Заказы с Фрилансим Все заказы