Función de vista Flask

La función de vista es la parte central de una aplicación Flask; se encarga de manejar las solicitudes y generar las respuestas.

Las funciones de vista están estrechamente vinculadas con las rutas; a través de las rutas se asignan las URLs a funciones de vista específicas.

A continuación se ofrece una explicación detallada de las funciones de vista en Flask, incluyendo cómo definirlas, usar los datos de la solicitud, devolver respuestas y manejar errores.

  1. Definir la función de vista: la función de vista es la funcionalidad principal que procesa las solicitudes y devuelve respuestas.
  2. Recibir datos de la solicitud: usarrequestel objeto para obtener los parámetros de URL, datos de formulario, parámetros de consulta, etc.
  3. Devolver respuesta: puede devolver cadenas, HTML, JSON u objetos de respuesta personalizados.
  4. Manejar solicitud y respuesta: usarrequestobjeto ymake_responsepara manejar la solicitud y generar respuestas personalizadas.
  5. Manejar errores: manejar excepciones dentro de la función de vista o usar el mecanismo de manejo de errores de Flask.
  6. Decoradores de la función de vista: usar@app.before_request、@app.after_requestdecoradores como estos para manejar la lógica antes y después de la solicitud.
  7. Códigos de estado devueltos por la función de vista: se puede especificar un código de estado HTTP para indicar el resultado del procesamiento de la solicitud.

1. Definir la función de vista

Una función de vista es una función normal de Python que recibe la solicitud y devuelve una respuesta. Normalmente se usa junto con las rutas; mediante decoradores se asigna la URL a la función de vista.

Ejemplo

from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
    return 'Hello, World!'

  • @app.route('/'): asignar la URL raíz/mapear ahomela función de vista.
  • def home(): la función de vista devuelve una cadena'Hello, World!'como respuesta.

2. Recibir datos de la solicitud

La función de vista puede recibir diferentes tipos de datos de la solicitud, incluyendo parámetros de URL, datos de formulario, parámetros de consulta, etc.

Obtener parámetros de URL:

Ejemplo

@app.route('/greet/<name>')
def greet(name):
    return f'Hello, {name}!'
  • <name>es un parámetro de URL que se pasa a la función de vistagreet。

Obtener datos de formulario:

Ejemplo

from flask import request

@app.route('/submit', methods=['POST'])
def submit():
    username = request.form.get('username')
    return f'Form submitted by {username}!'

request.form.get('username'): obtener el campo username de los datos de formulario en una solicitud POST.

Obtener parámetros de consulta:

Ejemplo

@app.route('/search')
def search():
    query = request.args.get('query')
    return f'Search results for: {query}'

request.args.get('query'): obtener el parámetro de consulta query en una solicitud GET.

3. Devolver la respuesta

La función de vista puede devolver varios tipos de respuesta, como cadenas, HTML, JSON u objetos de respuesta personalizados.

Devolver una cadena:

Ejemplo

@app.route('/message')
def message():
    return 'This is a simple message.'

Devolver una plantilla HTML:

Ejemplo

from flask import render_template

@app.route('/hello/<name>')
def hello(name):
    return render_template('hello.html', name=name)

render_template('hello.html', name=name): renderizar la plantilla HTML hello.html y pasar la variable name a la plantilla.

Devolver datos JSON:

Ejemplo

from flask import jsonify

@app.route('/api/data')
def api_data():
    data = {'key': 'value'}
    return jsonify(data)

jsonify(data): convertir un diccionario de Python en una respuesta JSON.

Devolver un objeto de respuesta personalizado:

Ejemplo

from flask import Response

@app.route('/custom')
def custom_response():
    response = Response('Custom response with headers', status=200)
    response.headers['X-Custom-Header'] = 'Value'
    return response

Response('Custom response with headers', status=200): crear un objeto de respuesta personalizado y establecer las cabeceras de la respuesta.

4. Manejar la solicitud y la respuesta

La función de vista puede acceder al objeto de solicitud y generar una respuesta según los datos de la solicitud. Se puede usar el objeto request para obtener información de la solicitud y make_response para crear respuestas personalizadas.

Usar el objeto request:

Ejemplo

from flask import request

@app.route('/info')
def info():
    user_agent = request.headers.get('User-Agent')
    return f'Your user agent is {user_agent}'

request.headers.get('User-Agent'): obtener la información User-Agent de las cabeceras de la solicitud.

Usar make_response:

Ejemplo

from flask import make_response

@app.route('/header')
def custom_header():
    response = make_response('Response with custom header')
    response.headers['X-Custom-Header'] = 'Value'
    return response

make_response('Response with custom header'): crear un objeto de respuesta y establecer cabeceras personalizadas.

5. Manejar errores

Se pueden manejar excepciones o errores dentro de la función de vista, o mediante el mecanismo de manejo de errores que proporciona Flask.

Manejar errores dentro de la función de vista:

Ejemplo

@app.route('/divide/<int:x>/<int:y>')
def divide(x, y):
    try:
        result = x / y
        return f'Result: {result}'
    except ZeroDivisionError:
        return 'Error: Division by zero', 400

Usar la declaración try-except para manejar el error de división por cero y devolver un mensaje de error personalizado y un código de estado.

Manejo global de errores:

Ejemplo

@app.errorhandler(404)
def not_found(error):
    return 'Page not found', 404

@app.errorhandler(404): definir una función que maneje el error 404.

6. Decoradores de la función de vista

Además de @app.route, Flask admite otros decoradores para implementar funciones más complejas.

Ejemplo:

  • @app.before_request: función que se ejecuta antes de cada solicitud.
  • @app.after_request: función que se ejecuta después de cada solicitud.
  • @app.teardown_request: función que se ejecuta al finalizar la solicitud, para tareas de limpieza.

Ejemplo de uso de decoradores:

Ejemplo

@app.before_request
def before_request():
    print('Before request')

@app.after_request
def after_request(response):
    print('After request')
    return response

@app.teardown_request
def teardown_request(exception):
    print('Teardown request')

7. Códigos de estado devueltos por la función de vista

La función de vista no solo puede devolver contenido, sino también especificar el código de estado HTTP.

Ejemplo

@app.route('/status')
def status():
    return 'Everything is OK', 200

Devolver el código de estado 200 indica que la solicitud fue exitosa.

Devolver un objeto de respuesta con código de estado:

Ejemplo

from flask import Response

@app.route('/error')
def error():
    return Response('An error occurred', status=500)

Devolver el código de estado 500 indica un error interno del servidor.

Otras extensiones