Разбудил в себе питона: первые ощущения от python и flask-admin

· На чтение уйдёт 3 минуты · (431 слово)

На питоне как-то не довелось полноценно программировать — разве что править поломанные чужие скрипты. Собственно, даже синтаксис как таковой, я представляю слабо. Но всё-таки в рамках здорового любопытства, а также обеспечения мозга полезной нагрузкой, второй день потихоньку ковыряю flask и flask-admin на новом проекте. Выбор пал на Flask, а не на Django в основном потому, что Flask существенно компактнее. Впрочем, уже вижу архитектурные недочёты. А ещё то ли недостаток опыта, то ли недостаток Flask, то ли недостаток flask-admin, фактически привели меня к программированию почти всего в одном файле. В таком виде flask-admin можно использовать лишь для небольших проектов, на 1000-2000 строк. Решил почитать всякую документацию по архитектуре python-приложений, вдруг всё это дело можно улучшить.

Теперь чуть подробнее. Общее впечатление - великолепное. Если сравнивать с тем же Grails, очень понравились шаблоны для скаффолдинга. Впору выкинуть шаблоны из Grails по умолчанию, и написать свой, новый скаффолдинг, как в Flask-Admin. Легко делаются Ajax-дропдауны, по умолчанию Ajax отключен, но всё равно есть локальный поиск везде: от Enum до Many-to-Many зависимостей.

Код на flask и питоне получается компактным, но мог бы быть ещё более компактным, если бы использовалось больше Convention over configuration.

В SQLAlchemy удивил код создания таблиц. Предположим, у нас есть 2 класса - персонаж и шмотка. Шмотка подходит только конкретному персонажу. А на персонаже с рождения надета шмотка. Чтобы разрулить эту "невероятно сложную циклическую зависимость", надо приказать SQLAlchemy сначала создать таблицы, и только после этого создать констрэйнты для foreign ключей. Grails, например, безо всяких подсказок так и делает. Зато с составными ключами всё попроще.

С меню приложения всё весьма неплохо: в Grails код создания меню вынесен в .gsp шаблоны, в flask-admin он где-то внутри питон-кода. Каждую страничку нужно декларировать (это и плюс, и минус одновременно). Общая производительность шаблонизатора лучше у flask-admin, впрочем - это может быть связано с тем, что в шаблонах куда меньше логики. А ещё там нет такой мощной, но тормозной и ненужной штуки, как Sitemesh в Grails.

В текстах блога я больше не ругаюсь, но про картинки я ничего подобного не говорил :-). Вот так выглядит результат: обычный Bootstrap 3, и всё это благолепие делается чудовищно быстро.

Если кому-то надо сделать CRUD-админку на пяток моделей, инструмент весьма удачный. Особенно если её потом планируется разместить на хостинге с не самыми большими запасами памяти :-). Для больших проектов, как мне кажется сейчас, flask и особенно flask-admin непригодны. Я бы скорее взял Django, если бы меня при помощи пыток заставили программировать большой проект на Python, мне он показался лучше организованным. Но повторюсь — возможно, это недостаток моего опыта, и возможно, Flask тоже подойдёт для больших проектов.

P.S. Pyramid вообще не смотрел. Может, следовало бы?

Полезное