На самом деле мене сложно понять приемущества Flask по сравнению с Django для большого приложения. Но почему-то во многих статьях и докладах выливают много негатива в сторону django. Вот одного из немногих докладов где flask не расхваливают до небес:
https://www.youtube.com/watch?v=7SmWn05m1Tk
Мое мнение с перечислением плюсов Django. Скорее всего эти минусы связанны с тем что я не до конца вкурил Flask или пытаюсь сделать из него Django.
1) В Django нет такой любви к глобальным переменным как в Flask.
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
do_the_login()
else:
show_the_login_form()
Вот пример из документации. Как по мне обращение к
request
выглядет жутко. И соответственно рождается вопрос а что делать если мне потребуется использовать
request
за приделами
login
скажем в методе
do_the_login
.
Должен ли я передавать
request
в параметор метода или так-же продолжать использовать глобальную переменную
request
. Первый вариант мне кажется правильным, так-как в противном случае зависимости метода получаются неявными. Но если придерживаться первого варианта то непонятно зачем глобальные переменные были добавленны изначально.
В django такого нет и все параметры передаются явно.
2) Структура проекта.
Создается такое впечатление что количество разных способов организовать код на Flask равно количеству приложений написанных на Flask.
Это очень неприятно так-как:
- При разработке свой структуры легко сделать неверное решение что может привести к глобальному рефакторингу в дальнейшем.
- Нового человека в команде придется вводить в курс дела.
В Django структура проекта в большинстве случаев идентична, и не должно возникнуть никаких проблем при переходе с одного проекта на другой.
3) Хорошая модульная система.
В Django модули могут нести с собой много вкусностей, скажем статические файлы админку консольные команды и все эти модули не мешают друг другу. Модули Django самодостаточны и как правило не зависят друг от друга, что является большим плюсом.
Модули Flask включают намного меньше возможностей и часто завязаны друг от друга. Это может вызвать конфликт версий и привести к больщому рефакторингу когда вы захотите добавить новый модуль.
4) Админка
Вместе с django вы получите отличную админку, которую не стыдно показать клиенту. Flask Admin Не обладает таким количеством функций как админка Django + Админка django может быть очень круто расширенна огромным количеством плагинов. Например вы можете добавить плагин который быдет отслеживать все изменения в админке с удобным отображением этих изменений и возможностью откатиться на более раннию версию если что-то пошло не так.
5) Отличная документация
Это касается не только документации Django но и большинства популярных модулей. Если сам Flask и может заявить что обладает хорошей документацией, но вот модули, которыми вы скорее всего будете пользоваться, увы похвастаться этим не могут. Таким образом очень часто приходится выяснять какие-то моменты работы можуля в исходном коде, issue, Stack Overflow
Часто Django ругаю за жесткую привязку к ORM или к шаблонизатору. Частично это правда:
Вы можете отказаться от стандартной ORM но вы должны понимать что это решение лишит вас огромного количества плюшек. Мое личное мнение: в Flask абсолютно тоже самое, если вы не хотите/не можете использовать SQL Alchemy.
По поводу шаблонизатора в Django вы можете использовать то что вам нравится, вот пример реального проекта в котором используется Mako -
https://github.com/edx/edx-platform
Часто Django ругают за то что там не нужно думать. Я считаю это скорее плюс чем минус. Я не вижу ничего плохого в том чтобы не тратить время на детали реализации а заниматься бизнес логикой (которая и без того сложная). Да иногда это может сыграть с вами злую шутку когда вы захотите сделать что-то нестандартное.
Прошу прощения за то что в этом ответе многое возможно не к месту, просто статьи и доклады на тему Flask vs Django создают впечатление что Flask это та самая серебренная пуля которую мы все так долго ждали.