Джанго против других веб-фреймворков Python?

Я в значительной степени перепробовал все существующие веб-фреймворки Python, и мне потребовалось много времени, чтобы понять, что фреймворка с серебряными пулями не существует, у каждого есть свои преимущества и недостатки. Я начал с Snakelets и от всего сердца наслаждался возможностью контролировать практически все на более низком уровне без особой суеты, но затем я обнаружил TurboGears и с тех пор использую его (1.x). Такие инструменты, как Catwalk и веб-консоль, бесценны для меня.

Но с выходом TurboGears 2, который обеспечивает поддержку WSGI, и после ознакомления с религиозными дебатами между лагерями Django и WSGI, я действительно разрываюсь между "делать это правильно", например, изучать WSGI, тратить драгоценное время на написание функциональности это уже существует в Django и других фреймворках с полным стеком, в отличие от использования Django или некоторого фреймворка высокого уровня, который делает все для меня. Недостатки последнего, которые я вижу, довольно очевидны:

  1. Я ничего не изучаю в процессе
  2. Если мне когда-нибудь понадобится что-то сделать на более низком уровне, это будет боль
  3. Накладные расходы, необходимые для простого сайта, который использует аутентификацию, безумны. (ИМО)

Итак, я предполагаю, что мой вопрос заключается в том, какой вариант лучше, или это просто вопрос мнения, и должен ли я смириться с этим и использовать Django, если он добивается того, чего я хочу, с минимальными усилиями (я хочу аутентификацию и интерфейс CRUD для моя база)? Я попробовал Werkzeug, Glashammer и друзей, но AuthKit и Repoze меня напугали, а также количество шагов, необходимых для простой настройки базовой аутентификации. Я посмотрел на Pylons, но документации, похоже, не хватает, и при ссылках на простые функции, такие как аутентификация или интерфейс CRUD, различные вики-страницы и документация, казалось, противоречили друг другу, с разными взломами версий и тому подобным.


Спасибо С. Лотту за то, что он указал, что я не был достаточно ясен. У меня вопрос: что из следующего стоит в долгосрочной перспективе, но не больно в краткосрочной перспективе (например, какое-то среднее звено, кто-нибудь?) - изучать WSGI или придерживаться концепции "с батарейками"? Если последнее, я был бы признателен за предложение о том, должен ли я дать Django еще одну попытку, придерживаться TurboGears 1.x или рискнуть в какой-то другой среде.

Кроме того, я попробовал CherryPy, но, похоже, не смог найти достаточно хорошее приложение CRUD, которое я мог бы использовать и сразу же использовать.

13 ответов

Решение

Я предлагаю еще раз взглянуть на TG2. Я думаю, что люди не заметили некоторые успехи, которые были сделаны со времени последней версии. Помимо растущего стека утилит WSGI, есть немало специфических для TG2 элементов, которые следует учитывать. Вот несколько основных моментов:

Система администрирования TurboGears - этот CRUD-интерфейс к вашей базе данных полностью настраивается с помощью декларативного класса конфигурации. Он также интегрирован с Dojo для создания бесконечно прокручиваемых таблиц. Проверка на стороне сервера также автоматизирована. Интерфейс администратора использует RESTful URL-адреса и HTTP-глаголы, что означает, что было бы легко подключиться к программно с использованием отраслевых стандартов.

CrudRestController / RestController - TurboGears предоставляет структурированный способ обработки сервисов в вашем контроллере. Предоставляя вам возможность использовать стандартизированные HTTP-глаголы, просто расширяя наш RestController. Комбинируйте Sprox с CrudRestController, и вы можете использовать crud в любом месте вашего приложения с полностью настраиваемыми автоматически генерируемыми формами. TurboGears теперь поддерживает MIME-типы в качестве расширений файлов в URL, поэтому вы можете настроить контроллер для визуализации.json и.xml с тем же интерфейсом, который используется для визуализации html (возвращая словарь из контроллера)

Если вы щелкнете по ссылкам, вы увидите, что у нас есть новый набор документации, созданный с использованием sphinx, который является более обширным, чем документы прошлого.

С лучшим веб-сервером, ORM и системой шаблонов (выбирайте свою собственную) под рукой легко понять, почему TG имеет смысл для людей, которые хотят быстро начать работу и по-прежнему имеют масштабируемость по мере роста своего сайта.

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

религиозные дебаты между лагерями Джанго и WSGI

Казалось бы, вы немного запутались в том, что такое WSGI и что такое Django. Сказать, что Django и WSGI конкурируют, - все равно, что сказать, что C и SQL конкурируют: вы сравниваете яблоки и апельсины.

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

