Вопрос

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

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

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

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


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

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

Это было полезно?

Решение

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

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

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

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

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

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

Другие советы

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

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

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

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

Я бы сказал, что вы слишком пессимистично относитесь к тому, что "ничему не научились", используя Django или аналогичный фреймворк с полным стеком, и недооцениваете ценность документации и большого сообщества.Даже с 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 - отличный веб-сервер и приятный минималистичный веб-фреймворк.Он не основан на WSGI внутренне, но имеет хорошую поддержку WSGI, хотя и не обеспечит вам работу с "полным стеком".Но для пользовательских настроек, которые должны быть быстрыми и не особенно подходят для настроек по умолчанию, предоставляемых Django или TurboGears, это отличное решение.

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

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

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

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

Изучайте WSGI

WSGI до абсурда прост..По сути, это функция, которая выглядит следующим образом..

def application(environ, start_response) pass

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

Возвращаемое значение - это текст веб-сайта.

приложение def(окружающая среда, 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, на основе Paste,
  • позволяет вам сразу же закодировать приложение и при необходимости коснуться низкоуровневых битов,

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top