LINUX.ORG.RU

[python]Django или Flask, что выбрать?


0

2

Здраствуй, ЛОР.

В скором времени встанет задача разработки веб-приложения. Поэтому я сейчас озаботился выбором фреймворка. Хотел бы спросить совета у знающих людей, обладающих практическим опытом применения вышеуказанных фреймворков.
По задаче: будет многофункциональный сайт, который в основном направлен на отображение данных (которые будут собираться в БД бэкграунд сервисами) и работу с пользователями (регистрация, ставки, посылки, покупки и т.д.).
Вроде бы, тут без вариантов выходит Django, так как этот инструмент «из коробки» обеспечивает большую часть необходимого функционала своими батарейками из contrib'а. Но есть одна деталь: мне не подойдут реализации groups, permissions (про user я понятное дела вообще молчу) по-умолчанию. Придется либо писать полностью свое, либо как-то наследоваться от того, что есть (пока не знаю насколько это возможно, и что проще).
Django (что нравится, а что нет):

  • Нравится документация.
  • Нравятся приложения (независимые и переносимые из проекта в проект).
  • Нравится система интернационализации Django (проект будет многоязычным).
  • Нравится работа с формами.
  • Нравится поддержка сессий.
  • Нравится, что поддерживается кэширование (сам активно пока не использовал, но документацию почитал).
  • В принципе, устраивает ORM (хотя можно было бы попробовать SQLAlchemy).
  • Хотелось бы использовать Jinja2 в качестве шаблонизатора (знаю, что можно это сделать и в Django).
  • Из предыдущего опыта работы с Django, знаю, что для многих задач есть готовые решения. Но на практике оказалось, что они не всегда полностью отвечают моим нуждам, и проще написать свое, чем настроить то, что есть (в частности хапнул горя с Pinax).

Если разобраться, мне от Django останется работа с формами, i18n, ORM, urls.py, кэширование. Не так уж и мало, но я боюсь, что при развитии проекта попаду в ситуацию, когда мне не будет хватать того, что есть в фреймворке, а переделать что-то внутри Django будет сложно.

С Flask'ом еще не работал, почитал отзывы людей, посмотрел документацию, пошагал по туториалу. В принципе, штука интересная. Правда сами создатели говорят в документации, что это микрофреймворк и он не пригоден для решения больших задач. Первое, что хотелось бы услышать в ответах: насколько он пригоден для более-менее больших проектов. Видел, что Flask работает с Jinja2 и SQLAlchemy без проблем. Остаются вопросы: что делать с формами (хочется более декларативное описание), i18n, кэшированием?

Мой опыт: C, Java, Python (пара не очень сложных приложений на Django, но уже хорошо ориентируюсь в фреймворке, знаю где что можно почитать в документации)

Проект начну разрабатывать я один, потом подтянутся люди, которые не очень разбираются в Python'е.

Спасибо всем, кто это дочитал до конца.

P.S. внимательно изучил большинство тем на ЛОРе, которые касались вопросов по фрэймворкам Python'а.

P.P.S. Ruby, пожалуйста, не предлагайте.

вместо фласка можно пайлонс например

anonymous ()

Bluebream, если покажется слишком сложно - grok.

anonymous ()

i18n - Babel

Формы - FormAlchemy

Pylons пробовал?

anonymous ()
Ответ на: комментарий от anonymous

А Pylons сейчас в какую сторону движется? Они, вроде, на Pyramid переходят. Насколько она юзабельна?

new_user ()
Ответ на: комментарий от new_user

> А Pylons сейчас в какую сторону движется?

Он стоит.

Насколько она юзабельна?

На много сложнее Pylons. Документация хорошая, но не для дураков. Сам фреймворк НЕ позиционирует себя как высокоуровневый. На тестах быстрее джанги.

anonymous ()
Ответ на: комментарий от aydar

Спасибо за ссылку, темы читал. Меня в общем-то Flask интересовал.

new_user ()
Ответ на: комментарий от anonymous

Понял, надо будет попробовать что-нибудь сделать простенькое, чтобы составить мнение.

new_user ()
Ответ на: комментарий от new_user

