Interfaz web para una aplicación torcida.

Tengo una aplicación escrita en Twisted y quiero agregar una interfaz web para controlarla y monitorearla. Necesitaré muchas páginas dinámicas que muestren el estado actual y la configuración, por lo que esperaba un marco que ofrezca al menos un lenguaje de plantilla con herencia y algún enrutamiento básico.

Ya que estoy usando Twisted, de todos modos quería usar twisted.web , pero el lenguaje de las plantillas es demasiado básico y parece que el único marco, Nevow está bastante muerto (está en el launchpad pero la página de inicio y el wiki están abajo y no puedo encontrar cualquier documentación).

Entonces ¿cuales son mis opciones?

  • ¿Hay algún otro twisted.web basado en twisted.web ?
  • ¿Hay otros marcos que funcionen con el reactor de twisted?
  • ¿Debo obtener un marco web (estoy pensando en web.py o matraz) y ejecutarlo en un hilo?

Gracias por tus respuestas.

Como Nevow todavía está abajo y no quería escribir el enrutamiento y el soporte para una libreta de plantillas, terminé usando Flask. Resultó ser bastante fácil:

 # make a Flask app from flask import Flask, render_template, g app = Flask(__name__) @app.route("/") def index(): return render_template("index.html") # run in under twisted through wsgi from twisted.web.wsgi import WSGIResource from twisted.web.server import Site resource = WSGIResource(reactor, reactor.getThreadPool(), app) site = Site(resource) # bind it etc # ... 

Funciona perfectamente hasta ahora.

Puede enlazarlo directamente en el reactor como en el siguiente ejemplo:

 reactor.listenTCP(5050, site) reactor.run() 

Si necesita agregar hijos a una raíz WSGI, visite este enlace para obtener más detalles.

Aquí hay un ejemplo que muestra cómo combinar el recurso WSGI con un hijo estático.

 from twisted.internet import reactor from twisted.web import static as Static, server, twcgi, script, vhost from twisted.web.resource import Resource from twisted.web.wsgi import WSGIResource from flask import Flask, g, request class Root( Resource ): """Root resource that combines the two sites/entry points""" WSGI = WSGIResource(reactor, reactor.getThreadPool(), app) def getChild( self, child, request ): # request.isLeaf = True request.prepath.pop() request.postpath.insert(0,child) return self.WSGI def render( self, request ): """Delegate to the WSGI resource""" return self.WSGI.render( request ) def main(): 
 static = Static.File("/path/folder") static.processors = {'.py': script.PythonScript, '.rpy': script.ResourceScript} static.indexNames = ['index.rpy', 'index.html', 'index.htm'] root = Root() root.putChild('static', static) reactor.listenTCP(5050, server.Site(root)) reactor.run() 

Nevow es la opción obvia. Desafortunadamente, el hardware del servidor web divmod y el hardware del servidor de respaldo fallaron al mismo tiempo. Están intentando recuperar los datos y publicarlos en el launchpad, pero puede llevar un tiempo.

También puede utilizar básicamente cualquier módulo de plantilla existente con twisted.web; Jinja2 viene a la mente.