====== Flask ====== ===== Básico ===== ==== Static files ==== Por defecto los ficheros estáticos están en el directorio ''static''. Este puede ser cambiado desde la definición de la aplicación: app = Flask(__name__, static_folder='my_html', static_url_path='') De esta forma decimos que el directorio ''my_html'' queda redireccionado a la raíz. \\ También podemos decir que el fichero ''index.html'' dentro del directorio ''my_html'' (recordemos que ahora está mapeado como ''static'') será la raíz del programa: @app.route('/') def home(): return redirect(url_for('static', filename='index.html')) ===== Cómo... ===== ==== Utilizar websockets ==== Para ello necesitas el módulo ''gevent-websocket''. \\ Para mostrarlo usando el siguiente ejemplo: app/ ├── html/ │ ├── test.html │ └── jquery.min.js └── test.py En test.html: Flask/Gevent WebSocket Test

Send:

Receive:

En ''test.py'': #!/usr/bin/python # -*- coding: utf-8 *-* from geventwebsocket.handler import WebSocketHandler from gevent.pywsgi import WSGIServer from flask import Flask, request, redirect, url_for app = Flask(__name__, static_folder='html', static_url_path='') @app.route('/') def index(): return redirect(url_for('static', filename='test.html')) @app.route('/api') def api(): if request.environ.get('wsgi.websocket'): ws = request.environ['wsgi.websocket'] while True: message = ws.receive() ws.send(message) else: print 'No support for websockets!' return if __name__ == '__main__': http_server = WSGIServer(('',5000), app, handler_class=WebSocketHandler) http_server.serve_forever() ==== Notas ==== === Apagar el server? === def shutdown_server(): func = request.environ.get('werkzeug.server.shutdown') if func is None: raise RuntimeError('Not running with the Werkzeug Server') func() El server está programado para finalizar la última petición y apagarse. === Recibir JSON === $.ajax({ type: 'POST', contentType: 'application/json', data: JSON.stringify(post_obj), dataType: 'json', url: '/some/url', success: function (e) { console.log(e); } }); content = request.json['content']