Herramientas de usuario

Herramientas del sitio


fw:flask

¡Esta es una revisión vieja del documento!


Tabla de Contenidos

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...

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.

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:

<!doctype html>
<html>                                                                           
<head>                                                                           
    <title>Flask/Gevent WebSocket Test</title>                                                   
    <script type="text/javascript" src="jquery.min.js"></script>
    <script type="text/javascript" charset="utf-8">                              
        $(document).ready(function(){                                            
            var ws;
            $('form').submit(function(event){   
                ws.send($('#data').val());
                console.log('2. message send: ' + $('#data').val());
                return false;                                                    
            });                                                                  
            if ("WebSocket" in window) {                                         
                ws = new WebSocket("ws://" + document.domain + ":5000/api");
                console.log('1. web socket created');
                ws.onmessage = function (msg) {
                    console.log('3. message received:' + msg);
                    $("#log").append("<p>"+msg.data+"</p>");                   
                };                                                               
            } else {                                                             
                alert("WebSocket not supported");                                
            }                                                                    
        });                                                                      
    </script>                                                                    
</head>                                                                          
<body>                                                                           
    <h1>Send:</h1>                                                               
    <form method='POST' action='#'>
        <textarea name='data' id="data"></textarea>
        <div><input type='submit'></div>
    </form>
    <h1>Receive:</h1>
    <div id="log"></div>
</body>
</html>

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()
fw/flask.1374322240.txt.gz · Última modificación: 2020/05/09 09:24 (editor externo)