API de funciones de vista de Flask

Las funciones de vista pueden tener atributos especiales adjuntos para controlar el comportamiento de las rutas. Normalmente no es necesario establecer estos atributos manualmente, pero son muy útiles en algunos escenarios avanzados.


Atributos de funciones de vista

Atributo Tipo Valor predeterminado Descripción
__name__ str Nombre de la función Se utiliza como nombre de endpoint. En los blueprints, se añade automáticamente el prefijo del nombre del blueprint.
methods list None Métodos HTTP que acepta la función de vista. Si no se especifica en add_url_rule, se utiliza este valor.
required_methods set None Métodos HTTP que deben añadirse. Incluso si add_url_rule especifica explícitamente methods, estos métodos se añaden de forma obligatoria.
provide_automatic_options bool None Si manejar automáticamente las solicitudes OPTIONS. Establézcalo en False para personalizar la respuesta OPTIONS.

Casos de uso

Escenario Atributo utilizado Descripción
Personalizar la respuesta OPTIONS provide_automatic_options=False Evita que Flask genere automáticamente OPTIONS, la función de vista lo maneja por sí misma.
Establecer métodos en el decorador methods El decorador puede preestablecer la lista de métodos de la función de vista.
Forzar la adición de métodos required_methods Asegura que ciertos métodos siempre estén registrados.

Ejemplo de código

Ejemplo

from flask import Flask, request

app = Flask(__name__)

# Ejemplo 1: Personalizar la respuesta OPTIONS
def custom_endpoint():
    if request.method == "OPTIONS":
        # Devuelve una respuesta OPTIONS personalizada
        return "", 200, {"Allow": "GET, POST"}
    return "Hello, EJEMPLO!"

# Desactivar OPTIONS automático
custom_endpoint.provide_automatic_options = False
custom_endpoint.methods = ["GET", "POST", "OPTIONS"]

app.add_url_rule("/custom", view_func=custom_endpoint)

# Ejemplo 2: Definir un decorador para establecer métodos automáticamente
def api_view(func):
    """Decorador personalizado: establece métodos automáticamente para la función de vista"""
    func.methods = ["GET", "POST"]
    return func

@api_view
def api_handler():
    return {"status": "ok"}

app.add_url_rule("/api", view_func=api_handler)
# En este momento, methods se lee automáticamente de los atributos de la función.
Otras extensiones