Ответы пользователя по тегу Flask
  • Как правильно разделить приложение flask на модули?

    ri_gilfanov
    @ri_gilfanov
    Web- and desktop-developer
    Вынеси из app.py в отдельный файл (например, base/orm.py) следующее:
    engine = create_engine(config.SQLALCHEMY_DATABASE_URI)
    Base = declarative_base()
    Session = sessionmaker(bind=engine)
    session = Session()

    А затем импортируй эти объекты там, где они используются.
    Ответ написан
    Комментировать
  • Ошибка Class builtinsdict is not mapped, в чем проблема?

    ri_gilfanov
    @ri_gilfanov
    Web- and desktop-developer
    • На Тостере, исходный код рекомендуется добавлять в вопрос текстом;
    • У Вас там только модель Films с полями id и Name;
    • Чтобы сохранять что-то через SQLAlchemy (а равно, и через Django ORM, и через Peewee, и через PonyORM), Вы должны описать модель данных (обычно соответствует таблице в базе данных);
    • Модели вроде Cources у Вас в коде нет.

    Так что да, можно сказать, что проблема в "конфигурации таблицы", так как ничего похожего на курс валют вообще не описано. SQLAlchemy не понимает, что за кортежи, куда и как надо сохранять.
    • Опишите нужную модель или модели данных, в которых будут нужные Вам поля соответствующих типов (которые поддерживает СУБД);
    • Сделайте миграцию с помощью Alembic (если сложно, руками подправьте БД или просто пересоздайте БД);
    • После этого, пробуйте делать с данными то, что Вам нужно, вызывая методы сессии с указанием модели или объекта модели в качестве аргумента.

    В общем, Вам в документацию SQLAlchemy.
    Ответ написан
    Комментировать
  • Как организовать мониторинг web приложения?

    ri_gilfanov
    @ri_gilfanov
    Web- and desktop-developer
    Берёте систему мониторинга Zabbix (или аналоги) и используете её функционал. Если чего-то не хватает, системы мониторинга обычно расширяемы.

    Ну или пишите свой велосипед.

    Собственно, что нужно настроить или реализовать:
    • Периодический ping сервера с приложением;
    • Периодические HTTP запросы в приложение с ожиданием HTTP кода 200;
    • Для проверки websocket использовать websocket клиент;
    • Логирование процессов приложения;
    • Мониторинг логов приложений на предмет ошибок;
    • Уведомления (EMail, Telegam, SMS), если что-то пошло не так.

    Если написаны простейшие тесты и настроено логирование, то мониторинг на половину готов.
    Ответ написан
    Комментировать
  • Способы построения API на Flask?

    ri_gilfanov
    @ri_gilfanov
    Web- and desktop-developer
    Читайте документацию к Flask-Restfull, там по английски написано, что они планируют удалить весь функционал, отвечающий за парсинг REST-запросов и планируют заменить соответствующий раздел документации на описание интеграции с другими библиотеками (например, с marshmallow).

    Warning

    The whole request parser part of Flask-RESTful is slated for removal and will be replaced by documentation on how to integrate with other packages that do the input/output stuff better (such as marshmallow). This means that it will be maintained until 2.0 but consider it deprecated. Don’t worry, if you have code using that now and wish to continue doing so, it’s not going to go away any time too soon.


    Я использовал связку Flask + Flask-Restfull + Webargs. Webargs -- это библиотека на основе marshmallow, упрощающая интеграцию marshmallow с различными Python веб-фреймворками, в том числе интеграцию с Flask.
    Ответ написан
    Комментировать
  • CSS препроцессоры и сборщики для Flask Python?

    ri_gilfanov
    @ri_gilfanov
    Web- and desktop-developer
    Flask-Assets (обёртка над Webassets), документация ниже:
    flask-assets.readthedocs.io/en/latest

    Документация Webassets:
    https://webassets.readthedocs.io/en/latest/

    Поддержка Sass и SCSS имеется, причём можно использовать разные реализации Sass/SCSS:
    • libsass -- самая производительная реализация на C/C++ (ставится через pip/pip3),
    • sass -- обычная реализация на Ruby (ставится через gem),
    • pyscss -- реализация на Python (ставится через pip/pip3).


    Поддержки Stylus вроде нет. Зато есть поддержка Less, PostCSS и всяких минимизаторы CSS/JS.

    Естественно, сборка CSS/JS файлов в библиотеках Flask-Assets/Webassets предусмотрена.
    Ответ написан
    Комментировать
  • Зачем 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 комментарий