Flaskгордость и предубеждение
Об авторе
Python
Javascript
Web
Networking
Егор Назаркин
Wargaming.net
Twitter: @nimnull
В тени django
ORM, templating, project layout, etc.
VS
DIY (+API)
Начало
1. Werkzeug
2. Jinja2
3. Выбрать компоненты
4. Понять app_context и request_context
›❯ pip search flask | wc -l 451[ ]
НапримерFlask-And-Redis
Flask-Babel
Flask-Cache
Flask-ElasticSearch
Flask-Login
Flask-Mail
Flask-OAuth
Flask-Principal
Flask-S3
Flask-SQLAlchemy
Flask-Script
Flask-Security
Flask-Social
Flask-WTF
Первые проблемы
зависимости версий
Flask-Social => Flask-Security => Flask-Principal => Flask-Login
Структура проекта
• эволюция от app.py до factory.py (flask-kit)
• Борьба с циклическими импортами
• ext.init_app(…)
• app.register_blueprint(…)
Пара костылей• extensions.py должен быть доступен для импорта
Проблемы с контекстом
нет контекста при импорте?
— from werkzeug.local import LocalProxy
всё надоело?
— from werkzeug.utils import import_string
Лень• class LazyView
• class LazyResource
• class LazyBlueprint
— Двигатель прогресса
Адаптация• CRUDMixin (AR-like стиль для моделей)
• https://github.com/nimnull/flamaster, например
• sqlamp:
Компоновка• Как “правильно” организовать проект?
• Multiple Application — отлично (если есть multi-domain)
• Разделить на blueprint-ы, почему не flask-extensions?
Тестирование• Flask-Testing, Flask-Test — хорошая попытка
Celery
• Концепция контекста приложения
• для запуска нужен контекст приложения Flask (:
Celery
Celery
Имеет смысл переделать
Вопросы?
!
!
!
!
Да, заставляют играть в танки