ventajas sobre sirve que programación programacion programa para lenguaje desventajas aplicaciones python frameworks cgi wsgi

sobre - Pros y contras de diferentes enfoques de programación web en Python



ventajas y desventajas del lenguaje de programación python (9)

Me gustaría hacer algunas secuencias de comandos del lado del servidor usando Python. Pero estoy medio perdido con la cantidad de formas de hacerlo.

Comienza con el enfoque "hágalo usted mismo" CGI y parece terminar con algunos marcos bastante sólidos que básicamente harían todo el trabajo ellos mismos. Y una gran cantidad de cosas en el medio, como web.py , Pyroxide y Django .

  • ¿Cuáles son los pros y los contras de los marcos o enfoques en los que has trabajado ?
  • ¿Qué trade-offs hay?
  • ¿ Para qué tipo de proyectos lo hacen bien y para qué no?

Editar: Todavía no tengo mucha experiencia en programación web.
Me gustaría evitar las cosas básicas y tediosas, como analizar el URL de parámetros, etc.
Por otro lado, aunque el video del blog creado en 15 minutos con Ruby on Rails me dejó impresionado, me di cuenta de que había cientos de cosas ocultas para mí, lo cual es genial si necesitas escribir una aplicación de Internet en funcionamiento en poco tiempo, pero no es tan bueno para realmente entender la magia, y eso es lo que busco ahora.


CGI es ideal para sitios web de poco tráfico, pero tiene algunos problemas de rendimiento para cualquier otra cosa. Esto se debe a que cada vez que se recibe una solicitud, el servidor inicia la aplicación CGI en su propio proceso. Esto es malo por dos razones: 1) Iniciar y detener un proceso puede llevar tiempo y 2) no puede almacenar nada en la memoria caché. Puedes ir con FastCGI, pero yo diría que sería mejor que simplemente escribieras una aplicación WSGI directa si vas a seguir esa ruta (la forma en que funciona realmente WSGI no es muy diferente de CGI )

Aparte de eso, sus elecciones son, en su mayor parte, cuánto quiere que haga el marco. Puedes ir con un conjunto de canto y baile, como Django o Pylons. O puede ir con un enfoque de combinación y combinación (use algo como CherryPy para las cosas HTTP, SQLAlchemy para las cosas de la base de datos, pegue para la implementación, etc.). También debo señalar que la mayoría de los marcos también le permitirán cambiar diferentes componentes para otros, por lo que estos dos enfoques no son necesariamente mutuamente excluyentes.

Personalmente, no me gustan los frameworks que hacen demasiada magia para mí y prefiero la técnica de mezclar y combinar, pero me han dicho que también estoy completamente loco. :)

¿Cuánta experiencia en programación web tienes? Si eres un principiante, digo ve con Django. Si tienes más experiencia, te digo que juegues con los diferentes enfoques y técnicas hasta que encuentres la correcta.


De acuerdo, los rieles son bastante buenos, pero hay demasiada magia allí (del mundo de Ruby, preferiría mucho a los rieles). Yo personalmente uso Pylons, y estoy muy feliz. Yo diría (en comparación con django), que las torres de alta tensión le permiten intercambiar partes internas de Ints más fácilmente que django. El inconveniente es que tendrás que escribir más cosas por ti mismo (como el CRUD básico).

Ventajas de usar un marco:

  1. hacer las cosas rápidamente (y me refiero a aclarar rápido una vez que conozca el marco)
  2. todo está cumpliendo con los estándares (lo que probablemente no sea tan fácil de lograr cuando generes el tuyo)
  3. es más fácil hacer que funcione algo (muchos tutoriales) sin leer artículos y documentos trillados

Contras:

  1. aprendes menos
  2. más difícil de reemplazar piezas (no es un gran problema en las torres, más aún con django)
  3. más difícil modificar algunas cosas de bajo nivel (como los SQL mencionados anteriormente)

A partir de eso, probablemente puedas idear para qué sirven :-) Como obtienes todo el código, es posible modificarlo para que se adapte incluso a las situaciones más extrañas (las torres supuestamente funcionan en el motor de la aplicación de Google ahora ...).


