Generando respuestas HTTP, respuestas de error y redirecciones
El decorador router gestiona la petición HTTP recibida y crea un objeto reponse con la respuesta HTTP: el código de estado, las cabaceras y los datos devueltos. Esta respuesta la prepara a partir de lo que devuelve la función vista ejecutada con cada route. Estas funciones pueden devolver tres tipos de datos:
- Una cadena, o la generación de una plantilla (que veremos posteriormente). Por defecto se indica un código 200 y las cabeceras por defecto.
- Un objeto de la clase responsegenerado con la funciónmake_repsonse, que recibe los datos devueltos, el código de estado y las cabeceras.
- Una tupla con los mismos datos: datos, cabeceras y código de respuesta.
Ejemplo de respuestas
Veamos el siguiente código:
@app.route('/string/')
def return_string():
    return 'Hello, world!'	
@app.route('/object/')
def return_object():
    headers = {'Content-Type': 'text/plain'}
    return make_response('Hello, world!', 200,headers)	
@app.route('/tuple/')
def return_tuple():
    return 'Hello, world!', 200, {'Content-Type':'text/plain'}
Puedes comprobar que devuelve cada una de las rutas.
Respuestas de error
Si queremos que en cualquier momento devolver una respuesta HTTP de error podemos utilizar la función abort:
@app.route('/login')
def login():
	abort(401)
	# Esta línea no se ejecuta
Y lo comprobamos:
curl  http://localhost:5000/login	
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>401 Unauthorized</title>
<h1>Unauthorized</h1>
<p>The server could not verify that you are authorized to access the URL requested.  You either supplied the wrong credentials (e.g. a bad password), or your browser doesn't understand how to supply the credentials required.</p>
Si queremos responder de la misma manera un determinado código de estado, por ejemplo queremos devolver una respuesta determinada cuando no se encuentra un recurso:
@app.errorhandler(404)
def page_not_found(error):
    return 'Página no encontrada...', 404
curl  http://localhost:5000/login2 
Página no encontrada...
Redirecciones
Si queremos realizar una redicirección HTTP a otra URL utilizamos la función redirect:
@app.route('/')
def index():
    return redirect(url_for('return_string'))