В любом случае, мой совет - выяснить это для себя. В большинстве фреймворков есть упражнение типа "сделай вики / блог / опрос за час". Проведите немного времени с каждым и выясните, какой из них вам больше нравится. В конце концов, как вы можете выбирать между различными фреймворками, если не хотите их опробовать?

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

Некоторый личный опыт: я провел годы, включая и выключая, возиться с Twisted/Nevow, TurboGears и несколькими другими веб-фреймворками Python. Я ничего не закончил, потому что код фреймворка постоянно был незавершенным и переписывался подо мной, документация часто отсутствовала или была неправильной, и единственная жизнеспособная поддержка была через IRC (где я часто получал отличный совет, но чувствовал, что навязываю, если я тоже спрашиваю много вопросов).

Для сравнения, за последние пару лет я выбил несколько сайтов с Django. В отличие от моего предыдущего опыта, они на самом деле развернуты и работают. Процесс разработки Django может быть медленным и осторожным, но это приводит к гораздо меньшему количеству ошибок и устареванию, а также документации, которая действительно полезна.

Поддержка HTTP-аутентификации для Django наконец-то появилась несколько недель назад, если вы на это ссылаетесь в #3.

Похоже, ваш вопрос "стоит ли изучать WSGI и делать все самостоятельно" или использовать "интегрированную среду стека, которая сделает все за вас".

Я бы сказал, что это ложная дихотомия, и есть очевидный третий путь. TurboGears 2 пытается обеспечить плавный путь от фреймворка стиля "сделай все для себя" до понимания промежуточного программного обеспечения WSGI и возможность настраивать практически каждый аспект фреймворка в соответствии с потребностями вашего приложения.

Возможно, мы не добьемся успеха в каждом месте на каждом уровне, но особенно если у вас уже есть опыт работы с TurboGears 1, я думаю, что кривая обучения TG2 поначалу будет очень, очень простой, и вы сможете углубиться точно тогда, когда вам это нужно.

Для решения ваших конкретных вопросов:

  • Мы предоставляем систему авторизации из коробки, которая соответствует той, к которой вы привыкли в TG1.
  • Мы предоставляем готовый интерфейс "django admin", который называется tgext.admin, который прекрасно работает с dojo, чтобы сделать модную электронную таблицу, подобную интерфейсу, по умолчанию.

Я также хотел бы обратиться к нескольким другим вариантам, которые есть, и немного рассказать о преимуществах.

  • CherryPy. Я думаю, что CherryPy - отличный веб-сервер и приятный минималистичный веб-фреймворк. Он не основан на WSGI внутри, но имеет хорошую поддержку WSGI, хотя и не предоставит вам возможности "полного стека". Но для пользовательских настроек, которые должны быть быстрыми и не особенно подходящими для настроек по умолчанию, предоставляемых Django или TurboGears, это отличное решение.

  • Джанго. Я думаю, что Django - очень хорошая, тщательно интегрированная система для разработки веб-сайтов. Если ваше приложение и стиль работы хорошо вписываются в его стандартные настройки, это может быть фантастическим. Однако, если вам необходимо настроить использование вашей БД, заменить язык шаблонов, использовать другую модель авторизации пользователя или иным образом сделать что-то другое, вы, скорее всего, столкнетесь с фреймворком.

  • Pylons Pylons наподобие CherryPy - это отличный минималистичный веб-фреймворк. В отличие от CherryPy, он поддерживает WSGI во всей системе и обеспечивает некоторые нормальные значения по умолчанию, такие как SQLAlchemy и Mako, которые могут помочь вам хорошо масштабироваться. Новые официальные документы гораздо лучшего качества, чем старые вики-документы, на которые вы, похоже, смотрели.

Изучите WSGI

WSGI нелепо прост... Это в основном функция, которая выглядит как...

def application(environ, start_response) pass

Функция вызывается при получении HTTP-запроса. environ содержит различные данные (например, URI запроса и т. д.), start_response является вызываемой функцией, используемой для установки заголовков.

Возвращаемым значением является тело сайта.

Приложение def (environment, start_response): start_response("200 OK", []) return "..."

Вот и все, на самом деле.. Это не фреймворк, а скорее протокол для использования веб-фреймворками...

Для создания сайтов использование WSGI - это не "правильный путь" - использование существующих фреймворков - это... но если вы пишете веб-фреймворк Python, то использование WSGI - абсолютно верный путь.

