2010-06-29 33 views
18

Tengo la suerte de tener el control total sobre la arquitectura de la aplicación de mi compañía, y he decidido eliminar nuestro prototipo escrito en Ruby/Rails y comenzar de nuevo en Python. Esto es por algunas razones: quiero aprender Python, prefiero la sintaxis y básicamente he dicho "F ** k it, hagámoslo".Arquitecturas desde cero en Python: ¿qué usar?

Así, dejando al descubierto en cuenta que esto va a ser una aplicación muy intensiva, me gustaría escuchar sus opiniones sobre lo siguiente:

  • web genérico marcos
  • ORM Capa/Base de datos (tal vez para trabajar con MongoDB)
  • REST API w/OAuth/XAUTH autenticación
  • Exámenes/BDD apoyo
  • cola de mensajes (que me gustaría tener esto en Python si es posible)

La API va a necesitar una interfaz con una aplicación Clojure para manejar algunos datos internos, y la interfaz con la cola de mensajes, por lo que si no es Python, sería genial tener algunas librerías.

TDD/BDD es muy importante para mí, así que cuanto más probado, mejor!

Será muy interesante leer su opinión al respecto. Muy apreciado.

Mi mejor,

Jamie

Respuesta

29

Marcos

OK, así que estoy un poco parcial aquí, ya que actualmente hacen un amplio uso de Django y organizar el grupo de usuarios de Django en Londres, así que ten esto en cuenta al leer la siguiente.

Comience con Django porque es una gran droga de entrada. Gran cantidad de documentación y literatura, una comunidad muy activa de personas con quienes hablar y muchos códigos de ejemplo en la web.

Esa es una razón completamente no técnica. Pilones es probablemente más puro en términos de la filosofía de Python (que es mucho más una colección de partes y piezas discretas), pero muchas de las cosas técnicas son preferencias personales, al menos hasta que entres en Python más. Sin embargo, comparo la etiqueta de Django muy activa en Stack Overflow con la de pilones o turbogears y yo diría que comenzar con Django es más fácil independientemente de cualquier cosa que tenga que ver con el código.

