Чтобы добавлять сообщения и комментарии, .

@provaton:
provaton

Вчера ко мне набижало несколько фласковских фанбоев, начавших мне доказывать, что джанго — говно. К сожалению, аргументов они особо не предоставили, кроме рекламных лозунгов взятых с выдачи гугла "flask vs django", но мне все равно хочется ответить на них.

Оговорюсь, что лично мне нравятся оба фреймворка и на обеих можно успешно решать задачи в продакшене. Так что просто разберем несправедливые стереотипы.

1. Джанго древний. Аргумент — супер, особенно от человека который наверняка сидит на Вендовс НТ или Линуксе, которым по 25 лет. Почему они не перейдут на какой-то там Redox — загадка.

Что-то я отвлекся. Последний мажорный релиз джанги — 1-го декабря 2015, последний минорный релиз фласка — 14-го июня 2013-го. Любознательным читателям посоветую сравнить чейнджлоги, особенно обратив внимание на секцию Backwards-incompatible changes в джанговском. Чуваки не стесняясь выпиливают говенный легаси заменяя его современными годными компонентами.

2. Джанго тормозной. Такие аргмуенты основанны на популярных бенчмарках по измерению производительности хелловорлдов. Но хелловорлды в продакшен не идут, туда идет чуть более сложная логика, которая будет тормозить в любом случае больше чем рендер шаблонов, который легко закешировать. А возможности оптимизации приложений в джанго и фласке в целом одинаковы.

3. Джанго жирный и маломодифицируемый, а во фласке сам собираешь стек. Этот аргумент работал бы в случае если компоненты джанговского стека были бы дерьмом, которое нужно обязательно заменить. Но если они успешно решают задачу, то в чем смысл замены? Потратить кучу времени на гуглежку фласковских батареек и интеграцию их в свой проект? А замечательные ситуации типа "обновил фласк-секьюрити — сломался фласк-админ"?

Да, есть определенный процент веб-приложений с нестандартным стеком, для них джанго вряд ли подойдет. Но если стек стандартный — в чем смысл тратить время на его сборку в каждом новом проекте еще и с риском что компоненты не сойдутся версиями? То, что стандартный веб-стек в джанго проходит по всему релиз-циклу в сборе — это скорее достоинство, чем недостаток.

Если смотреть более детально по претензиям к компонентам, то главное что джанговцы сделали архитектуру для смены движка темплейтов и допилили ОРМ до годноты. Все остальное меняется достаточно легко и без специальной поддержки во фреймворке. Динамизм питона и отсутствие магии сами по себе обеспечивают такую возможность.

@provaton:
provaton

Посравнивал объективно фласк и джангу, и понял, что в джанге (на момент версии 1.9) мне реально мешают только 2 вещи:

1. urlconf
2. необходимость передавать реквест во все вьюхи параметром

У фласка annoy-list поболее будет, думаю. А джанговским девелоперам респект.

@Stepper:
Stepper

Про движок для легкого сайта
flask + sqlalchemy
levgem.livejournal.com

@Graf:
Graf

Началось все с того, что некая PC-based железка стала зависать, причем, абсолютно непрогнозируемо.
И один директор по чему-то-там (дохрена менеджер, который думает, что он соображает в ИТ) родил гениальную идею.
"Давайте купим Mikrotik с PoE, там скрипты можно делать".
Измученный командировками моск считал, что с помощью скриптов можно управлять PoE (допустим) и, что с помощью PoE можно перегружать комп. Как это делать без ключа на транзисторах (который еще надо посчитать/собрать, а навыков/умений/знаний в конторе не наблюдается), либо реле он не сказал.
На этом этапе, я совершенно резонно заметил, что если уж собрались что-то колхозить, то берите железку для этого уже изначально предназначенную. То есть — Raspberry Pi, благо она в наличии в магазинах города есть. Тем более, ВАМ ЖЕ СРОЧНО.
Окай, купили железку. Вопрос с ключем/реле подвис в воздухе, ибо реле на 3.3 вольта уже в магазинах не было, а ключи (как я писал выше) никто считать не умеет.
Халва Ктулху, оно замечательно эмулировало нажатие на ресет без всяких ключей и даже не перегорало.
Суть такова, у RPi есть GPIO, то есть программно доступные контакты на которые можно подать ток. И есть питоновский модуль, для того чтобы подавать/убирать ток на эти контакты.
Накропал на Flask'е скриптец который кажет страничку с большой красной кнопкой "ПЕРЕЗАГРУЗКА" и по нажатию, собственно, выполняет перезагрузку. (Кстати, за работающий конфик, как фласк скармливать nginx'у через, скажем uwsgi или еще чо-то буду благодарен, а том пока в rc.local запихал старт). Вроде, все довольны.
Теперь, с ужасом жду, когда поступит приказ колхозить еще 3 таких. Ибо RPi в городе кончилась на той, которую я забрал, а следующие приедут по совсем другой цене. От предложения заказать из Китая отмахнулись, а я их предупреждал, что хоть и цена почти в двое меньше, идти оно будет месяц-два.
Ну, не мои проблемы.