послушай, ты всегда сможешь все это совместить, лол
фласк все же микрофреймворк, и не спроста там так написано
я бы взял джангу и не парился
юзера лучше не переписывать (прощай контриб) а докрутить нужное
для групп и прав доступа есть как куча готовых замен так и в логике приложения ничего не мешает свою реализацию использовать
короче я за джангу, да

trashymichael ★★★ ()

Посмотри в поиске посты пользователя tia. Он здесь самый большой спец по питоновским веб-фреймворках. Мне лично очень сильно помогло сделать выбор.

anonymous ()

>Вроде бы, тут без вариантов выходит Django, так как этот инструмент «из коробки» обеспечивает большую часть необходимого функционала своими батарейками из contrib'а.

В реальной жизни там мало полезного, если честно.

Но есть одна деталь: мне не подойдут реализации groups, permissions (про user я понятное дела вообще молчу) по-умолчанию. Придется либо писать полностью свое, либо как-то наследоваться от того, что есть (пока не знаю насколько это возможно, и что проще).

В 1.2 появилась возможность накатывать костыли в виде row-level permissions, на djangoadvent.com была обзорная статья. Вполне ничего.

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

Нравятся приложения (независимые и переносимые из проекта в проект).

reusable apps это миф (с) кто-то

Они переносимые из проекта в проект только в случае идеального проектирования и очень узкой специализации приложения. Достаточно захотеть что-то комплексное и сложное - получается yet another django cms, в котором гвоздями прибито всё. Увы, но это так. Переносимые приложения тянут максимум на мелкие формочки и утилиты.

Хотя полностью переносимых приложений нет нигде, не только в джанге.

Хотелось бы использовать Jinja2 в качестве шаблонизатора (знаю, что можно это сделать и в Django).

Jinja чуть-чуть шустрее, но ты теряешь модные джанговские тэги. Лучше родной шаблонизатор, благо он очень похож на jinja.

В принципе, устраивает ORM (хотя можно было бы попробовать SQLAlchemy).

По сравнению с sqlalchemy джанговский ORM очень прост. И это его преимущество, т.к. сложные извращённые запросы с кучей джойнов нужны редко.

С Flask'ом еще не работал, почитал отзывы людей, посмотрел документацию, пошагал по туториалу.

Всё, что ты написал про джанго, возможно и на flask. И кэширование, и формы, и сессии (как раз в flask-е они очень ничего, плюс есть объект g и прочее). i18n тоже есть, но не для js (впрочем, в джанге она костыльная).

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

Не говорят они так. На flask можно писать и мелочь, скидывая всё в один файл, и крупные проекты, разделяя всё на отдельные views (и даже больше).

Просто flask изначально более «пустой», там практически ничего не прибито гвоздями, как в джанге, так что он даже больше подходит для реально больших проектов, где треть джанги придётся выкинуть и переписать. Но я уверен, что у тебя не такой проект.

Вообще бери джангу, она проще для начинающего, при этом вполне потянет крупный проект.

P.S. я не tia, и горжусь этим!

anonymous ()

фласк пригоден для больших проектов и там в документации пишут как его можно масштабировать. Важно понимать, что кроме роутера урлов он практически ничего больше не делает для приложения.

Нормальных отдельных форм для питона нет, придётся давиться чем-то типа wtforms или писать своё.

кеширование - через jinja2, там же в документации к фалску где-то эта проблема разбирается и в документации к jinja2 тоже.

mashina ★★★★★ ()

Спасибо всем за ответы. Буду работать с Django.

new_user ()
Ответ на: комментарий от anonymous

ну как бе про пирамиду не писал, значит и не он

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

trashymichael ★★★ ()
Ответ на: комментарий от trashymichael

Плюсую. Джанга подходит и для маленьких и для больших проектов более чем. В любой момент любые части можно расширить или дополнить.
А для прототипа - вообще супер.

jj1111 ()
Ответ на: комментарий от anonymous

> реально больших проектов, где треть джанги придётся выкинуть и переписать

Хм, а можно примеры того, что из джанги приходится выбрасывать? Много уже читал про эти гвозди, но примеров из жизни так и не увидел.

pevzi ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.