El programa web más simple es un script CGI, que básicamente es solo un programa cuyo resultado estándar se redirige al navegador web que realiza la solicitud. En este enfoque, cada página tiene su propio archivo ejecutable, que debe cargarse y analizarse en cada solicitud. Esto hace que sea realmente simple poner en marcha algo, pero escasea tanto en términos de rendimiento como de organización. Entonces, cuando necesito una página muy dinámica muy rápidamente que no se convierta en un sistema más grande, uso una secuencia de comandos CGI.

Un paso adelante de esto es incorporar su código Python en su código HTML, como con PSP. No creo que mucha gente use esto hoy en día, ya que los sistemas modernos de plantillas lo han vuelto obsoleto. Trabajé con PSP por un tiempo y descubrí que básicamente tenía los mismos límites organizativos que los scripts CGI (cada página tiene su propio archivo) además de algunas molestias relacionadas con el espacio en blanco al tratar de mezclar el HTML que ignora el espacio en blanco con el Python sensible al espacio.

El siguiente paso es el uso de frameworks web muy simples como web.py, que también he usado. Al igual que los scripts CGI, es muy sencillo poner en marcha algo y no necesita ninguna configuración compleja o código generado automáticamente. Tu propio código será bastante simple de entender, para que puedas ver lo que está sucediendo. Sin embargo, no es tan rico en funciones como otros marcos web; La última vez que lo usé, no había seguimiento de la sesión, así que tuve que hacer mi propio. También tiene "demasiado comportamiento mágico" para citar a Guido ("upvars (), bah").

Finalmente, cuenta con marcos web ricos en características como Django. Esto requerirá un poco de trabajo para que funcionen los sencillos programas de Hello World, pero cada uno de los principales tiene un tutorial excelente y bien escrito (especialmente Django) que lo guiará a través de él. Recomiendo utilizar uno de estos marcos web para cualquier proyecto real debido a la comodidad y características y documentación, etc.

En última instancia, tendrá que decidir qué prefiere. Por ejemplo, todos los marcos usan lenguajes de plantilla (códigos / etiquetas especiales) para generar archivos HTML. Algunos de ellos, como las plantillas de Cheetah, le permiten escribir código de Python arbitrario para que pueda hacer cualquier cosa en una plantilla. Otros, como las plantillas de Django, son más restrictivas y te obligan a separar el código de presentación de la lógica de tu programa. Se trata de lo que usted personalmente prefiere.

Otro ejemplo es el manejo de URL; algunos marcos, como Django, te permiten definir las URL en tu aplicación a través de expresiones regulares. Otros, como CherryPy, asignan automáticamente tus funciones a las URL según los nombres de tus funciones. De nuevo, esta es una preferencia personal.

Personalmente uso una combinación de frameworks web usando CherryPy para mis cosas de servidor web (parámetros de formulario, manejo de sesión, mapeo de url, etc.) y Django para mis plantillas y mapeo relacional de objetos. Mi recomendación es comenzar con un marco web de alto nivel, trabajar en su tutorial y comenzar un pequeño proyecto personal. He hecho esto con todas las tecnologías que he mencionado y ha sido realmente beneficioso. Eventualmente obtendrá una idea de lo que prefiere y se convertirá en un mejor programador web (y un mejor programador en general) en el proceso.


Para proyectos más pequeños, enrollar el suyo es bastante fácil. Especialmente porque puedes simplemente importar un motor de plantillas como Genshi y obtener muchas cosas de manera rápida y fácil. A veces es más rápido usar un destornillador que buscar el taladro eléctrico.

Los marcos completos brindan mucha más potencia, pero deben instalarse y configurarse antes de poder aprovechar esa potencia. Para proyectos más grandes, esta es una preocupación insignificante, pero para proyectos más pequeños esto podría terminar ocupando la mayor parte de su tiempo, especialmente si el marco no es familiar.


Si decide utilizar un marco que esté basado en WSGI (por ejemplo, TurboGears ), le recomendaría que repase el excelente artículo Otro marco de bricolaje de Ian Bicking.