Personalmente prefiero Django, pero creo que cada vez hay más tiempo en el que realmente opto por escribir usando microarmas más simples (piense en Sinatra en lugar de en Rails). Un montón de cosas para elegir (buena lista aquí, http://fewagainstmany.com/blog/python-micro-frameworks-are-all-the-rage).Tiendo a usar MNML (porque escribí partes de él y es pequeño) pero otros se desarrollan activamente. Tiendo a hacer esto para servicios web pequeños y estúpidos que luego se combinan con un proyecto de Django en el medio sirviendo a las personas.

Digno de mención aquí es appengine. Tienes que trabajar dentro de sus limitaciones y no está diseñado para todo, pero es una gran manera de jugar con Python y obtener algo y trabajar rápidamente. Es un gran banco de pruebas para el aprendizaje y la experimentación.

Mongo/ORM

En el frente MongoDB es probable que desea buscar en la biblioteca de Python mongo básica (http://api.mongodb.org/python/) primero para ver si tiene todo lo necesario. Si realmente quieres algo un poco más ORM, entonces mongoengine (http://hmarr.com/mongoengine/) podría ser lo que estás buscando. Un grupo de personas también están trabajando para que Django se integre específicamente de manera más transparente con los backends nosql. Algo de eso es para futuros lanzamientos de Django, pero django-norel (http://www.allbuttonspressed.com/projects/django-nonrel) tiene código ahora.

Para datos relacionales SQLAlchemy (http://www.sqlalchemy.org/) es bueno si quieres algo independiente. El ORM de Django también es excelente si estás usando Django.

API

La biblioteca más oficial Oauth es python-OAuth2 (http://github.com/simplegeo/python-oauth2), que convenientemente tiene un ejemplo de Django como parte de su documentación.

Piston (http://bitbucket.org/jespern/django-piston/wiki/Home) es una aplicación de Django que proporciona muchas herramientas para crear API. Tiene la ventaja de ser bastante activo y bien mantenido y en producción en todo el lugar. También existen otros proyectos, incluido Dagny (http://zacharyvoase.github.com/dagny/), que es un intento inicial de crear algo similar a los recursos RESTful en Rails.

En realidad, cualquier marco de Python (o incluso solo el código bruto de WSGI) debería ser razonablemente bueno para este tipo de tarea.

Prueba

Python tiene unittest como parte de su biblioteca estándar, y es unittest2 en Python 2.7 (pero portado a versiones anteriores también http://pypi.python.org/pypi/unittest2/0.1.4). Algunas personas también les gusta Nariz (http://code.google.com/p/python-nose/), que es un corredor de prueba alternativo con algunas características adicionales. Twill (http://twill.idyll.org/) también es agradable, es un "lenguaje de scripting simple para la navegación web", tan útil para algunas pruebas funcionales. Freshen (http://github.com/rlisagor/freshen) es un puerto de pepino para Python. Todavía no me he acostumbrado a usar esto con enojo, pero una mirada rápida ahora sugiere que es mucho mejor que la última vez que lo busqué.

De hecho, también uso Ruby para las pruebas de alto nivel de las aplicaciones de Python y apis porque me encanta la combinación de celeridad y pepino. Pero soy raro y obtengo miradas divertidas de otras personas de Python por esto.

colas de mensajes

Para una cola de mensajes, independientemente del idioma que estoy usando, ahora siempre uso RabbitMQ. He tenido cierto éxito con stompserver en el pasado, pero Rabbit es increíble. No se preocupe, no está escrito en Python, ni PostgresSQL, Nginx o MongoDB, todo por una buena razón. Lo que te importa son las bibliotecas disponibles. Lo que está buscando aquí es py-amqplib (http://barryp.org/software/py-amqplib/) que es una biblioteca de bajo nivel para hablar amqp (el protocolo para hablar con conejos y otras colas de mensajes).También he usado Zanahoria (http://github.com/ask/carrot/), que es más fácil de empezar y proporciona una API más agradable. Piensa en un conejito en Ruby si estás familiarizado con eso.

Medio Ambiente

Lo que los retazos que decida utilizar desde el ecosistema Python Recomiendo coger a quien PIP y virtualenv (http://clemesha.org/blog/2009/jul/05/modern-python-hacker-tools-virtualenv-fabric-pip/ - en cuenta que la tela es también fresco, pero no es esencial y estos documentos son desactualizado en esa herramienta). Piensa en usar Ruby sin gema, bundler o rvm y estarás en la dirección correcta.

+0

voy a mencionar [buildout] (http://buildout.org) como una alternativa a virtualenv. IMO resuelve el mismo problema y te da más. Pasé un par de meses indeciso, pero al final, 'bin/buildout' me dio mis bibliotecas aisladas, mi elección de interp, y un sistema de compilación que es reubicable e implementable. – chiggsy

+3

Recomiendo mucho Flask como un marco de desarrollo web. Echale un vistazo. –

4

Soy nuevo a Python a mí mismo, y el plan para obtener más en profundidad con que este año. He tenido algunos comienzos en falso en esto, pero las necesidades profesionales siempre me llevan de vuelta a PHP. Las pocas veces que he hecho algún desarrollo, he tenido muy buenas experiencias con web2py como un framework python. Está bastante bien hecho y tiene características completas, a la vez que es extremadamente liviano. La capa de la base de datos parece ser muy flexible y madura.

En cuanto a TDD/BDD y el resto de sus preguntas, no tengo ninguna experiencia con las opciones de Python, pero estaría interesado en escuchar lo que otros dicen.

0

Estoy utilizando Twisted Framework basado en la biblioteca Nevow para la aplicación web basada en python.

Todos sus criterios se ajustan a este marco único.

+0

El 'lenguaje de plantillas' que Nevow es simplemente horrible si alguna vez has hecho programación web antes, básicamente se trata de [escribir HTML con código de Python] (http://divmod.org/trac/wiki/DivmodNevow/TutorialTwo). Si no puedes utilizar Twisted y quieres utilizar un framework moderno, te recomendaría [Cyclone] (http://github.com/fiorix/cyclone). Está basado en Tornado, que es una aplicación de estilo WSGI, pero está construido en Twisted, que tiene grandes bibliotecas asíncronas para cosas como MongoDB. –

14

Ok, puede estar cometiendo un error, el mismo que hice cuando comencé con Python.

Antes de decidir sobre una cosa como Django, que es un excelente, sin embargo atípica framework web pitón, pasar una noche acurrucado con:

This, es un buen comienzo. Asegúrese de hacer A little Werkzeug watching, luego consulte algunos clásico WebOb. Tal vez, si sientes el fuego en la sangre, y podrías, wsgi es un poco defectuoso, pero solo para los dioses, echa un vistazo a Flask

No digo que lo uses, Django también es hermoso, pero si No conozco Python, y pasa por django, corre el riesgo de aprender un framework.

WSGI es super sencillo. Descubrirá Paste, Pastescript y Pylons.

Luego, tome su decisión. Será mucho más fácil aprender cosas haciendo wsgi o Flask, cosas como la asignación de variables, usando el intérprete, preocupaciones de estilo, pruebas, en 3 archivos por un par de noches, en lugar de django. Toma 2 noches. Entonces verá la gran similitud entre los frameworks web de python, en lugar de las diferencias. Diablos, incluso podrías rodar con Flask.

Solo un consejo, hice lo mismo con ruby, entrando por Rails, y ... bueno, se dijeron palabras fuertes.

Idioma, a continuación, wsgi básica y las pruebas, y elegir el marco y el rodillo

+1

Eso es un buen consejo en realidad, gracias. De hecho, estoy aprendiendo Python junto a Django; lo estoy usando fuera de Django para otras cosas. –