Ответы пользователя по тегу WSGI
  • Зачем Flask использует систему расширений?

    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 комментарий