mako и WTForms библиотеки, что не заточены специально под Flask.
flask_mako, flask_wtforms -- не реализуют ту же функциональность, а должны упрощать работу с mako и WTForms внутри Flask приложения, а так же упрощать взаимодействие mako и WTForms с другими библиотеками в рамках Flask-приложения.
То есть, смысл расширений:
- нам не писать одно и то же в каждом проекте,
- разработчикам 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
-- расширение решает две задачи:
- интеграция с самим фреймворком Flask;
- интеграция с расширением 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 и его популярных расширениях -- всё очень даже неплохо, можно легко найти ответы на большинство вопросов.