Подтвердить что ты не робот

Как использовать python для веб-разработки, не полагаясь на структуру?

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

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

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

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

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

4b9b3361

Ответ 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-взаимодействие центральным и необязательно дает вам другие возможности для использования. Плюс больше не настраивайте и не управляйте средой развертывания!