Архитектура с нуля в Python: что использовать? - PullRequest
20 голосов
/ 29 июня 2010

Мне посчастливилось иметь полный контроль над архитектурой приложения моей компании, и я решил отказаться от нашего прототипа, написанного на Ruby / Rails, и начать все заново с Python. Это по нескольким причинам: я хочу изучать Python, я предпочитаю синтаксис, и я в основном сказал «F ** k это, давайте сделаем это».

Итак, учитывая, что это будет довольно интенсивное приложение, я хотел бы услышать ваше мнение о следующем:

  • Общие веб-фреймворки
  • ORM / Уровень базы данных (возможно, для работы с MongoDB)
  • RESTful API с аутентификацией oAuth / xAuth
  • Тестирование / поддержка BDD
  • Очередь сообщений (я хотел бы сохранить это в Python, если это возможно)

API будет необходимо взаимодействовать с приложением Clojure для обработки некоторых внутренних данных и взаимодействовать с очередью сообщений, поэтому, если это не Python, было бы здорово иметь несколько библиотек.

TDD / BDD очень важен для меня, поэтому, чем больше проверено, тем лучше!

Будет очень интересно прочитать ваши мысли по этому поводу. Очень ценится.

Мой лучший,

Jamie

Ответы [ 4 ]

29 голосов
/ 30 июня 2010

рамочные

Хорошо, поэтому я немного пристрастен, поскольку в настоящее время я активно использую Django и организовываю Django User Group в Лондоне, так что имейте это в виду, читая следующее.

Начните с Джанго, потому что это отличный наркотик для врата. Много документации и литературы, очень активное сообщество людей для общения и множество примеров кода в Интернете.

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