@veet:
veet

github.com Микрофреймворк на плюсах по мотивам flask

@masai:
masai

По мотивам последних новостей. Flask NSA backdoor → github.com

@masai:
masai

Flask — отличная штука! Как только мне становится нужна какая-то полезная мелочь и я начинаю её пилить, так оказывается, что во Flask эта мелкая полезняшка уже есть. И ничего лишнего вроде всяких ORM и прочей тяжеловесной ерунды. Для большинства приложений, что я пишу для себя, мне вообще dbm хватает с головой.

@asmer:
asmer

А кто-нибудь знает культурный путь для добавления префильтров в ORM алхимии? Я бы такой, что бы на уровне ORM-моделей пофильтровал все записи, недоступные пользователю.
stackoverflow.com — какое-то неполное и костыльное решение, к сожалению.

@ComradeDOS:
ComradeDOS

blog.miguelgrinberg.com The Flask Mega-Tutorial

@snegovick:
snegovick

Also make sure to disallow .php files if the server executes them, but who has PHP installed on his server, right? :) [flask.pocoo.org]

@norguhtar:
norguhtar

Этот фреймворк мне нравится значительно больше чем django.

@ikalnitsky:
ikalnitsky

Хорошие слайды на тему веб-разработки RESTful API с применением Falsk и MongoDB.
speakerdeck.com

@kb:
kb

Очень-очень хорошие слайды (которые with notes) lucumr.pocoo.org по поводу "Advanced Flask Patterns". Наконец-то Армин навёл порядок в application- и request-контекстах — вечной проблеме любого веб-фреймворка.

@Charigah:
Charigah

Джуик помоги, как правильно запустить фласк приложение, чтобы uwsgi в режиме --vhost --no-site нормально находил callable application???

@Charigah:
Charigah

*python решил попробовать связку из тегов, пока уперся в ошибку, буду держать в курсе дела, кому интересно, присоединяйтесь

@odin:
odin

tryflask.ep.io

@demiazz:
demiazz

Ну вот. Человек взялся за Flask-Mongokit. Времени у меня сейчас и есть и нет. Но. Есть желающие помочь человеку в его нелегком деле? Адрес репозитория: bitbucket.org =))) думаю, он будет рад помощи. ;)

@demiazz:
demiazz

В свое время, когда писал диплом еще на Flask, я наваял очень простенький плагин для Flask для интеграции его с Mongokit. И забыл. Сейчас пришло письмо от англоязычного разработчика, который даже поинтересовался буду ли я развивать проект дальше, или он может использовать это имя для написания нового хорошего плагина. Ну а так как, я вряд ли смогу сейчас этим заняться, и думаю у человека энтузиазма больше, как и опыта — то с радостью за Flask и MongoKit дал ему зеленый свет и пожелал удачи. И я буду чертовски рад, если для Flask скоро появится хорошее и классное расширение. =)

@helgi:
helgi

Очарование от фреймворка Bottle у меня начинает проходить. Претензии всего две, но этого хватает.

1. Документация сосёт, вот конкретные примеры. Документация на декоратор Bottle.error() не говорит, какие параметры должен принимать декорируемый контроллер. Документация на декоратор Bottle.hook() не сообщает, какие хуки доступны. Если сравнивать с фласком, то у боттла, считай, вообще нет документации.

2. Идеологическая чистота явно одержала победу над здравым смыслом. Я понимаю, что по-питоновски explicit is better than implicit, но так можно до велеречивой явы добраться, честное слово! Одна из задач веб-фреймворка — предоставить удобный сахар для функциональности, которая так или иначе понадобится. А вот как это делается в Bottle: контекст-процессоров для шаблонов нет, предполагается явно таскать за собой переменные, из контроллеров в шаблоны, из шаблонов — в родительские шаблоны. При этом способ на самом деле есть, но он недокументированный (привет, пункт 1), и почитать про него можно в рассылке. Thread-local объект для хранения состояния в пределах запроса вроде бы есть, но опять же, где он в документации?

Короче, не вижу преимуществ перед фласком, кроме, конечно, простоты развёртывания. Увы, но что бы не говорил Ронахер, подложить один файл куда проще, чем поднимать virtualenv и ставить в него полдюжины пакетов.

@archimag:
archimag

Закончил чтение документации на Flask и должен сказать, что впечатлён насколько понимание авторов совпадает с моим :) Если говорить об аналогах RESTAS в других языках, то это безусловно Flask. Кое-что в RESTAS сделано лучше, до чего-то я ещё не добрался, но принципиальная схожесть решаемых проблем завораживает :) При том, что хотя уже слышал о Flask, но подробно познакомился только сегодня. Кстати, выяснил что моя cl-wsal является фактически прямым аналогом Werkzeug. Наверное я всё же кое-что правильно понимаю, раз ход моих мыслей так сильно схож с мыслями людей из Pocoo Team :)))

@demiazz:
demiazz

Flask 0.7 релизнулся. Играйтесь, господа: flask.pocoo.org

@demiazz:
demiazz

Кажется, сегодня-завтра будет релиз Flask 0.7 =)))

