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