Django vs Flask?

Все привет.

Напишите или дайте где почитать про хорошее сравнения этих двух фреймворков. Я знаком с Flask. Нравится аж ушки пищат. Стоит ли смотреть на Django? Какие плюсы? Какие минусы?

Насколько я понял в Django проще с локализацией. Или я не прав? Что еще?

Конечно только версии для Python 3.*

Спасибо!
  • Вопрос задан
  • 12241 просмотр
Пригласить эксперта
Ответы на вопрос 2
nextel
@nextel
ненавижу javascript
НУ и в 1000 раз:
джанга - туча батареек, жесткая структура приложульки, думать не особо не надо
проблемы - все что джанга не подразумевает, типа шаблонизатор пошустрей, орм другую и бла бла бла, прикручивать замучаешься, плюс разварачивать ее на боевых серверах задача тож не сложная но гемморойная.
фласк - я люблю фласк))))) что захотел то и прикрутил, плагины писать легче легкого, потому можешь своих костылей навоять сколько душе угодно,шустро развернуть на сервере? не проблема, посадить на Торнадо легче легкого , ну собственно все это же является и его недостатком. Ну и собственно совет по сравнению Вот)
Ответ написан
Комментировать
erm0l0v
@erm0l0v
Senior Python Developer
На самом деле мене сложно понять приемущества 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 это та самая серебренная пуля которую мы все так долго ждали.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы