чем плоха джанга
Это наброски, которые могут превратиться (а могут и нет) в пост в моëм блоге. Написано по мотивам выступления на Exception #10, обсуждений с друзьями и знакомыми, написанием Svarga.
Итак, по пунктам, чем мне не нравится джанга.
Формы. Написаны изнутри очень плохо, часто смешано представление с логикой, код генерации html вызывает неконтролируемые приступы ярости у всех, кому приходится этот код читать. Расширяемость простыми вещами - простая, при углублении всë усложняется порядочно и требует очень много кода для обхода внутренних особенностей. Абсолютно идиотский подход к валидации (пример - почему методы clean_* не получают значение как параметр, почему их вывод изменяет это значение?). Альтернатива - WTForms.
Темплейты. Отсутствие логики в темплейтах до такой степени - не только не добро, но уже и зло. В принципе это можно видеть по тому, что {% if %} наконец-то стал нормальным. Внутри написаны наивно, многоуровневый контекст добавляет радости. Производительность средняя, очень быстро деградирует с ростом вложенности. Альтернатива - Jinja2.
ORM - очень скользкий вопрос (особенно теперь), но изначальная простота использования затмевается сложностью написания неординарных запросов (что бывает очень даже полезно). Вообще DataMapper > ActiveRecord. Лучшая альтернатива - SQLAlchemy. Особенно с небольшими обëртками, упрощающими использование.
Урлы. Кому постоянно нужны регулярные выражения, учитывая что 99% адресов выражаются определениями типа “число”, “строка” и т.п.? Регекспы усложняют прочтение (каждый раз надо взглядом разбирать) и написание (забытый символ не так хорошо виден, как забытый символ в слове “string”). Лучшая альтернатива - Werkzeug. Нужно обратить внимание, что апи чище (проще писать расширения), определения адресов читать проще, производительность выше. Кроме того, при необходимости регекспы тоже можно использовать (при этом практически не деградируя в синтаксисе - “name:re(\d+)”.
Ну и по мелочам глупостей тоже хватает. В то же время мне кажется, что многие идеи в Джанго - очень хороши. Поэтому и существует Сварга, которая как бы “Django done right”. Посмотрим, как оно будет.