Лично я по умолчанию использую Django, но обнаружил, что все больше времени я выбираю для написания, используя более простые микро-фреймворки (думаю, что Sinatra, а не Rails). Много вещей на выбор (хороший список здесь, http://fewagainstmany.com/blog/python-micro-frameworks-are-all-the-rage). Я склонен использовать MNML (потому что я написал его части, и он крошечный), но другие активно развиваются. Я склонен делать это для маленьких, глупых веб-сервисов которые затем соединяются вместе с проектом Джанго в центре, обслуживающем людей.

Стоит отметить, что здесь есть appengine. Вы должны работать в рамках его ограничений, и он не предназначен для всего, но это отличный способ просто поиграть с Python и получить что-то и работать быстро. Это отличный тестовый стенд для обучения и экспериментов.

Монго / ORM

На фронте MongoDB вы, вероятно, захотите сначала взглянуть на базовую библиотеку Python Mongo (http://api.mongodb.org/python/), чтобы проверить, есть ли в ней все, что вам нужно. Если вы действительно хотите что-то более похожее на ORM, то mongoengine (http://hmarr.com/mongoengine/) может быть тем, что вы ищете. Несколько человек также работают над тем, чтобы Django специально интегрировался с бэкэндами nosql более плавно. предназначен для будущих выпусков Django, но django-norel (http://www.allbuttonspressed.com/projects/django-nonrel) имеет код сейчас.

Для реляционных данных SQLAlchemy (http://www.sqlalchemy.org/) хорошо, если вы хотите что-то автономное. ORM Django также отлично подходит, если вы используете Django.

API

Самой официальной библиотекой Oauth является python-oauth2 (http://github.com/simplegeo/python-oauth2),, в которой в качестве примера можно привести пример Django.

Piston (http://bitbucket.org/jespern/django-piston/wiki/Home) - это приложение Django, которое предоставляет множество инструментов для создания API. Преимущество состоит в том, что он довольно активен, хорошо поддерживается и работает повсюду. Существуют и другие проекты, включая Dagny (http://zacharyvoase.github.com/dagny/), что является ранней попыткой создать нечто похожее на ресурсы RESTful в Rails.

В действительности любая среда Python (или даже просто необработанный код WSGI) должна быть достаточно хороша для такого рода задач.

Тестирование

Python имеет unittest как часть своей стандартной библиотеки, а unittest2 находится в python 2.7 (но перенесен и на предыдущие версии http://pypi.python.org/pypi/unittest2/0.1.4). Некоторым людям также нравится Nose (http://code.google.com/p/python-nose/),, который является альтернативным тестовым раннером) с некоторыми дополнительными функциями. Twill (http://twill.idyll.org/) также хорош, это «простой язык сценариев для просмотра веб-страниц», поэтому удобно для функционального тестирования. Freshen (http://github.com/rlisagor/freshen) - это порт огурца для Python. Я еще не дошел до использования этого в гневе, но быстрый взгляд теперь показывает, что это намного лучше, чем когда я смотрел в последний раз.

На самом деле я также использую Ruby для тестирования приложений Python и apis на высоком уровне, потому что мне нравится сочетание скорости и огурца. Но я странный и получаю забавные взгляды от других людей Python для этого.

Очереди сообщений

Для очереди сообщений, на каком бы языке я ни использовал, теперь я всегда использую RabbitMQ.Я имел некоторый успех с Stompserver в прошлом, но Кролик потрясающий.Не беспокойтесь, что он написан не на Python, не на PostgresSQL, Nginx или MongoDB - и все по уважительной причине.Вам важны библиотеки.Здесь вы ищете py-amqplib (http://barryp.org/software/py-amqplib/), низкоуровневую библиотеку для разговора amqp (протокол для разговора с кроликом, а также с другими очередями сообщений). Я также использовал Carrot (http://github.com/ask/carrot/),, с которым легче начать и который предоставляет более приятный API.Подумайте, зайчик в Ruby, если вы знакомы с этим.

Среда

Независимо от тогокусочки и кусочки, которые вы решили использовать в экосистеме Python. Я бы порекомендовал узнать, кто такие pip и virtualenv (http://clemesha.org/blog/2009/jul/05/modern-python-hacker-tools-virtualenv-fabric-pip/ - обратите внимание, что структура также хороша, но не обязательна, и эти документы устарели для этого инструмента)Подумайте об использовании Ruby без gem, bundler или rvm, и вы будете в правильном направлении.

14 голосов
/ 27 июля 2010

Хорошо, возможно, вы совершаете ошибку, ту же, что и я, когда я начинал с python.

Прежде чем вы решите что-то вроде django, это отличное, но нетипичное Веб-фреймворк Python, проведите ночь в объятиях:

Это , это хорошее начало.Убедитесь, что вы немного Werkzeug смотрят , а затем посмотрите некоторые классические WebOb .Возможно, если вы чувствуете огонь в крови, и, возможно, wsgi немного испорчен, но только для богов, проверьте Настой

Я не говорю, используйте его,Django тоже прекрасен, но если вы не знаете Python и проходите через Django, вы рискуете изучить фреймворк.

WSGI очень прост.Вы узнаете о Paste, Pastescript и Pylons.

Затем примите решение.Будет намного легче изучать вещи, делая голые wsgi или Flask, такие как присвоение переменных, использование интерпретатора, проблемы стиля, тестирование на 3 файлах в течение пары ночей вместо django.Возьми 2 ночи.Тогда вы увидите большое сходство между веб-фреймворками Python вместо различий.Черт, вы можете даже катиться с Фляской.

Просто несколько советов, я сделал то же самое с ruby, перебрал Rails и ... ну, были произнесены сильные слова.

Язык, затем базовые wsgi и тестирование, затем выберите ваш фреймворк и бросьте

4 голосов
/ 29 июня 2010

Я новичок в python и планирую углубиться в это в этом году.У меня было несколько неудачных попыток, но всегда профессиональные потребности возвращают меня к PHP.Несколько раз, когда я занимался разработкой, у меня был действительно хороший опыт использования web2py в качестве среды разработки Python.Это довольно хорошо сделано, и полно в функциях, все еще будучи чрезвычайно легким.Уровень базы данных кажется очень гибким и зрелым.

Что касается TDD / BDD и остальных ваших вопросов, у меня нет опыта работы с опциями Python, но было бы интересно услышать, что говорят другие.

0 голосов
/ 30 июня 2010

Я использую Twisted Framework библиотека Nevow для веб-приложения на основе Python.

Все ваши критерии вписываются в эту единую структуру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...