• Django vs Flask?

    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 это та самая серебренная пуля которую мы все так долго ждали.
    Ответ написан
    2 комментария