Django против других веб-фреймворков Python?


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

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

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

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


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

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

13 60

13 ответов:

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

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

CrudRestController/RestController - TurboGears обеспечивает структурированный способ обработки услуг в контроллере. Предоставление вам возможности использовать стандартизированные http-команды просто путем расширения нашего RestController. Объединять Sprox С CrudRestController, и вы можете положить твар в любом месте вашего приложения с полностью настраиваемый автоматически создаваемых форм. TurboGears теперь поддерживает mime-types как расширения файлов в url, поэтому у вас может быть свой контроллер render .json and .xml с тем же интерфейсом, который он использует для рендеринга html (возврат словаря из контроллера)

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

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

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

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

казалось бы, вы немного смущены тем, что такое WSGI и что такое Django. Говоря, что Django и WSGI конкурируют, это немного похоже на то, что C и SQL конкурируют: вы сравниваете яблоки и апельсины.

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Джанго.

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

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

с CherryPy, у вас есть выбор много всего. (Структура шаблона, ORM, если требуется, back-end и т. д.)

узнайте WSGI

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

def application(environ, start_response) pass

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

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

приложение def (environ, start_response): start_response ("200 OK", []) возвращаться "..."

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

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

какую основу вы используете (CherryPy, в Django, TurboGears и т. д.) В основном личные предпочтения.. Поиграйте в каждом, посмотрите, что вам нравится большинство, а затем использовать его.. Существует вопрос StackOverflow (с отличным ответом) об этом, "рекомендация для прямых рамок python"

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Web2py-это секретный соус здесь. Не пропустите проверить его.