@helgi:
helgi

Не знаю, чем это вызвано, но в Bottle время от времени залипает релоадер, и приходится руками перезапускать дев-сервер. Допускаю, что проблема только у меня, но очень раздражает.

В целом пока Flask мне кажется более продуманным и годным. В первую очередь, конечно, я говорю о качестве документации фласка. Мне потребовалось трижды прочесть доку на SimpleTemplate, чтобы понять, как отключить эскейпинг HTML в шаблоне (если что, добавить ! перед выражением внутри фигурных скобок — {{ !name }}).

@demiazz:
demiazz

В трекере Flask висит 7 задач по 0.7 версии... Скоро релиз? (: Кстати, Armin просил протестировать кое что: "This script tries to accomplish the impossible: generating diffs for upgrades to Flask 0.7. Anyone up for testing? bit.ly" Если есть желающие — вперед (:

@demiazz:
demiazz

Так. Чего-то у меня в голове мысль всплыла... Pythonожуйк... WSGI приложения запускаются же в виде демона, если мне память не отшибает? Значит, можно во время запуска приложения сделать запуск бота прямо в приложении, и его использовать прямо внутри, во время работы. Или я чего не правильно думаю?

@demiazz:
demiazz

А bottle.py еще жив? ) а то смотрю, его советуют, а не Flask к примеру )

@demiazz:
demiazz

@bobuk кажется решил перевести clck.ru на Flask окончательно. Ждем результатов по устойчивости к нагрузкам ))) И да. Жуйк. Можешь потестить предварительную версию по адресу lorika.ru ))))

@demiazz:
demiazz

порой мне кажется, что я не никогда не дождусь релиза Flask 0.7 ((( но активность таки есть.

@demiazz:
demiazz

О. Кажется MoinMoin теперь на Flask )))

@demiazz:
demiazz

Монгокит выносит мозг. Сделал запрос и получил выборку постов в виде курсора. ОК. Передаю курсор в шаблон. В шаблоне перебираю по итератору курсора элементы. А он мне падла выдает ошибку, что элемент возвращаемый курсором — это курсор Оо че за нахуй >_<

@demiazz:
demiazz

Кстати. Ссылки на презентации, видео и прочее про Flask с конференций. lucumr.pocoo.org

@demiazz:
demiazz

Ну вот. Сделал шаблон. Начал прикручивать, и отвалился напрочь url_for. Выдает пустую строку и писец ((( что за...

@demiazz:
demiazz

Внезапно, открыл для себя, что Flask был вдохновлен Sinatra. Все же надо порой больше интересоваться появлением тех или иных инструментов, которыми пользуюсь.

@demiazz:
demiazz

народ. Вот фласк и его база умеют роутинг с выделением аргументов. К примеру я пользую для вьюхи декоратор. Но также я хочу написать декоратор, который бы узнавал, есть ли в переданном пути заданая переменная, или нет. И отловить ее, до выполнения кода вьюхи к примеру для изменения окружения запроса.

@demiazz:
demiazz

Вот уже третий день бился над проблемой. Пытался делать из вьюхи запрос к коллекции и получал исключения. А на деле, исключение было в месте, где я полученный документ пытался сохранить в сессию, и при редиректе в другой вьюхе вывести его как строку. Делал собственно это я для себя, как говорится ради пробы пера, но долго недоумевал в чем проблема. Какой же я идиот :(

@demiazz:
demiazz

Решил написать плагин для Flask, для интеграции mongokit. Пока все слабо, но есть задумка сделать опциональный менеджер баз, как у Django, то есть возможность юзания нескольких серверов. При этом использовать ленивое создание подключений, то есть по запросу. =) Надеюсь получится =)))

@demiazz:
demiazz

Читаю тут концепции дизайна Flask. Интересные и мне кажется очень правильные концепции. Интересно было узнать, что в Ruby их Rack хоть и похож очень на WSGI, но доступен в виде единой библиотеки обеспечивающей множество возможностей. И оказывается WebOb и Werkzeug проектировались с оглядкой именно на Rack, который предоставляется разработчикам в виде мощной библиотеки реализующей большинство нужных вещей относительно протокола.

@demiazz:
demiazz

Жуйк. А кто нить еще Flask с Mongo юзал? Что еще кроме MongoKit такое гибкое можно заюзать? или как правильно его с flask юзать?

@demiazz:
demiazz

Все пытаюсь связать Flask с MongoKit. Меня бесит, что приходится модели регистрировать явно. Не. Можно конечно использовать декоратор mongokit для классов документов. Но для этого ему нужно соединение. А соединение хранится в Flask.g, который доступен только в рантайме и не None, только когда все это дело находится во вьюшке. Взрыв мозга. И никак не могу прикрутить декоратор к этим вьюхам. То ли я идиот, то ли чего то не понял про Flask ._. придется глубже копнуть Werkzeug.

@demiazz:
demiazz

Flaskr (пример проекта на Flask из стандартной поставки) заработал под nginx. Теперь осталось правильно сделать виртуальный хост для Django. А потом еще что нить попробовать =))