Выбор веб-фреймворка: Django — реперная точка

Понадобилось выбрать инструмент для пары внутренних проектов. Полагалось, что часть логики будет в виде Twisted-сервиса, другая часть — в виде отдельных модулей, а “венчать” это всё будет веб-интерфейс. Так что мне предстояло решить, на чем я буду писать веб-интерфейс. Выбор был таким:

  • Django
  • Nevow
  • Pylons

Люди “в теме” спросят, почему же здесь нет TurboGears. Дело просто в том, что я выбирал фреймворки не для сравнения, а для работы, так что критерии выбора были просты: с Django работал ранее, Nevow — логичное дополнение к Twisted-сервису, а Pylons просто привлек мое внимание и заинтересовал. Т.е. не то, чтобы TurboGears не дотягивает до этой троицы, просто я от него не в восторге.

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

Сводка

Поскольку с Django я уже имел дело, то он стал некой “реперной точкой”, относительно которой я и мерил остальные фреймворки. Итак, немного объективной информации о Django:

  • Самоопределение: the web framework for perfectionists with deadlines
  • Сайт:
  • Лицензия: BSD
  • Текущая версия: 0.95
  • Используемая мной версия: 0.96pre (svn)
  • Установка: distutils
  • Зависимости: отсутствуют
  • ORM: собственный
  • Шаблоны: собственные
  • Обработка форм: собственная
  • Роутинг: регулярные выражения
  • Пакетирование приложения: не предусмотрено
  • Методы развертывания: mod_python, WSGI

Поясняю пункты: с сайтом и лицензией вопросов не возникает, установка при помощи distutils означает обычную процедуру получения исходных текстов, разархивирование, python setup.py install. ORM и шаблоны у Django собственные. Что касается роутинга — это способ сопоставления URL и соответствующего обработчика. В случае Django это регулярные выражения. Предпоследний пункт — в случае переноса приложения с машины разработчика на рабочий сервер, придется разработчику самостоятельно подумать над пакетированием приложения. С методами развертывания, надеюсь, вопросов нет — это способы “использования” готового приложения.

Тестовое приложение

В качестве “подопытного кролика” служит простое веб приложение:

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

Реализация

Про Django написано много и хорошо (см. например, блог Ивана Сагалаева), так что я особо останавливаться на нюансах реализации не буду (тем более, их практически нет). Затратив где-то около 40 минут, написал искомое Django-приложение. В ходе написания понадобились документы:

  • для главной страницы, страницы с повторяющимся фрагментом, страницы с подстановкой значения — Django templates for HTML-authors
  • для страницы с формой — Forms and manipulators

Особых проблем с Django-версией не возникло, единственная задержка вышла с отключением сессионных и авторизационных middleware. С кодом приложения можете ознакомиться здесь.

Подписаться Комментировать

Комментарии

10.12.2006 17:46 Юревич Юрий

pythy, классная статья. Продолжай в таком же духе.
Неплохо было бы, если ты еще про Zope написал.

11.12.2006 1:38 Юревич Юрий

[…] Начал писать про Nevow в контексте выбора фреймворка, да вышло так, что слишком много нужно пояснять, так что вначале небольшое введение в Nevow. […]

Форма комментирования для «Выбор веб-фреймворка: Django - реперная точка»

Обязательное поле. Не больше 30 символов.

Обязательное поле

Пожалуйста, введите символы, которые вы видите на изображении

15.12.2006 13:20 Юревич Юрий

Классный ресурс! Не бросай его, веди. Реально нужно.

21.12.2006 13:45 Юревич Юрий

А когда будет обзор Pylons?

21.12.2006 15:45 Юревич Юрий

В выходные

24.12.2006 16:30 Юревич Юрий

[…] Напомню тему разговора: выбираем инструмент для веб-интерфейса Twisted-сервиса. Django и Nevow уже рассмотрены, теперь очередь Pylons. […]

9.01.2007 19:56 Юревич Юрий

А что именно не вызывает восторга в turbogears? Недавно как раз вышла версия 1.0.

10.01.2007 23:41 Юревич Юрий

Знаю. Я слежу за новостями, читаю блог Кевина. Просто по причине того, что я не использую TG, мне сложно назвать конкретные недостатки. Какие-то общие ощущения… Из конкретного мало: бэкенд в виде CherryPy (всё же мне хочется, чтобы я мог самостоятельно выбирать бэкенд), роутинг URL-объект как названия методов в классе, kid-шаблоны не особо нравятся (да, знаю, можно использовать и другие шаблонные движки). Навскидку вроде всё. Правда, я его достаточно давно смотрел (где-то в версиях 0.98), а “щупал” только как туториал вики20 и приложение-пример к pytils (это уже на 1.0b1).

23.04.2007 16:44 Юревич Юрий

Как будет выглядеть этот же пример с newforms?
Вдвойне интересно еще и потому, что пока не нашел примера, в котором не использовалась бы база данных.
Спасибо.

23.04.2007 20:06 Юревич Юрий

Сообразил, практически то же:

from django import newforms
class SimpleForm(newforms.Form):
name = newforms.CharField(max_length=32)

def newform(request):
name = ‘’
if request.POST:
n_data = request.POST.copy()
form = SimpleForm(n_data)
if form.is_valid():
name = n_data[’name’]
n_data[’name’] = ‘’
else: form = SimpleForm()

ctx = {’form’: form, ‘title’: ‘ NewForms library in action!’,’name’: name}
return render_to_response(’forms.html’, ctx)