En el artículo, construye un marco simple de aplicación web desde cero.

Además, consulte el video Creación de un marco web con WSGI por Kevin Dangoor. Dangoor es el fundador del proyecto TurboGears.


Si está utilizando Python no debería comenzar con CGI, en su lugar debe comenzar con WSGI (y puede usar wsgiref.handlers.CGIHandler para ejecutar su script WSGI como un script CGI. El resultado es algo que es básicamente de bajo nivel como CGI ( que puede ser útil en un sentido educativo, pero también será un poco molesto), pero sin tener que escribir en una interfaz completamente desactualizada (y vinculando su aplicación a un único modelo de proceso).

Si desea una interfaz menos molesta, pero similarmente de bajo nivel, el uso de WebOb lo proporcionaría. Estarás implementando toda la lógica, y habrá pocos rincones oscuros que no comprenderás, pero no tendrás que perder el tiempo averiguando cómo analizar las fechas HTTP (¡son raras!) O analizar los cuerpos POST. Escribo aplicaciones de esta manera (sin ningún otro marco) y es completamente viable. Como principiante, te aconsejaría esto si estuvieras interesado en entender qué hacen los marcos, porque es inevitable que escribirás tu propio mini marco. OTOH, un marco real probablemente le enseñará buenas prácticas de diseño y estructura de aplicaciones. Para ser un programador web realmente bueno, creo que debes probar ambos seriamente; usted debe entender todo lo que hace un marco y no tener miedo de sus aspectos internos, pero también debe pasar tiempo en un entorno reflexivo diseñado por otra persona (es decir, un marco existente) y comprender cómo le ayuda esa estructura.


Si nunca antes has hecho una programación CGI, creo que valdría la pena hacer un proyecto, quizás solo un sitio de muestra de juego para ti, usando el enfoque de bricolaje. Aprenderá mucho más sobre cómo funcionan todas las distintas partes de lo que lo haría utilizando un marco. Esto ayudará a diseñar y depurar, y así sucesivamente, a todas sus futuras aplicaciones web, sin importar cómo las escriba.

Personalmente ahora uso Django . El beneficio real es una implementación de aplicaciones muy rápida. El mapeo relacional de objetos hace que las cosas se muevan rápidamente y la biblioteca de plantillas es un placer de usar. Además, la interfaz de administración le ofrece pantallas CRUD básicas para todos sus objetos, por lo que no necesita escribir nada "aburrido".

La desventaja de utilizar una solución basada en ORM es que si desea crear algo de SQL, por razones de rendimiento, es mucho más difícil de lo que hubiera sido de otra manera, aunque sigue siendo muy posible.


Si quieres ir a lo grande, elige Django y estás listo. Pero si solo desea aprender, desarrolle su propio marco utilizando WebOb ya mencionado; esto puede ser realmente divertido y estoy seguro de que aprenderá mucho más (además de que puede usar componentes que le gusten: sistema de plantilla, despachador de url, capa de base de datos, sesiones, et caetera).

En los últimos 2 años construí pocos sitios grandes usando Django y todo lo que puedo decir, Django cubrirá el 80% de sus necesidades en un 20% de tiempo. El 20% restante de trabajo tomará el 80% del tiempo, sin importar qué marco usaría.


Siempre vale la pena hacer algo de la manera difícil, una vez, como un ejercicio de aprendizaje. Una vez que comprenda cómo funciona, elija un marco que se adapte a su aplicación y úselo. No necesita reinventar la rueda una vez que comprenda la velocidad angular. :-)

También vale la pena asegurarse de que tienes una comprensión bastante sólida del lenguaje de programación detrás del framework antes de saltar: intentar aprender tanto Django como Python al mismo tiempo (o Ruby and Rails, o X e Y), puede conducir para aún más confusión. Primero escriba un código en el idioma y luego agregue el marco.

Aprendemos a desarrollar, no mediante el uso de herramientas, sino resolviendo problemas. ¡Corre hacia unas paredes, trepa y encuentra algunas paredes más altas!