Какой фреймворк вы используете (CherryPy, Django, TurboGears и т. Д.) - это в основном личное предпочтение... Поиграйте в каждом, посмотрите, что вам больше всего нравится, затем используйте его. Есть вопрос Stackru (с отличным ответом) по этому поводу " Рекомендация для простых Python Frameworks "

Вы смотрели на CherryPy. Это минималистичный, но эффективный и простой. Это достаточно низкий уровень, чтобы не мешать им, но достаточно высокий, чтобы скрыть сложность. Если я хорошо помню, TurboGears был построен на нем.

С CherryPy у вас есть выбор из всего чего угодно. (Фреймворк шаблона, ORM, если требуется, серверная часть и т. Д.)

Я бы сказал, что правильный ответ зависит от того, что вы на самом деле хотите и в чем нуждаетесь, поскольку то, что будет полезно в долгосрочной перспективе, зависит от того, что вам понадобится в долгосрочной перспективе. Если ваша цель состоит в том, чтобы приложения были развернуты как можно скорее, то "более простой" маршрут, т.е. Джанго, безусловно, путь. Ценность хорошо протестированной и хорошо документированной системы, которая именно то, что вы хотите, нельзя недооценивать.

С другой стороны, если у вас есть время, чтобы изучить множество новых вещей, которые могут применяться в других областях, и вы хотите иметь самые широкие возможности для настройки, тогда лучше использовать что-то вроде Turbogears. Turbogears дает вам максимальную гибкость, но вам придется потратить много времени на чтение внешних документов для таких вещей, как Repoze, SQLAlchemy и Genshi, чтобы получить что-нибудь полезное с ним. Документы TG2 в некоторых случаях намеренно менее подробны, чем документы TG1, поскольку считается, что внешние документы лучше, чем они были раньше. Является ли такая вещь препятствием или инвестицией, зависит от ваших собственных требований.

Вы проверили web2py? После недавней оценки многих веб-фреймворков Python я решил принять этот. Также проверьте Google App Engine, если вы еще этого не сделали.

Пилоны кажутся мне отличным инструментом:

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

Я использовал CherryPy и TurboGears и смотрел на многие другие фреймворки, но ни одна из них не была настолько легкой и продуктивной, как Pylons. Проверьте презентацию в Google.

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

Что касается "чего-либо более низкого уровня", если вы имеете в виду sql, вполне возможно внедрить sql в ваши запросы с помощью дополнительного ключевого слова. Стилистически вы всегда стараетесь избегать этого как можно больше.

Что касается "ничего не изучать"... реальный вопрос заключается в том, предпочитаете ли вы в первую очередь учиться чему-то более низкому или более высокому уровню, что вряд ли кто-то здесь может ответить за вас.

Я бы предложил для TurboGears 2. Они проделали фантастическую работу по интеграции лучшего из мира Python.

WSGI: Предполагается, что вы разрабатываете умеренно сложные проекты / бизнес-решения в TG2 или какой-то другой среде, говорит Грок. Хотя эти платформы поддерживают WSGI, означает ли это, что тот, кто использует эти платформы, должен изучать WSGI? В большинстве случаев ответом будет "Нет". Я имею в виду, что хорошо, если эти знания, несомненно

Знание WSGI, вероятно, более полезно в таких случаях, как

  • Вы хотите использовать какое-то промежуточное программное обеспечение или какой-либо другой компонент, который, например, не является частью стандартного стека. Ауткит с ТГ или Грок без ЗОДБ.
  • Вы делаете некоторую интеграцию.

CherryPy хорош, но подумайте о том, как обрабатывать коммиты / откаты вашей базы данных в конце транзакций, выставлять json, валидации в таких случаях TG, Django, как фреймворки, делают все за вас.

Я фанат TurboGears, и это как раз причина: очень хороший компромисс между контролем и правильными действиями и легкостью.

Вы, конечно, должны принять решение. Может быть, вы предпочитаете учиться меньше, а может и больше. Может быть, в областях, которые мне нравятся знания / контроль (например, база данных), вас это не волнует. И не поймите меня неправильно. Я не характеризую какие-либо рамки как обязательно жесткие или неправильные. Это только мое субъективное мнение.

Также я бы порекомендовал TurboGears 2, если это вообще возможно. Когда он выйдет, я думаю, что он будет намного лучше, чем 1.0 с точки зрения того, что он выбрал для значений по умолчанию (genshi, pylons, SqlAlchemy)

Web2py является секретным соусом здесь. Не пропустите проверить это.

Другие вопросы по тегам