2011-01-30 9 views
9

Así que, programé esta aplicación retorcida hace unos meses, la cual ahora me gustaría extender con una interfaz de usuario basada en web para la configuración.¿Qué camino tomar con la programación retorcida y web?

El sitio web Twisted recomienda Nevow, pero no estoy seguro de si esta es una buena opción. Parece que su sitio web está inactivo por un tiempo y su página de launchpad no había visto ninguna actualización en medio año. ¿Este proyecto está muerto? Además, he visto discusiones sobre partes móviles de Nevow en twisted.web en la lista de correo de web retorcida. Entonces, ¿todavía se recomienda para nuevos desarrollos?

Otra idea era usar Django. Necesitaría autenticación de usuario y permisos de todos modos en la interfaz de configuración, y estoy bastante familiarizado con ella. (Nunca he trabajado con Nevow o twisted.web) Pero parece bastante difícil conectar ambos mundos, todo lo que pude encontrar fueron ejemplos de cómo ejecutar Django con WSGI en Twisted.

¿Hay alguna otra posibilidad de tener una interfaz de usuario elegante además de retorcida?

+0

¿Ya investigaste a CherryPy? –

+0

La herramienta [BuildBot] (http://trac.buildbot.net/wiki/ScreenShots) está escrita con Twisted y tiene algunos buenos resultados de página web, podría ser un buen lugar para aprender. – sarnold

Respuesta

6

Nevow sigue siendo una buena opción si desea compatibilidad con Deferreds en el sistema de plantillas que utiliza (no está muerto). También tiene algunas ventajas sobre el simple Twisted Web cuando se trata de un complicado envío de URL. Sin embargo, es básicamente solo un sistema de plantillas. Twisted Web es el verdadero servidor web. Entonces, de cualquier manera, vas a usar Twisted Web. De hecho, incluso si usa Django en el contenedor WSGI de Twisted Web, aún usará Twisted Web. Así que aprender cosas sobre Twisted Web no te hará daño.

Si va a generar cualquier cantidad de HTML, desea utilizar una biblioteca de plantillas HTML. En este punto, nadie debería estar construyendo HTML utilizando operaciones primitivas de cadenas. Entonces, si quieres usar una de las otras bibliotecas de plantillas HTML de Python, Cheetah, Quixote, etc., en lugar de Nevow, ¡eso es genial! Simplemente va a utilizar la biblioteca de plantillas para obtener una cadena para escribir en respuesta a una solicitud HTTP. A Twisted Web no le importa de dónde vino la cadena.

Y si desea hacer algo con Django (u otro sistema basado en WSGI), entonces ciertamente puede implementar esto en su proceso de Twisted utilizando el soporte de WSGI de Twisted Web. Y aún puede interactuar entre las aplicaciones WSGI y el resto de su código Twisted, siempre que ejerza un poco de cuidado: las aplicaciones WSGI se ejecutan en un grupo de subprocesos y las API Twisted no son seguras para subprocesos, debe invocarlas con reactor.callFromThread o una de las pocas API similares (en particular, blockingCallFromThread es a veces una herramienta útil de alto nivel para usar).

9

Primero, déjame abordar la percepción de que Nevow está muerto. El proyecto de launchpad que contiene el código para Nevow (y el resto de los proyectos de Divmod) es divmod.org on launchpad. Una falla de hardware ha impactado gravemente la presencia pública del proyecto, pero todavía está allí, y otras cosas (como el wiki y las entradas) están en proceso de recuperación. No hay mucho trabajo de mantenimiento activo en curso ahora, pero eso es principalmente porque es lo suficientemente bueno para la mayoría de sus usuarios; hay mucha gente que depende de Nevow y estaría muy molesta si dejara de funcionar. Esas personas tienen las habilidades y la experiencia necesarias para continuar manteniéndolo. Entonces, si bien no se está promocionando activamente en este momento, creo que es poco probable que desaparezca.

Mi esperanza a largo plazo para Nevow sería la siguiente. (Yo diría "plan", pero dado que no he estado involucrado activamente con su mantenimiento últimamente, esto depende de quienes sí lo están.) Primero, me gustaría extraer sus instalaciones de plantillas y moverlas a retorcidas. web. La API limpia y no obsoleta para Nevow está cubierta principalmente por nevow.page.Element y varios loaders.Twisted sí mismo quiere generar HTML en algunos lugares y estas instalaciones podrían ser útiles. Entonces debemos descartar el "servidor de aplicaciones" y las partes del modelo de recursos de Nevow. En su mayoría, se trata simplemente de una colección aleatoria de correcciones de errores o alteraciones de twisted.web, la mayoría de las cuales estaban presentes de alguna forma en twisted.web2 y, por lo tanto, se volverán a twisted.web o se aplicarán allí. Finalmente está la cuestión de Atenea. Si bien la comunicación bidireccional es una de las fortalezas de Twisted, Athena es en sí misma una base de código JavaScript gigantesca y en expansión, y probablemente debería seguir siendo su propio proyecto.

En tercer lugar, a la pregunta principal, dada esta información, ¿qué debe hacer ahora?

Hablando en general, diría "use nevow". El proyecto tiene algunas verrugas, necesita más documentación y su API necesita ser recortada para eliminar algunas cosas viejas y rotas, pero todavía es bastante útil y está muy viva. Para compensar la documentación escasamente escasa, puede unirse a los canales #divmod o #twisted.web en Freenode para obtener ayuda. Si ayudas aportando parches donde puedas, encontrarás que recibirás mucha ayuda entusiasta allí. Cuando ignoras las partes obsoletas, Nevow tiene una API amigable bastante pequeña, cuerda y retorcida. La consecuencia del plan para la evolución de Nevow que describí anteriormente es en realidad bastante mínima. Si incluso sucede, lo que significa para es es, en 1-5 años, cuando actualiza a una nueva versión de Twisted, obtendrá un par de advertencias de depreciación, cambie algunas líneas import en su código de from nevow.page import ...; from nevow.loaders import ... a algo nuevo hipotético como from twisted.web.page.element import ...; from twisted.web.page.templates import ..., o somesuch. La mayor parte de la API pasada ese punto debe permanecer igual, y definitivamente los conceptos de alto nivel no deberían cambiar mucho.

La principal ventaja que obtienes al usar Nevow es que es fácil de usar y puede mostrar páginas en tu hilo principal sin bloquear cosas. Además, puedes obtener COMET realmente fácil de forma gratuita con Athena.

También puede usar Django. Esto no es tan fácil de usar, pero obviamente tiene una base de apoyo más amplia. Sin embargo, "no es tan fácil de usar" no significa "difícil de usar". Puede ejecutarlo en twisted.web a través de WSGIResource, and simply use blockingCallFromThread en su aplicación Django para invocar cualquier API retorcida que devuelva un aplazado, que debería ser lo suficientemente potente como para hacer casi cualquier cosa que desee. Si tiene una pregunta más específica sobre cómo crear instancias de recursos web Twisted para combinar Twisted Web y Django, probablemente debería formularla en su propia pregunta de Desbordamiento de pila.

+0

¡Gracias por esta actualización! – mikewaters

1

En este punto, Nevow está definitivamente muerto. Como ilustración de lo muerto que está, hay un bug that prevents installation of Nevow using pip, que se corrigió en trunk en 2009, pero no está en ninguna versión porque no ha habido ningún lanzamiento desde entonces.

twisted.web y, en particular, twisted.web.template cubren prácticamente todo lo que fue útil en Nevow, y debe utilizarse para cualquier proyecto nuevo que esté considerando utilizar Nevow.

+0

Saludos por la actualización y el resumen –

+0

En el momento en que escribí esto, Nevow estaba muerto, sin embargo, desde entonces ha habido un lanzamiento (0.11.1). Esto fue principalmente para solucionar problemas de empaquetado para proyectos existentes que dependen de él, y aún no recomendaría su uso para un nuevo desarrollo. –

Cuestiones relacionadas