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

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

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

  • Универсальные веб-платформы
  • Слой ORM/Database (возможно, для работы с MongoDB)
  • УСПОКОИТЕЛЬНАЯ аутентификация API w/oAuth/xAuth
  • Поддержка тестирования/BDD
  • Очередь сообщений (я хотел бы сохранить это в Python если возможным),

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

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

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

Мое лучшее,

Jamie

20
задан Jamie Rumbelow 29 June 2010 в 17:18
поделиться

4 ответа

Фреймворки

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

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

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

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

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

Mongo/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/) хорош, если вам нужно что-то отдельное. Django's 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) - это порт cucumber на Python. Я еще не успел использовать его в гневе, но беглый взгляд сейчас показывает, что он стал намного лучше, чем когда я смотрел в последний раз.

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

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

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

Окружение

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

29
ответ дан 29 November 2019 в 23:27
поделиться

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

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

4
ответ дан 29 November 2019 в 23:27
поделиться

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

Все ваши критерии укладываются в этот единый фреймворк.

0
ответ дан 29 November 2019 в 23:27
поделиться

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

Прежде чем вы выберете такую ​​вещь, как django, который является отличным, но нетипичным веб-фреймворком для Python, проведите ночь в обнимку с:

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

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

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

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

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

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

14
ответ дан 29 November 2019 в 23:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: