Как я научился ненавидеть Django Здравствуйте. Попытаюсь формализовать то, что меня постоянно раздражает в Django и заставляет придумывать разнообразные велосипеды и подключать кучу батареек только для того, чтобы сделать работу на данном фреймворке более удобной. Общепринято, что любой web-фреймворк состоит из следующих компонентов: Роутинг Шаблонизатор Формы ORM (если это не микро фреймворк) Работа с протоколом HTTP на уровне запроса и ответа Разнообразные утилиты Заранее оговорюсь, что Dango мне очень нравится, если бы не следующее… 1. Роутинг Представляет из себя стрельбу из пушки по воробьям в виде регулярных выражений. Понятно что с помощью них можно решать ряд нетривиальных задач, но абсолютно нельзя решить то, что дествительно требуется в роутинге. Это такие вещи как автоматическое извлечение данных (например инстанса модели по ее идентификатору), действительно точная валидация данных (а не только знание того, что в параметре будут только цифры). Примеры батареек для улучшения работы с роутингом: django-hosts, routr. 2. Шаблонизатор Шаблонизатор отличается такой килл фичей котрая постоянно раздражает, это написание шаблонных тегов на каждый чих. А также отсутствие обычных выражений, отсутствие обращения к словарю по ключу находящемуся в переменной, отсутствие вызова функции с параметром (без параметра можно), отсутсвие макросов, невозможность определить переменную, только один параметр в фильтре и т.д. Хорошо хоть недавно появилась конструкция elif. Как это можно решить? Заменить шаблонизатор на Jijna 2 (благо с появлением CBV это очень просто). Батарейки: django-jinja, coffin. 3. Формы Они просто нарушают MVC. Для того чтобы определить, например, css класс для поля, нужно передать его в виджет. Не будем же мы заставлять дизайнера править код? Отсутствие FormField делает жизнь еще веселее. Доставляет clean_fieldname который не видит полей, перечисленных позже него. Как это можно решить? Использовать те же WTForms. 4. ORM До сих пор не могу понять, как делается left join и как мне явно указать какой join делать. Ужасное наследование моделей. Из мелочей: отсутствие join по разным базам, невозможность создать модель без первичного ключа. Наконец то появится index_together. Как это можно решить? Использовать ту же peewee. 5. Работа с протоколом HTTP Отсутствие необходимых исключений (в том же WebOb любой HTTP ответ является в том числе и исключением). Неудобное обращений к заголовкам, нвозможность стандартно парсить uri, очень непонятно как получить тело запроса в первоначальном виде и т.д. Как это можно решить? Использовать тот же WebOb. Если все это сделать, что тогда останется от django кроме админки? Как это можно решить? Поставить flask-peewee. Спасибо за внимание.