Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
|
fw:tornado [2013/08/24 18:22] alfred |
fw:tornado [2020/05/09 09:25] (actual) |
||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| ====== Tornado ====== | ====== Tornado ====== | ||
| + | ===== Básico ===== | ||
| + | * [[http://www.tornadoweb.org/en/stable/|Web del proyecto]] | ||
| + | * [[http://www.tornadoweb.org/en/branch2.4/overview.html|Overview]] y [[http://www.tornadoweb.org/en/branch2.4/documentation.html|Documentación]]. | ||
| + | |||
| + | <code python> | ||
| + | import tornado.ioloop | ||
| + | import tornado.web | ||
| + | |||
| + | class MainHandler(tornado.web.RequestHandler): | ||
| + | def get(self): | ||
| + | self.write("Hello, world") | ||
| + | |||
| + | application = tornado.web.Application([ | ||
| + | (r"/", MainHandler), | ||
| + | ]) | ||
| + | |||
| + | if __name__ == "__main__": | ||
| + | application.listen(8888) | ||
| + | tornado.ioloop.IOLoop.instance().start() | ||
| + | </code> | ||
| + | Una aplicación que utilice tornado se define a partir de unos patrones que indican la ruta y las clases que gestionarán peticiones a dichas rutas. | ||
| + | ==== RequestHandler's ==== | ||
| + | <code python> | ||
| + | class MainHandler(tornado.web.RequestHandler): | ||
| + | def get(self): | ||
| + | self.write("You requested the main page") | ||
| + | |||
| + | class StoryHandler(tornado.web.RequestHandler): | ||
| + | def get(self, story_id): | ||
| + | self.write("You requested the story " + story_id) | ||
| + | |||
| + | application = tornado.web.Application([ | ||
| + | (r"/", MainHandler), | ||
| + | (r"/story/([0-9]+)", StoryHandler), | ||
| + | ]) | ||
| + | </code> | ||
| + | ==== Cómo... ==== | ||
| + | === ... Instalar? === | ||
| + | <code> | ||
| + | $ pip install tornado | ||
| + | </code> | ||
| + | === ... Servir contenido estático? === | ||
| + | <code python> | ||
| + | application = tornado.web.Application([ | ||
| + | (r'/(.*)', tornado.web.StaticFileHandler, {'path': '../static/'}), | ||
| + | (r'/(.*)', tornado.web.StaticFileHandler, {'path': '../static/index.html'}) | ||
| + | ]) | ||
| + | </code> | ||
| + | <code python> | ||
| + | class IndexHandler(tornado.web.RequestHandler): | ||
| + | def get(self, *args, **kwargs): | ||
| + | self.render('index.html') | ||
| + | </code> | ||
| + | === ... Indicar que es debug y se muestre más info por consola? === | ||
| + | Como argumento ''debug=True'' al constructor del objeto aplicación. | ||
| ===== Notas ===== | ===== Notas ===== | ||
| - | * {{:fw:tornado:tornado_zmq_websockets.zip|Estos apuntes}} explican cómo crear un websocket que publica a partir de datos recibidos por ZeroMQ. | + | * {{:fw:tornado:tornado_zmq_websockets.zip|Estos apuntes}} explican cómo crear un websocket que publica a partir de datos recibidos por ZeroMQ. Fuentes: |
| + | * [[http://zeromq.github.io/pyzmq/eventloop.html]] | ||
| + | * [[https://learning-0mq-with-pyzmq.readthedocs.org/en/latest/pyzmq/multisocket/tornadoeventloop.html]]. | ||
| + | * [[https://github.com/FZambia/tornado-zmq-sockjs-example]] | ||