2009-02-27 2 views
29

Я знаю, что различные фреймворки имеют свои преимущества, но я лично хочу, чтобы моя веб-разработка в python была максимально возможной: меньше писать в фреймворк, писать больше python.Как использовать python для веб-разработки, не полагаясь на структуру?

Единственное, что я нашел до сих пор, что позволяет мне сделать это самым очевидным способом: web.py, но у меня есть небольшая озабоченность по поводу его производительности.

Для тех из вас, кто использует nginx (или другой вкус) + mod_wsgi + web.py ... как работает? Можно ли его улучшить?

Для тех из вас, кто использовал web.py, понравилась идея и продолжила писать что-то лучшее или что-то лучшее ... позаботьтесь о том, чтобы указать мне на источник?

Хотелось бы услышать обо всех заметных, минимальных, но мощных подходах.

+2

Веб-разработка с Django IS прямолинейна. Извините, пришлось это сделать. Я не понимаю, что не нравится в Django. –

+0

Если вы делаете это менее оскорбительным, вы, вероятно, не получите ни малейшего внимания. – Malfist

+0

Как это сообщение оскорбительно? Это, конечно, не оскорбительно. – Blorgbeard

ответ

18

Это весело, даже если у вас возник вопрос с вопросом о том, как писать без рамки, все все еще наваливаются, чтобы продвигать свою любимую фреймворк. OP опаздывает на то, что не хочет «тяжеловесного каркаса», а в ответах упоминается Twisted, из всех вещей ?! Приходи сейчас, правда.

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

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

Я хотел бы услышать обо все заметных, минимальных, но мощных подходы

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

+0

Я не согласен. mod_python и pss не являются фреймворком, это больше похоже на это. См. Мой ответ ниже. – user26294

+2

«... пакет шаблонов, ... пакет для чтения форм, ... уровень доступа к данным» Имена, пожалуйста. Общие сведения не помогают остальным из нас. –

+0

Итак, вы используете несколько автономных пакетов для разных вещей. Похоже, вы используете фреймворк. :) –

3

Для чего это стоит, я написал свой сайт в mod_python без каких-либо промежуточных фреймворков, таких как Django. У меня действительно не было причин жаловаться. (Ну, может быть, немного, mod_python отчасти причудлив в нескольких отношениях, но не в обычных случаях использования). Одно можно сказать наверняка, это определенно позволит вам писать Python ;-)

+1

mod_python в заведомо плохом вкусе. Использование wsgi и mod_wsgi намного лучше. Лично я начал делать CGI, который также определенно чистый Python, без рамки, ничего лишнего. –

+0

-1 за рекомендацию mod_python с мозгом. mod_wsgi - это путь. mod_wsgi - это стандарт PEP. – nosklo

+0

Я не рекомендовал mod_python. Я просто сказал, что я использовал его, и это сработало для меня. Я бы не стал оспаривать утверждение, что mod_wsgi лучше, но я никогда не использовал его. –

37

Путь к работе - 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, указать конфигурацию mod_wsgi апачских к нему, и он будет работать. Чистый питон. Нет импорта. Просто функция python.

Если вы действительно пишете свой собственный каркас, вы можете проверить werkzeug. Это не каркас, а простой набор различных утилит для приложений WSGI и стал одним из самых передовых модулей WSGI. Он включает в себя мощный отладчик, полнофункциональные объекты запроса и ответа, утилиты HTTP для обработки тегов сущностей, заголовки управления кешем, даты HTTP, обработку файлов cookie, загрузку файлов, мощную систему маршрутизации URL-адресов и множество модулей аддонов, созданных сообществом. Вынимает скучную часть из ваших рук.

9

Вы также можете проверить cherrypy. В центре внимания cherrypy лежит структура, которая позволяет писать питон. У Cherrypy есть свой довольно хороший веб-сервер, но он совместим с wsgi, поэтому вы можете запускать вишневые приложения в apache через mod_wsgi. Вот hello world in cherrypy:

import cherrypy 

class HelloWorld(object): 
    def index(self): 
     return "Hello World!" 
    index.exposed = True 

cherrypy.quickstart(HelloWorld()) 
+0

Я также начал с web.py и перешел на CherryPy. Он очень похож на web.py, поскольку мне кажется, что я пишу код Python вместо кода рамки, но гораздо более функциональный для случайных вещей, которые мне нужно делать. –

0

Что не так с Django? Это не заставляет вас использовать его ORM, а контроллеры - это просто функции Python вместо Rails-подобных методов класса. Кроме того, маршрутизация URL выполняется с помощью регулярных выражений вместо другого синтаксиса, созданного каркасом.Если django кажется слишком много для вас, я рекомендую взглянуть на Werkzeug

0

Я очень люблю Google AppEngine. Я использую систему ORM и templating, но в остальном следую REST-образному дизайну и просто реализую методы Python для соответствующих HTTP-протоколов. Он делает исходное HTTP-взаимодействие центральным и необязательно дает вам другие возможности для использования. Плюс больше не настраивайте и не управляйте средой развертывания!

1

Я написал несколько небольших веб-приложений с использованием mod-python и PSP - эквивалент mod-python для php.

В одном случае я написал веб-страницу, которая генерирует заметки о выпуске, проверяя наш репозиторий исходного кода. Я переписал его на PHP, и был удивлен, обнаружив, что версия PSP была примерно на 20% быстрее, а также была примерно вдвое меньше строк кода.

Итак, для небольших проблем, по крайней мере, psp хорошо работал для меня.

+0

PSP выглядит интересно. – icedwater

8

+1 всем ответам WSGI.

Eric Florenzo написал отличный пост в последнее время, вы должны прочитать: Writing Blazing Fast, Infinitely Scalable, Pure-WSGI Utilities. Это даст вам лучшее представление о чистом WSGI за пределами Hello World. Также обратите внимание на комментарии, особенно первый комментарий Кевина Дангура, где он рекомендует по крайней мере добавить WebOb в ваш набор инструментов.

1

Я думаю, что это зависит от определения того, что такое основа и что она должна делать для вас.

Как указывалось, минимальная «инфраструктура» будет WSGI, поскольку она определяет только один небольшой интерфейс для взаимодействия с веб-сервером. Но это мощный подход из-за промежуточного ПО, которое вы можете установить между вашим приложением и сервером.

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

Если вы пойдете дальше, вы можете приехать в Пилоны или Турбогармы или Джанго, после этого может быть Zope, но он растет больше, а может быть, и боли, и вы всегда покупаете мнения об этих рамках.

То, что я недавно использовал все больше и больше (из Zope/Plone), является repoze.bfg. Он очень маленький, не поставляется с ORM в комплекте (так что вы можете использовать SQLAlchemy, Storm или просто перейти к базе данных объектов, например, ZODB). То, что он делает, - это в основном обработка того, как вы попадаете из URL-адреса в представление, которое является функцией. Он поддерживает как сопоставление URL (a la Routes), так и обход объекта, что IMHO очень мощно в некоторых случаях, особенно. если у вас есть не очень строгая карта. Хорошо, что он напрямую связан с системой безопасности на основе ACL, которая может использоваться, если вы хотите, чтобы ИМХО было очень практично. Таким образом, вам не нужны декораторы, которые, по-видимому, используются в основном для таких вещей.

И, конечно, он основан на WSGI. Также обратите внимание на repoze subversion repository для довольно много промежуточного программного обеспечения, а вещи Paste также очень полезны для задач, связанных с WSGI.

2

Почему у вас есть проблемы с производительностью web.py? Как я упоминал here, мы используем 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, вероятно, сработает для вас.

Смежные вопросы