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

Архитектура с нуля в Python: что использовать?

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

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

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

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

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

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

Мой лучший,

Джейми

4b9b3361

Ответ 1

Каркасы

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

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

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

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

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

Монго/ОРМ

На фронте MongoDB вы, вероятно, захотите взглянуть на основную библиотеку pongon 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/) хорошо, если вы хотите что-то автономное. Django ORM отлично подходит, если вы используете 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, я бы рекомендовал получить, кто пип и virtualenv (http://clemesha.org/blog/2009/jul/05/modern-python-hacker-tools-virtualenv-fabric-pip/ - примечание эта ткань также классная, но не существенная, и эти документы устарели на этом инструменте). Подумайте об использовании Ruby без gem, bundler или rvm, и вы окажетесь в правильном направлении.

Ответ 2

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

Прежде чем вы решите что-то вроде django, которое является отличным, но нетипичным веб-фреймворком python, потратьте ночь, обнимая:

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

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

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

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

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

Язык, затем базовый wsgi и тестирование, затем выберите каркас и рулон

Ответ 3

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

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

Ответ 4

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

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