Как использовать python для веб-разработки, не полагаясь на структуру?
Я знаю, что разные фреймворки имеют свои преимущества, но я лично хочу, чтобы моя веб-разработка на python была максимально простой: меньше писать в фреймворк, писать питон на пиктограмму.
Единственное, что я нашел до сих пор, что позволяет мне сделать это самым очевидным способом, - это web.py, но у меня есть небольшие проблемы по его эффективности.
Для тех из вас, кто использует nginx (или другой вкус) + mod_wsgi + web.py... как производительность? Можно ли его улучшить?
Для тех из вас, кто использовал web.py, понравилась идея и продолжала писать что-то лучше или находила что-то лучшее... позаботьтесь о том, чтобы указать мне на источник?
Я бы хотел услышать обо всех заметных, минимальных, но мощных подходах.
Ответы
Ответ 1
Это весело, как даже подсказывал вопрос о том, как писать без рамки, все все еще наваливаются, чтобы продвигать свою любимую структуру. OP опаздывает на то, что не хочет "тяжеловесного каркаса", а ответы упоминают Twisted, из всех вещей?! Приходите, действительно.
Да, вполне возможно написать прямые приложения WSGI и захватить бит требуемой функции из автономных модулей, вместо того, чтобы подгонять ваш код в один конкретный каркасный вид мира.
Чтобы пройти этот маршрут, вы, как правило, захотите ознакомиться с основами HTTP и CGI (поскольку WSGI наследует ужасно много из этой более ранней спецификации). Это не обязательно подход к рекомендациям начинающим, но это вполне выполнимо.
Я хотел бы услышать обо всех заметных, минимальных, но мощных подходах
Вы не услышите о них, потому что никто не имеет племенной интерес к продвижению "сделай сам" в качестве методологии. Me, я использую отдельный автономный пакет шаблонов, отдельный автономный пакет для чтения форм, конкретный уровень доступа к данным и несколько служебных модулей home- brew. Я не пишу ни одной конкретной философии, о которой я могу прозелитизировать, все они просто скучные инструменты, которые могут быть заменены и заменены чем-то другим так же хорошо.
Ответ 2
Способ перехода wsgi.
WSGI является интерфейсом шлюза веб-сервера. Это спецификация для веб-серверов и серверов приложений для взаимодействия с веб-приложениями (хотя она также может использоваться для более чем того). Это стандарт Python, подробно описанный в PEP 333.
Все текущие фреймворки поддерживают wsgi. Это также поддерживает множество веб-серверов (включая apache, mod_wsgi). Это путь, если вы хотите написать свою собственную фреймворк.
Вот мир привет, написанный непосредственно wsgi:
def application(environ, start_response):
status = '200 OK'
response_headers = [('Content-type','text/plain')]
start_response(status, response_headers)
return ['Hello world!\n']
Поместите это в file.py
, укажите на него конфигурацию apache mod_wsgi
, и он будет запущен. Чистый питон. Нет импорта. Просто функция python.
Если вы действительно пишете свою собственную фреймворк, вы можете проверить werkzeug. Это не каркас, а простой набор различных утилит для приложений WSGI и стал одним из самых передовых модулей WSGI. Он включает в себя мощный отладчик, полнофункциональные объекты запроса и ответа, утилиты HTTP для обработки тегов сущностей, заголовки управления кешем, даты HTTP, обработку файлов cookie, загрузку файлов, мощную систему маршрутизации URL-адресов и множество модулей аддонов, созданных сообществом. Вынимает скучную часть из ваших рук.
Ответ 3
Вы также можете проверить cherrypy. В центре внимания cherrypy лежит структура, которая позволяет писать питон. У Cherrypy есть свой довольно хороший веб-сервер, но он совместим с wsgi, поэтому вы можете запускать вишневые приложения в apache через mod_wsgi. Вот привет мир в черри:
import cherrypy
class HelloWorld(object):
def index(self):
return "Hello World!"
index.exposed = True
cherrypy.quickstart(HelloWorld())
Ответ 4
+1 ко всем ответам с WSGI.
Eric Florenzo написал отличный блог в последнее время, вы должны прочитать: Написание пылающих быстрых, бесконечно масштабируемых, Pure-WSGI Utilities. Это даст вам лучшее представление о чистом WSGI за пределами Hello World. Также обратите внимание на комментарии, особенно первый комментарий Кевина Дангура, где он рекомендует по крайней мере добавить WebOb в свой набор инструментов.
Ответ 5
Для чего это стоит, я написал свой сайт в mod_python без каких-либо промежуточных фреймворков, таких как Django. У меня действительно не было причин жаловаться. (Ну, может быть, немного, mod_python немного причудлив в нескольких отношениях, но не в обычных случаях использования) Одно можно сказать наверняка, это определенно позволит вам писать Python; -)
Ответ 6
Почему у вас есть проблемы с производительностью web.py? Как я уже упоминал здесь, мы используем CherryPy (созданный веб-сервер в "web.py) за nginx для обслуживания большей части HTML на Oyster.com - nginx разбивает трафик через 2 или 3 веб-серверов, каждый из которых выполняет 4 процесса Python, и мы можем легко обрабатывать 100 запросов в секунду.
Oyster.com - это веб-сайт с большим объемом, составляющий в среднем 200 000 динамически созданных просмотров страниц/день, и достигает максимального значения, чем это. Однако мы используем сеть доставки контента (CDN) для наших статических ресурсов, таких как изображения и CSS.
Мы определенно заботимся о производительности (большинство наших страниц составляют менее 25 мс), но web.py не является узким местом. Наши узкие места - это рендеринг шаблонов (мы используем Cheetah, который достаточно быстрый, но не очень быстрый) и запросы к базе данных (мы сильно кэшируем и сохранить количество запросов к базе данных на страницу до 0 или 1) и получить доступ к нашим провайдерам ценообразования для сторонних поставщиков (к ним обращаются, когда вы выполняете поиск с датами, которые мы еще не кэшировали).
Помните, преждевременная оптимизация - это корень всего зла - если вы не используете google.com, web.py, вероятно, сработает для вас.
Ответ 7
Я написал несколько небольших веб-приложений с использованием mod-python и PSP - эквивалент mod-python для php.
В одном случае я написал веб-страницу, которая генерирует заметки о выпуске, проверяя наш репозиторий исходного кода. Я переписал его на PHP, и был удивлен, обнаружив, что версия PSP была примерно на 20% быстрее, а также была примерно вдвое меньше строк кода.
Итак, для небольших проблем, по крайней мере, psp хорошо работал у меня.
Ответ 8
Я думаю, что это зависит от определения того, что такое структура и что она должна делать для вас.
Как уже отмечалось, минимальной "каркас" будет WSGI, поскольку он определяет только один небольшой интерфейс для взаимодействия с веб-сервером. Но это мощный подход из-за промежуточного программного обеспечения, которое вы можете установить между вашим приложением и сервером.
Если вам нужно немного больше, например, некоторые URL-адреса для сопоставления функций, то у вас есть выбор, некоторые из которых уже упоминались.
Если вы пойдете дальше, вы можете приехать в Pylons или Turbogears или Django, после этого может быть Zope, но он растет больше и, возможно, боль, а также вы всегда покупаете мнения об этой структуре.
То, что я недавно использовал все больше и больше (из Zope/Plone), repoze.bfg. Он очень маленький, не поставляется с ORM в комплекте (так что вы можете использовать SQLAlchemy, Storm или просто перейти к базе данных объектов, например ZODB). То, что он делает, - это в основном обработка того, как вы попадаете из URL-адреса в представление, которое является функцией. Он поддерживает как сопоставление URL (a la Routes), так и обход объекта, что IMHO очень мощно в некоторых случаях, особенно. если у вас есть не очень строгая карта. Хорошо, что он напрямую связан с системой безопасности на основе ACL, которая может использоваться, если вы хотите, чтобы ИМХО было очень практично. Таким образом, вам не нужны декораторы, которые, как представляется, используются в основном для таких вещей.
И, конечно же, он основан на WSGI. Также найдите repoze subversion repository для довольно много промежуточного программного обеспечения и Paste, также очень полезно для задач, связанных с WSGI.
Ответ 9
Что случилось с Django? Это не заставляет вас использовать его. ORM и контроллеры - это просто функции Python вместо Rails-подобных методов класса. Кроме того, маршрутизация URL выполняется с помощью регулярных выражений вместо другого синтаксиса, созданного каркасом. Если django кажется слишком много для вас, я рекомендую взглянуть на Werkzeug
Ответ 10
Я очень люблю Google AppEngine. Я использую систему ORM и templating, но в остальном следую REST-образному дизайну и просто реализую методы Python для соответствующих HTTP-протоколов. Он делает исходное HTTP-взаимодействие центральным и необязательно дает вам другие возможности для использования. Плюс больше не настраивайте и не управляйте средой развертывания!