Fork me on GitHub
23/1/2007

Что мне не нравится в Django

Django - качественный инструмент, без сомнений. Некоторые возможности Django просто покоряют (приложения из django.contrib), некоторые оставляют странный привкус (например, обработка чуть более сложных форм, некоторые "шероховатости" ORM). Ну а некоторые нюансы Django просто "выкашивают". О них и пойдет речь.

Регулярные выражения в urlconf

Вот что в первую очередь мешает в Django - это urlconf на регулярках. В большинстве случаев используются одни и те же выражения: только цифры (d+), дата в определенном формате (d{4,4}-d{2,2}-d{2,2}) только буквы ([a-zA-Z]+), всё-что-угодно (.+). Ну в своей практике я еще использовал выбор варианта (variant_one|variant_two). Всё. Ради этого городить огород с регулярками... по мне избыточно.

Отсутствие обратного резолвинга URL

Если без жаргона, то как зная объект, сказать какой URL ему соответствует? (т.е. обратная задача роутинга URL-объект). Речь в первую очередь об использовании в шаблонах. Мне, конечно, укажут, что я не прав и обратный резолвинг URL в шаблонах есть. И приведут пример. Да, есть способ, однако в стандартной библиотеке тегов Django нет тега {% url %}. В итоге есть несколько реализаций {% url %}. И тем более, этот тег не удобен. Не удобен тем, что нужно указывать низкоуровневый параметр, непосредственно передающийся в view. Захочу я поменять схему URL - и мне придется в каждом месте, где я делал reverse url lookup, изменять передаваемый параметр. А я хочу чтобы передавался объект и я бы указывал в одном месте, как объект обратно резолвится в URL.

Привязанность к настройкам

Вообще, проблематично использовать хоть какой-нибудь компонент Django (например, те же Django templates) без модуля настроек (либо явного конфигурирования через configure). По мне так это какой-то дикий атавизм.

Концепция "проектов-приложений"

Это как раз пример "дырявых абстракций". Красивая абстракция: есть приложения, а проекты составляются из приложений как из кубиков. Но на деле выходит, что либо ты нагружаешь приложение "не тем" функционалом (теряется атомарность), либо приложения зависят друг от друга (теряется изолированность). Мое мнение таково, что проект - лишнее понятие. Проект должен быть таким же приложением.

Это основные вещи в Django, которыми мне не удобно пользоваться. Остальные либо являются придирками, либо я (пока) готов с ними мириться.

Комментарии

Все статьи