API¶
Esta parte de la documentación cubre todas las interfaces de Flask. Para las partes en las que Flask depende de bibliotecas externas, documentamos las más importantes justo aquí y proporcionamos enlaces a la documentación canónica.
Objeto Application¶
- class flask.Flask(import_name, static_url_path=None, static_folder='static', static_host=None, host_matching=False, subdomain_matching=False, template_folder='templates', instance_path=None, instance_relative_config=False, root_path=None)¶
El objeto flask implementa una aplicación WSGI y actúa como objeto central. Se le pasa el nombre del módulo o paquete de la aplicación. Una vez creado actuará como un registro central para las funciones de la vista, las reglas de la URL, la configuración de la plantilla y mucho más.
El nombre del paquete se utiliza para resolver los recursos de dentro del paquete o de la carpeta en la que está contenido el módulo, dependiendo de si el parámetro paquete resuelve a un paquete python real (una carpeta con un archivo
__init__.py
dentro) o a un módulo estándar (sólo un archivo.py
).Para más información sobre la carga de recursos, véase
open_resource()
.Normalmente creas una instancia
Flask
en tu módulo principal o en el archivo__init__.py
de tu paquete así:from flask import Flask app = Flask(__name__)
Sobre el primer parámetro
La idea del primer parámetro es dar a Flask una idea de lo que pertenece a tu aplicación. Este nombre se utiliza para encontrar recursos en el sistema de archivos, puede ser utilizado por las extensiones para mejorar la información de depuración y mucho más.
Así que es importante lo que proporcione allí. Si estás usando un módulo único, __name__ es siempre el valor correcto. Sin embargo, si estás usando un paquete, normalmente se recomienda codificar el nombre de tu paquete allí.
Por ejemplo, si su aplicación está definida en
yourapplication/app.py
debe crearla con una de las dos versiones siguientes:app = Flask('yourapplication') app = Flask(__name__.split('.')[0])
¿Por qué? La aplicación funcionará incluso con __name__, gracias a cómo se buscan los recursos. Sin embargo, esto hará que la depuración sea más dolorosa. Algunas extensiones pueden hacer suposiciones basadas en el nombre de importación de tu aplicación. Por ejemplo, la extensión Flask-SQLAlchemy buscará el código en tu aplicación que ha lanzado una consulta SQL en modo de depuración. Si el nombre de importación no está bien configurado, esa información de depuración se pierde. (Por ejemplo, sólo recogerá las consultas SQL en tuaplicacion.app y no en tuaplicacion.views.frontend)
Changelog
Nuevo en la versión 1.0: Se han añadido los parámetros
host_matching
ystatic_host
.Nuevo en la versión 1.0: Se ha añadido el parámetro
subdomain_matching
. Ahora es necesario habilitar manualmente la coincidencia de subdominios. La configuración deSERVER_NAME
no la activa implícitamente.Nuevo en la versión 0.11: Se ha añadido el parámetro root_path.
Nuevo en la versión 0.8: Se han añadido los parámetros instance_path y instance_relative_config.
Nuevo en la versión 0.7: Se han añadido los parámetros static_url_path, static_folder y template_folder.
- Parámetros
import_name (str) – el nombre del paquete de aplicaciones
static_url_path (Optional[str]) – se puede utilizar para especificar una ruta diferente para los archivos estáticos en la web. Por defecto, el nombre de la carpeta es static_folder.
static_folder (Optional[Union[str, os.PathLike]]) – La carpeta con archivos estáticos que se sirve en
static_url_path
. Relativo a la aplicaciónroot_path
o una ruta absoluta. El valor predeterminado es'static
.static_host (Optional[str]) – el host que se utilizará al añadir la ruta estática. El valor predeterminado es None. Se requiere cuando se utiliza
host_matching=True
con unacarpeta estática
configurada.host_matching (bool) – establece el atributo
url_map.host_matching
. Por defecto es False.subdomain_matching (bool) – considerar el subdominio relativo a
SERVER_NAME
cuando se comparan las rutas. Por defecto es False.template_folder (Optional[str]) – la carpeta que contiene las plantillas que debe utilizar la aplicación. Por defecto es la carpeta
'templates'
en la ruta raíz de la aplicación.instance_path (Optional[str]) – Una ruta de instancia alternativa para la aplicación. Por defecto, se asume que la carpeta
instancia
junto al paquete o módulo es la ruta de la instancia.instance_relative_config (bool) – si se establece como
True
se asume que los nombres de archivos relativos para cargar la configuración son relativos a la ruta de la instancia en lugar de la raíz de la aplicación.root_path (Optional[str]) – La ruta a la raíz de los archivos de la aplicación. Sólo debe establecerse manualmente cuando no pueda detectarse automáticamente, como en el caso de los paquetes de espacios de nombres.
- aborter¶
Una instancia de
aborter_class
creada pormake_aborter()
. Es llamado porflask.abort()
para lanzar errores HTTP, y también puede ser llamado directamente.Nuevo en la versión 2.2: Movido de
flask.abort
, que llama a este objeto.
- aborter_class¶
alias of
werkzeug.exceptions.Aborter
- add_template_filter(f, name=None)¶
Registra un filtro de plantilla personalizado. Funciona exactamente igual que el decorador
template_filter()
.
- add_template_global(f, name=None)¶
Registra una función global de plantilla personalizada. Funciona exactamente igual que el decorador
template_global()
.Changelog
Nuevo en la versión 0.10.
- add_template_test(f, name=None)¶
Registra una prueba de plantilla personalizada. Funciona exactamente igual que el decorador
template_test()
.Changelog
Nuevo en la versión 0.10.
- add_url_rule(rule, endpoint=None, view_func=None, provide_automatic_options=None, **options)¶
Registra una regla para enrutar las solicitudes entrantes y construir URLs. El decorador
route()
es un atajo para llamar a esto con el argumentoview_func
. Son equivalentes:@app.route("/") def index(): ...
def index(): ... app.add_url_rule("/", view_func=index)
Véase Registros de rutas URL.
El nombre del endpoint de la ruta es por defecto el nombre de la función de la vista si no se pasa el parámetro
endpoint
. Se producirá un error si ya se ha registrado una función para el endpoint.El parámetro
methods
es por defecto["GET"]
. El parámetroHEAD
siempre se añade automáticamente, yOPTIONS
se añade automáticamente por defecto.view_func
no necesita ser pasado, pero si la regla debe participar en el enrutamiento un nombre del endpoint debe ser asociado con una función de vista en algún momento con el decoradorendpoint()
.app.add_url_rule("/", endpoint="index") @app.endpoint("index") def index(): ...
Si
view_func
tiene un atributorequired_methods
, esos métodos se añaden a los métodos pasados y automáticos. Si tiene el atributoprovide_automatic_methods
, se utiliza como método por defecto si no se pasa el parámetro.- Parámetros
rule (str) – La cadena de reglas URL.
endpoint (Optional[str]) – El nombre del endpoint a asociar con la regla y la función de la vista. Se utiliza cuando se enrutan y construyen URLs. Por defecto es
view_func.__name__
.view_func (Optional[Union[Callable[[...], Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, ...]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], int], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], int, Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, ...]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], WSGIApplication]], Callable[[...], Awaitable[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, ...]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], int], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], int, Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, ...]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], WSGIApplication]]]]]) – La función de la vista a asociar con el nombre del endpoint.
provide_automatic_options (Optional[bool]) – Añade el método
OPTIONS
y responde a las peticionesOPTIONS
automáticamente.
- Tipo del valor devuelto
None
- after_request(f)¶
Registrar una función que se ejecute después de cada petición a este objeto.
La función se llama con el objeto response, y debe devolver un objeto response. Esto permite que las funciones modifiquen o sustituyan la respuesta antes de ser enviada.
Si una función lanza una excepción, cualquier función
after_request
restante no será llamada. Por lo tanto, esto no debe ser utilizado para las acciones que deben ejecutarse, como para cerrar los recursos. Utiliceteardown_request()
para eso.- Parámetros
f (flask.scaffold.T_after_request) –
- Tipo del valor devuelto
flask.scaffold.T_after_request
- after_request_funcs: t.Dict[ft.AppOrBlueprintKey, t.List[ft.AfterRequestCallable]]¶
Una estructura de datos de funciones a llamar al final de cada solicitud, con el formato
{scope: [functions]}
. La clavescope
es el nombre de un blueprint para el que las funciones están activas, oNone
para todas las peticiones.Para registrar una función, utilice el decorador
after_request()
.Esta estructura de datos es interna. No debe modificarse directamente y su formato puede cambiar en cualquier momento.
- app_context()¶
Crea un
AppContext
. Úsalo como un bloquewith
para empujar el contexto, lo que hará quecurrent_app
apunte a esta aplicación.Un contexto de aplicación es automáticamente empujado por
RequestContext.push()
cuando se maneja una solicitud, y cuando se ejecuta un comando CLI. Use esto para crear manualmente un contexto fuera de estas situaciones.with app.app_context(): init_db()
Véase El contexto de la aplicación.
Changelog
Nuevo en la versión 0.9.
- Tipo del valor devuelto
- app_ctx_globals_class¶
alias of
flask.ctx._AppCtxGlobals
- async_to_sync(func)¶
Devuelve una función de sincronización que ejecutará la función coroutine.
result = app.async_to_sync(func)(*args, **kwargs)
Sobrescribe este método para cambiar la forma en que la aplicación convierte el código asíncrono para que se pueda llamar de forma sincrónica.
Changelog
Nuevo en la versión 2.0.
- auto_find_instance_path()¶
Intenta localizar la ruta de la instancia si no fue proporcionada al constructor de la clase de la aplicación. Básicamente calculará la ruta de una carpeta llamada
instance
junto a su archivo principal o al paquete.Changelog
Nuevo en la versión 0.8.
- Tipo del valor devuelto
- before_first_request(f)¶
Registra una función que se ejecutará antes de la primera petición a esta instancia de la aplicación.
La función será llamada sin argumentos y su valor de retorno será ignorado.
Obsoleto desde la versión 2.2: Se eliminará en Flask 2.3. Ejecute el código de configuración al crear la aplicación en su lugar.
Changelog
Nuevo en la versión 0.8.
- Parámetros
f (flask.app.T_before_first_request) –
- Tipo del valor devuelto
flask.app.T_before_first_request
- before_first_request_funcs: t.List[ft.BeforeFirstRequestCallable]¶
Una lista de funciones que serán llamadas al principio de la primera petición a esta instancia. Para registrar una función, utilice el decorador
before_first_request()
.Obsoleto desde la versión 2.2: Se eliminará en Flask 2.3. Ejecute el código de configuración al crear la aplicación en su lugar.
Changelog
Nuevo en la versión 0.8.
- before_request(f)¶
Registrar una función para ejecutar antes de cada solicitud.
Por ejemplo, esto se puede utilizar para abrir una conexión a la base de datos, o para cargar el usuario conectado desde la sesión.
@app.before_request def load_user(): if "user_id" in session: g.user = db.session.get(session["user_id"])
La función será llamada sin ningún argumento. Si devuelve un valor que no sea
None
, el valor se maneja como si fuera el valor de retorno de la vista, y se detiene el manejo de la solicitud.- Parámetros
f (flask.scaffold.T_before_request) –
- Tipo del valor devuelto
flask.scaffold.T_before_request
- before_request_funcs: t.Dict[ft.AppOrBlueprintKey, t.List[ft.BeforeRequestCallable]]¶
Una estructura de datos de funciones a llamar al principio de cada petición, con el formato
{scope: [functions]}
. La clavescope
es el nombre de un plano para el que las funciones están activas, oNone
para todas las peticiones.Para registrar una función, utilice el decorador
before_request()
.Esta estructura de datos es interna. No debe modificarse directamente y su formato puede cambiar en cualquier momento.
- blueprints: t.Dict[str, 'Blueprint']¶
Asigna nombres de planos registrados a objetos de planos. El dictado conserva el orden en que se registraron los planos. Los planos se pueden registrar varias veces, este dict no registra la frecuencia con la que se adjuntaron.
Changelog
Nuevo en la versión 0.7.
- cli¶
El grupo de comandos Click para registrar los comandos CLI para este objeto. Los comandos están disponibles desde el comando
flask
una vez que se ha descubierto la aplicación y se han registrado los blueprints.
- config¶
El diccionario de configuración como
Config
. Se comporta exactamente como un diccionario normal, pero admite métodos adicionales para cargar una configuración desde archivos.
- config_class¶
alias of
flask.config.Config
- context_processor(f)¶
Registra una función de procesador de contexto de plantilla.
- Parámetros
f (flask.scaffold.T_template_context_processor) –
- Tipo del valor devuelto
flask.scaffold.T_template_context_processor
- create_global_jinja_loader()¶
Crea el cargador para el entorno Jinja2. Se puede utilizar para anular sólo el cargador y mantener el resto sin cambios. Se desaconseja anular esta función. En su lugar se debe sobrescribir la función
jinja_loader()
.El cargador global despacha entre los cargadores de la aplicación y los blueprints individuales.
Changelog
Nuevo en la versión 0.7.
- Tipo del valor devuelto
flask.templating.DispatchingJinjaLoader
- create_jinja_environment()¶
Crea el entorno Jinja basado en
jinja_options
y en los distintos métodos de la aplicación relacionados con Jinja. Cambiarjinja_options
después de esto no tendrá ningún efecto. También añade al entorno los globales y filtros relacionados con Flask.Changelog
Distinto en la versión 0.11:
Environment.auto_reload
establecido de acuerdo con la opción de configuraciónTEMPLATES_AUTO_RELOAD
.Nuevo en la versión 0.5.
- Tipo del valor devuelto
flask.templating.Environment
- create_url_adapter(request)¶
Crea un adaptador de URL para la solicitud dada. El adaptador de URL se crea en un punto en el que el contexto de la solicitud aún no está configurado, por lo que la solicitud se pasa explícitamente.
Changelog
Distinto en la versión 1.0:
SERVER_NAME
ya no permite implícitamente la coincidencia de subdominios. Utilicesubdomain_matching
en su lugar.Distinto en la versión 0.9: Ahora también se puede llamar sin un objeto de solicitud cuando se crea el adaptador de URL para el contexto de la aplicación.
Nuevo en la versión 0.6.
- Parámetros
request (Optional[flask.wrappers.Request]) –
- Tipo del valor devuelto
- property debug: bool¶
Si el modo de depuración está activado. Cuando se utiliza
flask run
para iniciar el servidor de desarrollo, se mostrará un depurador interactivo para las excepciones no manejadas, y el servidor se recargará cuando el código cambie. Esto se asigna a la clave de configuraciónDEBUG
. Se activa cuandoenv
es'development
y se anula con la variable de entornoFLASK_DEBUG
. Puede que no se comporte como se espera si se establece en el código.No active el modo de depuración cuando se despliegue en producción.
Por defecto:
True
sienv
es'development
, oFalse
en caso contrario.
- default_config = {'APPLICATION_ROOT': '/', 'DEBUG': None, 'ENV': None, 'EXPLAIN_TEMPLATE_LOADING': False, 'JSONIFY_MIMETYPE': 'application/json', 'JSONIFY_PRETTYPRINT_REGULAR': False, 'JSON_AS_ASCII': True, 'JSON_SORT_KEYS': True, 'MAX_CONTENT_LENGTH': None, 'MAX_COOKIE_SIZE': 4093, 'PERMANENT_SESSION_LIFETIME': datetime.timedelta(days=31), 'PREFERRED_URL_SCHEME': 'http', 'PROPAGATE_EXCEPTIONS': None, 'SECRET_KEY': None, 'SEND_FILE_MAX_AGE_DEFAULT': None, 'SERVER_NAME': None, 'SESSION_COOKIE_DOMAIN': None, 'SESSION_COOKIE_HTTPONLY': True, 'SESSION_COOKIE_NAME': 'session', 'SESSION_COOKIE_PATH': None, 'SESSION_COOKIE_SAMESITE': None, 'SESSION_COOKIE_SECURE': False, 'SESSION_REFRESH_EACH_REQUEST': True, 'TEMPLATES_AUTO_RELOAD': None, 'TESTING': False, 'TRAP_BAD_REQUEST_ERRORS': None, 'TRAP_HTTP_EXCEPTIONS': False, 'USE_X_SENDFILE': False}¶
Parámetros de configuración por defecto.
- delete(rule, **options)¶
Acceso directo a
route()
conmethods=["DELETE"]
.Changelog
Nuevo en la versión 2.0.
- dispatch_request()¶
Realiza el envío de la solicitud. Coincide con la URL y devuelve el valor de retorno de la vista o del manejador de errores. Esto no tiene que ser un objeto de respuesta. Para convertir el valor de retorno en un objeto de respuesta adecuado, llame a
make_response()
.Changelog
Distinto en la versión 0.7: Esto ya no hace el manejo de excepciones, este código fue movido al nuevo
full_dispatch_request()
.- Tipo del valor devuelto
Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, …]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, …]]]]]], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], int], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], int, Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, …]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, …]]]]]], WSGIApplication]
- do_teardown_appcontext(exc=<object object>)¶
Se llama justo antes de que aparezca el contexto de la aplicación.
Cuando se maneja una solicitud, el contexto de la aplicación se despliega después del contexto de la solicitud. Véase
do_teardown_request()
.Esto llama a todas las funciones decoradas con
teardown_appcontext()
. Entonces se envía la señalappcontext_tearing_down
.Esto es llamado por
AppContext.pop()
.Changelog
Nuevo en la versión 0.9.
- Parámetros
exc (Optional[BaseException]) –
- Tipo del valor devuelto
None
- do_teardown_request(exc=<object object>)¶
Se llama después de que se envíe la solicitud y se devuelva la respuesta, justo antes de que el contexto de la solicitud se vacíe.
Esto llama a todas las funciones decoradas con
teardown_request()
, yBlueprint.teardown_request()
si un blueprint manejó la solicitud. Finalmente, se envía la señalrequest_tearing_down
.Esto es llamado por
RequestContext.pop()
, que puede ser retrasado durante las pruebas para mantener el acceso a los recursos.- Parámetros
exc (Optional[BaseException]) – Una excepción no controlada que se ha producido durante el envío de la solicitud. Se detecta a partir de la información de excepción actual si no se pasa. Se pasa a cada función de desmontaje.
- Tipo del valor devuelto
None
Changelog
Distinto en la versión 0.9: Se ha añadido el argumento
exc
.
- endpoint(endpoint)¶
Decora una función de vista para registrarla para el punto final dado. Se utiliza si se añade una regla sin una
view_func
conadd_url_rule()
.app.add_url_rule("/ex", endpoint="example") @app.endpoint("example") def example(): ...
- ensure_sync(func)¶
Asegúrese de que la función es sincrónica para los trabajadores WSGI. Las funciones
def
simples se devuelven tal cual. Las funcionesasync def
se envuelven para ejecutarse y esperar la respuesta.Anula este método para cambiar la forma en que la aplicación ejecuta las vistas asíncronas.
Changelog
Nuevo en la versión 2.0.
- env¶
En qué entorno se está ejecutando la aplicación. Flask y las extensiones pueden habilitar comportamientos basados en el entorno, como habilitar el modo de depuración. Esto se asigna a la clave de configuración
ENV
. Esto es establecido por la variable de entornoFLASK_ENV
y puede no comportarse como se espera si se establece en el código.No activar el desarrollo cuando se despliega en producción.
Por defecto:
'producción'
- error_handler_spec: t.Dict[ft.AppOrBlueprintKey, t.Dict[t.Optional[int], t.Dict[t.Type[Exception], ft.ErrorHandlerCallable]]]¶
Una estructura de datos de los gestores de errores registrados, con el formato
scope: {code: {class: handler}}
. La clavescope
es el nombre de un plano para el que los manejadores están activos, oNone
para todas las peticiones. La clavecode
es el código de estado HTTP paraHTTPException
, oNone
para otras excepciones. El diccionario más interno asigna las clases de excepción a las funciones de los manejadores.Para registrar un manejador de errores, utilice el decorador
errorhandler()
.Esta estructura de datos es interna. No debe modificarse directamente y su formato puede cambiar en cualquier momento.
- errorhandler(code_or_exception)¶
Registrar una función para manejar errores por código o clase de excepción.
Un decorador que se utiliza para registrar una función dado un código de error. Ejemplo:
@app.errorhandler(404) def page_not_found(error): return 'This page does not exist', 404
También puedes registrar manejadores para excepciones arbitrarias:
@app.errorhandler(DatabaseError) def special_exception_handler(error): return 'Database connection failed', 500
Changelog
Nuevo en la versión 0.7: Utilice
register_error_handler()
en lugar de modificarerror_handler_spec
directamente, para los manejadores de error de toda la aplicación.Nuevo en la versión 0.7: Ahora también se pueden registrar tipos de excepción personalizados que no necesariamente tienen que ser una subclase de la clase
HTTPException
.
- extensions: dict¶
un lugar donde las extensiones pueden almacenar el estado específico de la aplicación. Por ejemplo, aquí es donde una extensión podría almacenar motores de bases de datos y cosas similares.
La clave debe coincidir con el nombre del módulo de extensión. Por ejemplo, en el caso de una extensión «Flask-Foo» en flask_foo, la clave sería
'foo'
.Changelog
Nuevo en la versión 0.7.
- full_dispatch_request()¶
Despacha la solicitud y, además, realiza el pre y postprocesamiento de la misma, así como la captura de excepciones HTTP y el manejo de errores.
Changelog
Nuevo en la versión 0.7.
- Tipo del valor devuelto
- get(rule, **options)¶
Acceso directo a
route()
conmethods=["GET"]
.Changelog
Nuevo en la versión 2.0.
- get_send_file_max_age(filename)¶
Utilizado por
send_file()
para determinar el valor de la cachémax_age
para una ruta de archivo dada si no se ha pasado.Por defecto, esto devuelve
SEND_FILE_MAX_AGE_DEFAULT
de la configuración decurrent_app
. Este valor por defecto esNone
, lo que indica al navegador que utilice peticiones condicionales en lugar de una caché temporizada, lo que suele ser preferible.Changelog
Distinto en la versión 2.0: La configuración por defecto es
None
en lugar de 12 horas.Nuevo en la versión 0.9.
- property got_first_request: bool¶
Este atributo se establece como
True
si la aplicación comenzó a manejar la primera solicitud.Changelog
Nuevo en la versión 0.8.
- handle_exception(e)¶
Maneja una excepción que no tiene un manejador de errores asociado, o que fue lanzada desde un manejador de errores. Esto siempre provoca un error 500
InternalServerError
.Siempre envía la señal
got_request_exception
.Si
propagate_exceptions
esTrue
, como en el modo de depuración, el error será relanzado para que el depurador pueda mostrarlo. En caso contrario, se registra la excepción original y se devuelve unInternalServerError
.Si se registra un gestor de errores para
InternalServerError
o500
, se utilizará. Por consistencia, el manejador siempre recibirá elInternalServerError
. La excepción original no manejada está disponible comoe.original_exception
.Changelog
Distinto en la versión 1.1.0: Siempre pasa la instancia
InternalServerError
al manejador, estableciendooriginal_exception
al error no manejado.Distinto en la versión 1.1.0: Las funciones
after_request
y otras finalizaciones se realizan incluso para la respuesta 500 por defecto cuando no hay un manejador.Nuevo en la versión 0.3.
- Parámetros
e (Exception) –
- Tipo del valor devuelto
- handle_http_exception(e)¶
Maneja una excepción HTTP. Por defecto, esto invocará los manejadores de error registrados y volverá a devolver la excepción como respuesta.
Changelog
Distinto en la versión 1.0.3:
RoutingException
, que se utiliza internamente para acciones como redireccionamientos de barras durante el enrutamiento, no se pasa a los manejadores de errores.Distinto en la versión 1.0: Las excepciones son buscadas por el código y por MRO, por lo que las subclases de
HTTPException
pueden ser manejadas con un manejador catch-all para laHTTPException
base.Nuevo en la versión 0.3.
- Parámetros
- Tipo del valor devuelto
Union[werkzeug.exceptions.HTTPException, Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, …]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, …]]]]]], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], int], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], int, Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, …]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, …]]]]]], WSGIApplication]
- handle_url_build_error(error, endpoint, values)¶
Llamada por
url_for()
si se ha producido unBuildError
. Si esto devuelve un valor, será devuelto porurl_for
, de lo contrario el error se volverá a lanzar.Cada función en
url_build_error_handlers
es llamada conerror
,endpoint
yvalues
. Si una función devuelveNone
o genera unBuildError
, se omite. De lo contrario, su valor de retorno es devuelto porurl_for
.
- handle_user_exception(e)¶
Este método es llamado cada vez que ocurre una excepción que debe ser manejada. Un caso especial es
HTTPException
que se reenvía al métodohandle_http_exception()
. Esta función devolverá un valor de respuesta o volverá a lanzar la excepción con el mismo traceback.Changelog
Distinto en la versión 1.0: Los errores de clave que se producen a partir de datos de solicitud como
form
muestran la clave errónea en modo de depuración en lugar de un mensaje genérico de solicitud errónea.Nuevo en la versión 0.7.
- Parámetros
e (Exception) –
- Tipo del valor devuelto
Union[werkzeug.exceptions.HTTPException, Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, …]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, …]]]]]], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], int], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], int, Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, …]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, …]]]]]], WSGIApplication]
- property has_static_folder: bool¶
True
sistatic_folder
está establecido.Changelog
Nuevo en la versión 0.5.
- import_name¶
El nombre del paquete o módulo al que pertenece este objeto. No lo cambie una vez que lo haya establecido el constructor.
- inject_url_defaults(endpoint, values)¶
Inyecta los valores predeterminados de la URL para el punto final dado directamente en el diccionario de valores pasado. Esto se utiliza internamente y se llama automáticamente en la construcción de la URL.
Changelog
Nuevo en la versión 0.7.
- instance_path¶
Contiene la ruta de la carpeta de la instancia.
Changelog
Nuevo en la versión 0.8.
- iter_blueprints()¶
Itera sobre todos los planos por el orden en que fueron registrados.
Changelog
Nuevo en la versión 0.11.
- Tipo del valor devuelto
- property jinja_env: flask.templating.Environment¶
El entorno Jinja utilizado para cargar las plantillas.
El entorno se crea la primera vez que se accede a esta propiedad. Cambiar
jinja_options
después no tendrá ningún efecto.
- jinja_environment¶
alias of
flask.templating.Environment
- property jinja_loader: Optional[jinja2.loaders.FileSystemLoader]¶
El cargador de Jinja para las plantillas de este objeto. Por defecto es una clase
jinja2.loaders.FileSystemLoader
atemplate_folder
si se establece.Changelog
Nuevo en la versión 0.5.
- jinja_options: dict = {}¶
Opciones que se pasan al entorno Jinja en
create_jinja_environment()
. Cambiar estas opciones después de crear el entorno (accediendo ajinja_env
) no tendrá ningún efecto.Changelog
Distinto en la versión 1.1.0: Es un
dict
en lugar de unImmutableDict
para permitir una configuración más fácil.
- json_decoder¶
alias of
flask.json.JSONDecoder
- json_encoder¶
alias of
flask.json.JSONEncoder
- log_exception(exc_info)¶
Registra una excepción. Es llamado por
handle_exception()
si la depuración está deshabilitada y justo antes de llamar al manejador. La implementación por defecto registra la excepción como error en ellogger
.Changelog
Nuevo en la versión 0.8.
- Parámetros
exc_info (Union[Tuple[type, BaseException, types.TracebackType], Tuple[None, None, None]]) –
- Tipo del valor devuelto
None
- property logger: logging.Logger¶
Un
Logger
estándar de Python para la aplicación, con el mismo nombre quename
.En el modo de depuración, el
level
del registrador se establecerá enDEBUG
.Si no hay ningún gestor configurado, se añadirá un gestor por defecto. Consulte Registro para obtener más información.
Changelog
Distinto en la versión 1.1.0: El registrador toma el mismo nombre que
name
en lugar de codificar con fuerza"flask.app"
.Distinto en la versión 1.0.0: Se ha simplificado el comportamiento. El registrador siempre se llama
"flask.app"
. El nivel sólo se establece durante la configuración, no compruebaapp.debug
cada vez. Sólo se utiliza un formato, no diferentes dependiendo deapp.debug
. No se eliminan manejadores, y sólo se añade un manejador si no hay ninguno ya configurado.Nuevo en la versión 0.3.
- make_aborter()¶
Crea el objeto para asignar a
aborter
. Ese objeto es llamado porflask.abort()
para levantar errores HTTP, y también puede ser llamado directamente.Por defecto, esto crea una instancia de
aborter_class
, que por defecto eswerkzeug.exceptions.Aborter
.Nuevo en la versión 2.2.
- Tipo del valor devuelto
- make_config(instance_relative=False)¶
Usado para crear el atributo config por el constructor de Flask. El parámetro instance_relative se pasa desde el constructor de Flask (allí llamado instance_relative_config) e indica si el config debe ser relativo a la ruta de la instancia o a la ruta raíz de la aplicación.
Changelog
Nuevo en la versión 0.8.
- Parámetros
instance_relative (bool) –
- Tipo del valor devuelto
- make_default_options_response()¶
Este método es llamado para crear la respuesta
OPTIONS
por defecto. Esto se puede cambiar a través de la subclase para cambiar el comportamiento por defecto de las respuestasOPTIONS
.Changelog
Nuevo en la versión 0.7.
- Tipo del valor devuelto
- make_response(rv)¶
Convierte el valor de retorno de una función de la vista en una instancia de
response_class
.- Parámetros
rv (Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, ...]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], int], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], int, Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, ...]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], WSGIApplication]) – el valor de retorno de la función de la vista. La función de la vista debe devolver una respuesta. No se permite devolver
None
, o que la vista termine sin devolver. Se permiten los siguientes tipos paraview_rv
:str
Se crea un objeto de respuesta con la cadena codificada en UTF-8 como cuerpo. Se crea un objeto de respuesta con los bytes como cuerpo.dict
Un diccionario que será jsonificado antes de ser devuelto. Una lista que será jsonificada antes de ser devuelta. Un generador que devuelvestr
obytes
para ser transmitido como respuesta. Una tupla puede ser(body, status, header)
,(body, status)
, o(body, header)
, dondebody
es cualquiera de los otros tipos permitidos,state
es una cadena o un entero, yheader
es un diccionario o una lista de tuplas(key, value)
. Sibody
es una instancia deresponse_class
,status
sobrescribe el valor de salida yheaders
se extiende.response_class
El objeto se devuelve sin cambios. otherResponse
class El objeto se coacciona aresponse_class
.callable()
La función se llama como una aplicación WSGI. El resultado se utiliza para crear un objeto de respuesta.- Tipo del valor devuelto
Distinto en la versión 2.2: Un generador se convertirá en una respuesta en streaming. Una lista se convertirá en una respuesta JSON.
Changelog
Distinto en la versión 1.1: Un diccionario se convertirá en una respuesta JSON.
Distinto en la versión 0.9: Anteriormente se interpretaba una tupla como los argumentos del objeto de respuesta.
- make_shell_context()¶
Devuelve el contexto de shell para un shell interactivo para esta aplicación. Esto ejecuta todos los procesadores de contexto de shell registrados.
Changelog
Nuevo en la versión 0.11.
- Tipo del valor devuelto
- property name: str¶
El nombre de la aplicación. Suele ser el nombre de importación con la diferencia de que se adivina a partir del archivo de ejecución si el nombre de importación es main. Este nombre se utiliza como nombre de visualización cuando Flask necesita el nombre de la aplicación. Se puede establecer y anular para cambiar el valor.
Changelog
Nuevo en la versión 0.8.
- open_instance_resource(resource, mode='rb')¶
Abre un recurso de la carpeta de instancia de la aplicación (
instance_path
). Por lo demás, funciona comoopen_resource()
. Los recursos de instancia también se pueden abrir para escribir.
- open_resource(resource, mode='rb')¶
Abre un archivo de recursos relativo a
root_path
para su lectura.Por ejemplo, si el archivo
schema.sql
está junto al archivoapp.py
donde está definida la aplicaciónFlask
, se puede abrir con:with app.open_resource("schema.sql") as f: conn.executescript(f.read())
- patch(rule, **options)¶
Acceso directo a
route()
conmethods=["PATCH"]
.Changelog
Nuevo en la versión 2.0.
- permanent_session_lifetime¶
Una
timedelta
que se utiliza para establecer la fecha de expiración de una sesión permanente. El valor predeterminado es 31 días, lo que hace que una sesión permanente sobreviva aproximadamente un mes.Este atributo también se puede configurar desde la configuración con la clave de configuración
PERMANENT_SESSION_LIFETIME
. Por defecto estimedelta(days=31)
- post(rule, **options)¶
Acceso directo a
route()
conmethods=["POST"]
.Changelog
Nuevo en la versión 2.0.
- preprocess_request()¶
Se llama antes de que se envíe la solicitud. Llama a
url_value_preprocessors
registrado con la app y el blueprint actual (si lo hay). Luego llama abefore_request_funcs
registrado con la app y el blueprint.Si cualquier manejador
before_request()
devuelve un valor que no es None, el valor se maneja como si fuera el valor de retorno de la vista, y se detiene el manejo posterior de la solicitud.- Tipo del valor devuelto
Optional[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, …]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, …]]]]]], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], int], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], int, Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, …]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, …]]]]]], WSGIApplication]]
- process_response(response)¶
Puede ser sobreescrito para modificar el objeto de respuesta antes de que sea enviado al servidor WSGI. Por defecto, esto llamará a todas las funciones decoradas
after_request()
.Changelog
Distinto en la versión 0.5: A partir de Flask 0.5 las funciones registradas para después de la ejecución de la solicitud son llamadas en orden inverso al registro.
- Parámetros
response (flask.wrappers.Response) – un objeto
response_class
.- Returns
un nuevo objeto de respuesta o el mismo, tiene que ser una instancia de
response_class
.- Tipo del valor devuelto
- property propagate_exceptions: bool¶
Devuelve el valor de la configuración
PROPAGATE_EXCEPTIONS
en caso de que esté establecido, de lo contrario se devuelve un valor por defecto sensible.Changelog
Nuevo en la versión 0.7.
- put(rule, **options)¶
Acceso directo a
route()
conmethods=["PUT"]
.Changelog
Nuevo en la versión 2.0.
- redirect(location, code=302)¶
Crea un objeto de respuesta de redirección.
Esto es llamado por
flask.redirect()
, y puede ser llamado directamente también.- Parámetros
- Tipo del valor devuelto
Nuevo en la versión 2.2: Movido de
flask.redirect
, que llama a este método.
- register_blueprint(blueprint, **options)¶
Registra un
Blueprint
en la aplicación. Los argumentos de palabras clave pasados a este método anulan los valores predeterminados establecidos en el plano.Llama al método
register()
del blueprint después de registrar el blueprint en elblueprints
de la aplicación.- Parámetros
blueprint (Blueprint) – El blueprint para registrarse.
url_prefix – Las rutas de los blueprint llevarán este prefijo.
subdomain – Las rutas Blueprint coincidirán en este subdominio.
url_defaults – Las rutas Blueprint utilizarán estos valores por defecto para los argumentos de la vista.
options (Any) – Los argumentos adicionales de la palabra clave se pasan a
BlueprintSetupState
. Se puede acceder a ellos en las llamadas de retorno derecord()
.
- Tipo del valor devuelto
None
Changelog
Distinto en la versión 2.0.1: La opción
name
se puede utilizar para cambiar el nombre (pre-punteado) con el que se registra el blueprint. Esto permite registrar el mismo plano varias veces con nombres únicos paraurl_for
.Nuevo en la versión 0.7.
- register_error_handler(code_or_exception, f)¶
Función alternativa de adición de errores al decorador
errorhandler()
que es más sencilla de utilizar para el uso de no decoradores.Changelog
Nuevo en la versión 0.7.
- Parámetros
f (Callable[[Any], Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, ...]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], int], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], int, Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, ...]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], WSGIApplication]]) –
- Tipo del valor devuelto
None
- request_class¶
alias of
flask.wrappers.Request
- request_context(environ)¶
Crea un
RequestContext
que represente un entorno WSGI. Utiliza un bloquewith
para empujar el contexto, lo que hará querequest
apunte a esta solicitud.Véase El contexto de la solicitud.
Típicamente no deberías llamar a esto desde tu propio código. Un contexto de solicitud es automáticamente empujado por el
wsgi_app()
cuando se maneja una solicitud. Utilicetest_request_context()
para crear un entorno y un contexto en lugar de este método.- Parámetros
environ (dict) – un entorno WSGI
- Tipo del valor devuelto
- response_class¶
alias of
flask.wrappers.Response
- root_path¶
Ruta absoluta del paquete en el sistema de archivos. Se utiliza para buscar los recursos contenidos en el paquete.
- route(rule, **options)¶
Decora una función de la vista para registrarla con la regla de URL y las opciones dadas. Llama a
add_url_rule()
, que tiene más detalles sobre la implementación.@app.route("/") def index(): return "Hello, World!"
Véase Registros de rutas URL.
El nombre del endpoint de la ruta es por defecto el nombre de la función de la vista si no se pasa el parámetro
endpoint
.El parámetro
methods
es por defecto["GET"]
. Los parámetrosHEAD
yOPTIONS
se añaden automáticamente.
- run(host=None, port=None, debug=None, load_dotenv=True, **options)¶
Ejecuta la aplicación en un servidor de desarrollo local.
No utilice
run()
en un entorno de producción. No está pensado para cumplir con los requisitos de seguridad y rendimiento de un servidor de producción. En su lugar, consulte Despliegue en producción para ver las recomendaciones sobre servidores WSGI.Si se establece la bandera
debug
el servidor se recargará automáticamente para los cambios de código y mostrará un depurador en caso de que se produzca una excepción.Si quieres ejecutar la aplicación en modo de depuración, pero deshabilitar la ejecución de código en el depurador interactivo, puedes pasar
use_evalex=False
como parámetro. Esto mantendrá activa la pantalla de rastreo del depurador, pero deshabilitará la ejecución de código.No se recomienda utilizar esta función para el desarrollo con recarga automática, ya que está mal soportada. En su lugar, debería utilizar el soporte de la línea de comandos de flask de
run
.Tenga en cuenta
Flask suprimirá cualquier error del servidor con una página de error genérica a menos que esté en modo de depuración. Por lo tanto, para activar sólo el depurador interactivo sin la recarga de código, tienes que invocar
run()
condebug=True
yuse_reloader=False
. Si establecesuse_debugger
aTrue
sin estar en modo de depuración no atraparás ninguna excepción porque no habrá ninguna que atrapar.- Parámetros
host (Optional[str]) – el nombre de host para escuchar. Establezca este valor a
'0.0.0.0'
para tener el servidor disponible externamente también. Por defecto es'127.0.0.1'
o el host en la variable de configuraciónSERVER_NAME
si está presente.port (Optional[int]) – el puerto del servidor web. Por defecto es
5000
o el puerto definido en la variable de configuraciónSERVER_NAME
si está presente.debug (Optional[bool]) – si se da, activa o desactiva el modo de depuración. Ver
debug
.load_dotenv (bool) – Carga los archivos
.env
y.flaskenv
más cercanos para establecer las variables de entorno. También cambiará el directorio de trabajo al directorio que contenga el primer archivo encontrado.options (Any) – las opciones que deben ser reenviadas al servidor Werkzeug subyacente. Ver
werkzeug.serving.run_simple()
para más información.
- Tipo del valor devuelto
None
Changelog
Distinto en la versión 1.0: Si se instala, python-dotenv se utilizará para cargar las variables de entorno de los archivos
.env
y.flaskenv
.Si se establece, las variables de entorno
FLASK_ENV
yFLASK_DEBUG
anularán aenv
ydebug
.El modo de hilos está activado por defecto.
Distinto en la versión 0.10: El puerto por defecto se elige ahora a partir de la variable
SERVER_NAME
.
- secret_key¶
Si se establece una clave secreta, los componentes criptográficos pueden utilizarla para firmar cookies y otras cosas. Establece esto a un valor aleatorio complejo cuando quieras usar la cookie segura, por ejemplo.
Este atributo también se puede configurar desde la configuración con la clave de configuración
SECRET_KEY
. El valor predeterminado esNone
.
- select_jinja_autoescape(filename)¶
Devuelve
True
si el autoescapado debe estar activo para el nombre de la plantilla dada. Si no se da ningún nombre de plantilla, devuelveTrue
.Changelog
Nuevo en la versión 0.5.
- send_file_max_age_default¶
Un
timedelta
o número de segundos que se utiliza comomax_age
por defecto parasend_file()
. El valor por defecto esNone
, lo que indica al navegador que utilice peticiones condicionales en lugar de una caché temporizada.Configurado con la clave de configuración
SEND_FILE_MAX_AGE_DEFAULT
.Changelog
Distinto en la versión 2.0: Por defecto es
None
en lugar de 12 horas.
- send_static_file(filename)¶
La función de la vista utilizada para servir archivos desde
carpeta_estática
. Se registra automáticamente una ruta para esta vista enstatic_url_path
si se establecestatic_folder
.Changelog
Nuevo en la versión 0.5.
- session_cookie_name¶
La cookie segura utiliza esto para el nombre de la cookie de sesión.
Este atributo también se puede configurar desde la configuración con la clave de configuración
SESSION_COOKIE_NAME
. Por defecto essession
- session_interface: flask.sessions.SessionInterface = <flask.sessions.SecureCookieSessionInterface object>¶
la interfaz de sesión a utilizar. Por defecto se utiliza una instancia de
SecureCookieSessionInterface
.Changelog
Nuevo en la versión 0.8.
- shell_context_processor(f)¶
Registra una función de procesador de contexto del shell.
Changelog
Nuevo en la versión 0.11.
- Parámetros
f (flask.app.T_shell_context_processor) –
- Tipo del valor devuelto
flask.app.T_shell_context_processor
- shell_context_processors: t.List[ft.ShellContextProcessorCallable]¶
Una lista de funciones del procesador de contextos de shell que deben ejecutarse cuando se crea un contexto de shell.
Changelog
Nuevo en la versión 0.11.
- should_ignore_error(error)¶
Se llama para averiguar si un error debe ser ignorado o no en lo que respecta al sistema de desmontaje. Si esta función devuelve
True
, los gestores de desmontaje no recibirán el error.Changelog
Nuevo en la versión 0.10.
- Parámetros
error (Optional[BaseException]) –
- Tipo del valor devuelto
- property static_folder: Optional[str]¶
La ruta absoluta a la carpeta estática configurada.
None
si no se ha configurado ninguna carpeta estática.
- property static_url_path: Optional[str]¶
El prefijo de la URL desde la que se podrá acceder a la ruta estática.
Si no se ha configurado durante el init, se deriva de
static_folder
.
- teardown_appcontext(f)¶
Registra una función que será llamada cuando el contexto de la aplicación sea extraído. El contexto de la aplicación se abre normalmente después del contexto de solicitud de cada petición, al final de los comandos de la CLI, o después de que un contexto empujado manualmente termine.
with app.app_context(): ...
Cuando el bloque
with
sale (o se llama actx.pop()
), las funciones de desmontaje son llamadas justo antes de que el contexto de aplicación se vuelva inactivo. Dado que un contexto de petición normalmente también gestiona un contexto de aplicación, también se llamará cuando se haga desaparecer un contexto de petición.Cuando se llama a una función de desmontaje debido a una excepción no manejada, se le pasa un objeto de error. Si se registra un
errorhandler()
, éste manejará la excepción y el teardown no la recibirá.Las funciones de desmontaje deben evitar lanzar excepciones. Si ejecutan código que puede fallar deben rodear ese código con un bloque
try
/except
y registrar cualquier error.Los valores de retorno de las funciones de desmontaje se ignoran.
Changelog
Nuevo en la versión 0.9.
- Parámetros
f (flask.app.T_teardown) –
- Tipo del valor devuelto
flask.app.T_teardown
- teardown_appcontext_funcs: t.List[ft.TeardownCallable]¶
Una lista de funciones que son llamadas cuando el contexto de la aplicación es destruido. Dado que el contexto de la aplicación también se destruye si la solicitud termina, este es el lugar para almacenar el código que se desconecta de las bases de datos.
Changelog
Nuevo en la versión 0.9.
- teardown_request(f)¶
Registra una función para ser llamada cuando el contexto de la solicitud es empujado. Normalmente, esto ocurre al final de cada solicitud, pero los contextos pueden ser empujados manualmente también durante las pruebas.
with app.test_request_context(): ...
Cuando el bloque
with
sale (o se llama actx.pop()
), las funciones de desmontaje son llamadas justo antes de que el contexto de la petición se vuelva inactivo.Cuando se llama a una función de desmontaje debido a una excepción no manejada, se le pasa un objeto de error. Si se registra un
errorhandler()
, éste manejará la excepción y el teardown no la recibirá.Las funciones de desmontaje deben evitar lanzar excepciones. Si ejecutan código que puede fallar deben rodear ese código con un bloque
try
/except
y registrar cualquier error.Los valores de retorno de las funciones de desmontaje se ignoran.
- Parámetros
f (flask.scaffold.T_teardown) –
- Tipo del valor devuelto
flask.scaffold.T_teardown
- teardown_request_funcs: t.Dict[ft.AppOrBlueprintKey, t.List[ft.TeardownCallable]]¶
Una estructura de datos de funciones para llamar al final de cada solicitud, incluso si se produce una excepción, en el formato
{scope: [funciones]}
. La clavescope
es el nombre de un plano para el que las funciones están activas, oNone
para todas las peticiones.Para registrar una función, utilice el decorador
teardown_request()
.Esta estructura de datos es interna. No debe modificarse directamente y su formato puede cambiar en cualquier momento.
- template_context_processors: t.Dict[ft.AppOrBlueprintKey, t.List[ft.TemplateContextProcessorCallable]]¶
Una estructura de datos de funciones a las que llamar para pasar valores de contexto adicionales al renderizar plantillas, con el formato
{scope: [funciones]}
. La clavescope
es el nombre de un plano para el que las funciones están activas, oNone
para todas las solicitudes.Para registrar una función, utilice el decorador
context_processor()
.Esta estructura de datos es interna. No debe modificarse directamente y su formato puede cambiar en cualquier momento.
- template_filter(name=None)¶
Un decorador que se utiliza para registrar un filtro de plantilla personalizado. Puede especificar un nombre para el filtro, de lo contrario se utilizará el nombre de la función. Ejemplo:
@app.template_filter() def reverse(s): return s[::-1]
- template_folder¶
La ruta a la carpeta de plantillas, relativa a
root_path
, para añadir al cargador de plantillas.None
si no se deben añadir plantillas.
- template_global(name=None)¶
Un decorador que se utiliza para registrar una función global de plantilla personalizada. Puede especificar un nombre para la función global, de lo contrario se utilizará el nombre de la función. Ejemplo:
@app.template_global() def double(n): return 2 * n
Changelog
Nuevo en la versión 0.10.
- template_test(name=None)¶
Un decorador que se utiliza para registrar la prueba de plantilla personalizada. Puede especificar un nombre para la prueba, de lo contrario se utilizará el nombre de la función. Ejemplo:
@app.template_test() def is_prime(n): if n == 2: return True for i in range(2, int(math.ceil(math.sqrt(n))) + 1): if n % i == 0: return False return True
Changelog
Nuevo en la versión 0.10.
- property templates_auto_reload: bool¶
Recarga las plantillas cuando se modifican. Utilizado por
create_jinja_environment()
.Este atributo puede ser configurado con
TEMPLATES_AUTO_RELOAD
. Si no se configura, se habilitará en modo de depuración.Changelog
Nuevo en la versión 1.0: Esta propiedad se añadió pero la configuración y el comportamiento subyacentes ya existían.
- test_cli_runner(**kwargs)¶
Crea un runner CLI para probar los comandos CLI. Ver Ejecución de comandos con el CLI Runner.
Devuelve una instancia de
test_cli_runner_class
, por defectoFlaskCliRunner
. El objeto de la aplicación Flask se pasa como primer argumento.Changelog
Nuevo en la versión 1.0.
- Parámetros
kwargs (Any) –
- Tipo del valor devuelto
- test_cli_runner_class: Optional[Type[FlaskCliRunner]] = None¶
La subclase
CliRunner
, por defectoFlaskCliRunner
que es utilizada portest_cli_runner()
. Su método__init__
debe tomar un objeto de aplicación Flask como primer argumento.Changelog
Nuevo en la versión 1.0.
- test_client(use_cookies=True, **kwargs)¶
Crea un cliente de prueba para esta aplicación. Para obtener información sobre las pruebas unitarias dirígete a Prueba de aplicaciones Flask.
Tenga en cuenta que si está probando aserciones o excepciones en el código de su aplicación, debe establecer
app.testing = True
para que las excepciones se propaguen al cliente de prueba. De lo contrario, la excepción será manejada por la aplicación (no visible para el cliente de prueba) y la única indicación de un AssertionError u otra excepción será una respuesta de código de estado 500 para el cliente de prueba. Véase el atributotesting
. Por ejemplo:app.testing = True client = app.test_client()
El cliente de prueba puede utilizarse en un bloque
with
para aplazar el cierre del contexto hasta el final del bloquewith
. Esto es útil si quieres acceder a los locales del contexto para hacer pruebas:with app.test_client() as c: rv = c.get('/?vodka=42') assert request.args['vodka'] == '42'
Además, puede pasar argumentos opcionales de palabras clave que luego se pasarán al constructor de la aplicación
test_client_class
. Por ejemplo:from flask.testing import FlaskClient class CustomClient(FlaskClient): def __init__(self, *args, **kwargs): self._authentication = kwargs.pop("authentication") super(CustomClient,self).__init__( *args, **kwargs) app.test_client_class = CustomClient client = app.test_client(authentication='Basic ....')
Ver
FlaskClient
para más información.Changelog
Distinto en la versión 0.11: Se ha añadido **kwargs para poder pasar argumentos de palabras clave adicionales al constructor de
test_client_class
.Nuevo en la versión 0.7: Se ha añadido el parámetro use_cookies, así como la posibilidad de anular el cliente que se utilizará estableciendo el atributo
test_client_class
.Distinto en la versión 0.4: se ha añadido soporte para el uso de bloques
with
para el cliente.- Parámetros
- Tipo del valor devuelto
- test_client_class: Optional[Type[FlaskClient]] = None¶
El método
test_client()
crea una instancia de esta clase de cliente de pruebas. Por defecto esFlaskClient
.Changelog
Nuevo en la versión 0.7.
- test_request_context(*args, **kwargs)¶
Crea un
RequestContext
para un entorno WSGI creado a partir de los valores dados. Esto es útil sobre todo durante las pruebas, en las que se puede querer ejecutar una función que utilice datos de solicitud sin enviar una solicitud completa.Véase El contexto de la solicitud.
Utiliza un bloque
with
para empujar el contexto, lo que hará querequest
apunte a la solicitud del entorno creado.with test_request_context(...): generate_report()
Cuando se utiliza el intérprete de comandos, puede ser más fácil de empujar y saltar el contexto manualmente para evitar la indentación
ctx = app.test_request_context(...) ctx.push() ... ctx.pop()
Toma los mismos argumentos que el
EnvironBuilder
de Werkzeug, con algunos valores por defecto de la aplicación. Consulte la documentación de Werkzeug para conocer la mayoría de los argumentos disponibles. El comportamiento específico de Flask está listado aquí.- Parámetros
path – Ruta de la URL solicitada.
base_url – URL base donde se sirve la aplicación, a la que
path
es relativa. Si no se da, se construye a partir dePREFERRED_URL_SCHEME
,subdomain
,SERVER_NAME
, yAPPLICATION_ROOT
.subdomain – Nombre del subdominio a añadir a
SERVER_NAME
.url_scheme – Esquema a utilizar en lugar de
PREFERRED_URL_SCHEME
.data – El cuerpo de la solicitud, ya sea una cadena o un dictado de claves y valores del formulario.
json – Si se da, se serializa como JSON y se pasa como
data
. Además, el tipo de contenido por defecto esapplication/json
.args (Any) – otros argumentos posicionales pasados a
EnvironBuilder
.kwargs (Any) – otros argumentos de palabra clave pasados a
EnvironBuilder
.
- Tipo del valor devuelto
- testing¶
La bandera de prueba. Establece esto como
True
para activar el modo de prueba de las extensiones de Flask (y en el futuro probablemente también el propio Flask). Por ejemplo, esto podría activar los ayudantes de prueba que tienen un coste de tiempo de ejecución adicional que no debería estar habilitado por defecto.Si se habilita y no se cambia PROPAGATE_EXCEPTIONS del valor por defecto, se habilita implícitamente.
Este atributo también se puede configurar desde la configuración con la clave de configuración
TESTING
. El valor predeterminado esFalse
.
- trap_http_exception(e)¶
Comprueba si una excepción HTTP debe ser atrapada o no. Por defecto devuelve
False
para todas las excepciones excepto para un error de clave de petición siTRAP_BAD_REQUEST_ERRORS
se establece comoTrue
. También devuelveTrue
siTRAP_HTTP_EXCEPTIONS
esTrue
.Se llama para todas las excepciones HTTP lanzadas por una función de la vista. Si devuelve
True
para cualquier excepción, el manejador de errores para esta excepción no es llamado y se muestra como una excepción regular en el rastreo. Esto es útil para depurar excepciones HTTP implícitas.Changelog
Distinto en la versión 1.0: Los errores de peticiones malas no se atrapan por defecto en el modo de depuración.
Nuevo en la versión 0.8.
- update_template_context(context)¶
Actualiza el contexto de la plantilla con algunas variables de uso común. Esto inyecta request, session, config y g en el contexto de la plantilla, así como todo lo que los procesadores de contexto de la plantilla quieran inyectar. Ten en cuenta que a partir de Flask 0.6, los valores originales del contexto no serán anulados si un procesador de contexto decide devolver un valor con la misma clave.
- Parámetros
context (dict) – el contexto como un diccionario que se actualiza en el lugar para añadir variables adicionales.
- Tipo del valor devuelto
None
- url_build_error_handlers: t.List[t.Callable[[Exception, str, t.Dict[str, t.Any]], str]]¶
Una lista de funciones que son llamadas por
handle_url_build_error()
cuandourl_for()
genera unBuildError
. Cada función es llamada conerror
,endpoint
yvalues
. Si una función devuelveNone
o genera unBuildError
, se omite. De lo contrario, su valor de retorno es devuelto porurl_for
.Changelog
Nuevo en la versión 0.9.
- url_default_functions: t.Dict[ft.AppOrBlueprintKey, t.List[ft.URLDefaultCallable]]¶
Una estructura de datos de funciones a las que llamar para modificar los argumentos de las palabras clave al generar las URL, con el formato
{scope: [funciones]}
. La clavescope
es el nombre de un plano para el que las funciones están activas, oNone
para todas las solicitudes.Para registrar una función, utilice el decorador
url_defaults()
.Esta estructura de datos es interna. No debe modificarse directamente y su formato puede cambiar en cualquier momento.
- url_defaults(f)¶
Función de devolución de llamada para los valores predeterminados de la URL para todas las funciones de vista de la aplicación. Se llama con el endpoint y los valores y debe actualizar los valores pasados en su lugar.
- Parámetros
f (flask.scaffold.T_url_defaults) –
- Tipo del valor devuelto
flask.scaffold.T_url_defaults
- url_for(endpoint, *, _anchor=None, _method=None, _scheme=None, _external=None, **values)¶
Genera una URL al endpoint dado con los valores indicados.
Esto es llamado por
flask.url_for()
, y puede ser llamado directamente también.Un endpoint es el nombre de una regla de URL, normalmente añadida con
@app.route()
, y normalmente el mismo nombre que la función de la vista. Una ruta definida en unBlueprint
antepondrá el nombre del blueprint separado por un.
al endpoint.En algunos casos, como en los mensajes de correo electrónico, quieres que las URLs incluyan el esquema y el dominio, como
https://example.com/hello
. Cuando no está en una petición activa, las URLs serán externas por defecto, pero esto requiere configurarSERVER_NAME
para que Flask sepa qué dominio usar.APPLICATION_ROOT
yPREFERRED_URL_SCHEME
también deben configurarse según sea necesario. Esta configuración sólo se utiliza cuando no está en una solicitud activa.Las funciones pueden ser decoradas con
url_defaults()
para modificar los argumentos de las palabras clave antes de construir la URL.Si la construcción falla por alguna razón, como un punto final desconocido o valores incorrectos, se llama al método
handle_url_build_error()
de la aplicación. Si devuelve una cadena, se devuelve, de lo contrario se lanza unBuildError
.- Parámetros
endpoint (str) – El nombre del endpoint asociado a la URL a generar. Si empieza por
.
, se utilizará el nombre del plano actual (si lo hay)._anchor (Optional[str]) – Si se proporciona, se añade como
#anchor
a la URL._method (Optional[str]) – Si se da, genera la URL asociada a este método para el punto final.
_scheme (Optional[str]) – Si se da, la URL tendrá este esquema si es externa.
_external (Optional[bool]) – Si se da, prefiere que la URL sea interna (False) o requiere que sea externa (True). Las URLs externas incluyen el esquema y el dominio. Cuando no están en una solicitud activa, las URL son externas por defecto.
values (Any) – Valores a utilizar para las partes variables de la regla URL. Las claves desconocidas se añaden como argumentos de la cadena de consulta, como
?a=b&c=d
.
- Tipo del valor devuelto
Nuevo en la versión 2.2: Movido de
flask.url_for
, que llama a este método.
- url_map¶
La
Map
para esta instancia. Se puede utilizar para cambiar los convertidores de enrutamiento después de la creación de la clase pero antes de que se conecte ninguna ruta. Ejemplo:from werkzeug.routing import BaseConverter class ListConverter(BaseConverter): def to_python(self, value): return value.split(',') def to_url(self, values): return ','.join(super(ListConverter, self).to_url(value) for value in values) app = Flask(__name__) app.url_map.converters['list'] = ListConverter
- url_map_class¶
alias of
werkzeug.routing.map.Map
- url_rule_class¶
alias of
werkzeug.routing.rules.Rule
- url_value_preprocessor(f)¶
Registrar una función de preprocesador de valores de URL para todas las funciones de vista en la aplicación. Estas funciones serán llamadas antes de las funciones
before_request()
.La función puede modificar los valores capturados de la url coincidente antes de pasarlos a la vista. Por ejemplo, se puede utilizar para hacer saltar un valor de código de lenguaje común y colocarlo en
g
en lugar de pasarlo a cada vista.A la función se le pasa el nombre del endpoint y el dictado de valores. El valor de retorno se ignora.
- Parámetros
f (flask.scaffold.T_url_value_preprocessor) –
- Tipo del valor devuelto
flask.scaffold.T_url_value_preprocessor
- url_value_preprocessors: t.Dict[ft.AppOrBlueprintKey, t.List[ft.URLValuePreprocessorCallable]]¶
Una estructura de datos de funciones a las que llamar para modificar los argumentos de palabras clave pasados a la función de vista, con el formato
{scope: [functions]}
. La clavescope
es el nombre de un plano para el que las funciones están activas, oNone
para todas las solicitudes.Para registrar una función, utilice el decorador
url_value_preprocessor()
.Esta estructura de datos es interna. No debe modificarse directamente y su formato puede cambiar en cualquier momento.
- use_x_sendfile¶
Active esta opción si desea utilizar la función X-Sendfile. Tenga en cuenta que el servidor tiene que soportar esto. Esto sólo afecta a los archivos enviados con el método
send_file()
.Changelog
Nuevo en la versión 0.2.
Este atributo también se puede configurar desde la configuración con la clave de configuración
USE_X_SENDFILE
. Por defecto esFalse
.
- view_functions: t.Dict[str, t.Callable]¶
Un diccionario que asigna los nombres de los endpoints a las funciones de la vista.
Para registrar una función de vista, utilice el decorador
route()
.Esta estructura de datos es interna. No debe modificarse directamente y su formato puede cambiar en cualquier momento.
- wsgi_app(environ, start_response)¶
La aplicación WSGI real. Esto no está implementado en
__call__()
para que los middlewares puedan ser aplicados sin perder una referencia al objeto app. En lugar de hacer esto:app = MyMiddleware(app)
Es mejor hacer esto en su lugar:
app.wsgi_app = MyMiddleware(app.wsgi_app)
Entonces todavía tienes el objeto original de la aplicación y puedes seguir llamando a los métodos en él.
Changelog
Distinto en la versión 0.7: Los eventos de desmontaje para los contextos de solicitud y de aplicación se llaman incluso si se produce un error no manejado. Otros eventos pueden no ser llamados dependiendo de cuándo se produzca un error durante el despacho. Véase Callbacks y errores.
Objetos Blueprint¶
- class flask.Blueprint(name, import_name, static_folder=None, static_url_path=None, template_folder=None, url_prefix=None, subdomain=None, url_defaults=None, root_path=None, cli_group=<object object>)¶
Representa un blueprint, una colección de rutas y otras funciones relacionadas con la aplicación que pueden ser registradas en una aplicación real más tarde.
Un blueprint es un objeto que permite definir las funciones de la aplicación sin requerir un objeto de aplicación por adelantado. Utiliza los mismos decoradores que
Flask
, pero aplaza la necesidad de una aplicación registrándolos para su posterior registro.Al decorar una función con un blueprint se crea una función diferida que se llama con
BlueprintSetupState
cuando el blueprint se registra en una aplicación.Consulte Aplicaciones modulares con Blueprints para más información.
- Parámetros
name (str) – El nombre del blueprint. Se antepondrá a cada nombre de endpoint.
import_name (str) – El nombre del paquete del blueprint, normalmente
__name__
. Esto ayuda a localizar elroot_path
para el blueprint.static_folder (Optional[Union[str, os.PathLike]]) – Una carpeta con archivos estáticos que deben ser servidos por la ruta estática del blueprint. La ruta es relativa a la ruta raíz del blueprint. Los archivos estáticos del blueprint están desactivados por defecto.
static_url_path (Optional[str]) – La url desde la que se sirven los archivos estáticos. Por defecto es
static_folder
. Si el blueprint no tiene unurl_prefix
, la ruta estática de la aplicación tendrá prioridad, y los archivos estáticos del blueprint no serán accesibles.template_folder (Optional[str]) – Una carpeta con plantillas que debe añadirse a la ruta de búsqueda de plantillas de la aplicación. La ruta es relativa a la ruta raíz del blueprint. Las plantillas de blueprint están desactivadas por defecto. Las plantillas de blueprint tienen una precedencia menor que las de la carpeta de plantillas de la app.
url_prefix (Optional[str]) – Una ruta que se añade a todas las URL del blueprint, para distinguirlas del resto de las rutas de la aplicación.
subdomain (Optional[str]) – Un subdominio en el que las rutas blueprint coincidirán por defecto.
url_defaults (Optional[dict]) – Un diccionario de valores por defecto que las rutas de blueprint recibirán por defecto.
root_path (Optional[str]) – Por defecto, el blueprint lo establecerá automáticamente basándose en
import_name
. En ciertas situaciones esta detección automática puede fallar, por lo que la ruta puede ser especificada manualmente en su lugar.cli_group (Optional[str]) – El nombre del grupo CLI del blueprint. Si no se establece, se utilizará el nombre del plano.
Changelog
Distinto en la versión 1.1.0: Los blueprints tienen un grupo
cli
para registrar los comandos CLI anidados. El parámetrocli_group
controla el nombre del grupo bajo el comandoflask
.Nuevo en la versión 0.7.
- add_app_template_filter(f, name=None)¶
Registra un filtro de plantilla personalizado, disponible en toda la aplicación. Como
Flask.add_template_filter()
pero para un blueprint. Funciona exactamente igual que el decoradorapp_template_filter()
.
- add_app_template_global(f, name=None)¶
Registrar una plantilla personalizada global, disponible en toda la aplicación. Como
Flask.add_template_global()
pero para un blueprint. Funciona exactamente igual que el decoradorapp_template_global()
.Changelog
Nuevo en la versión 0.10.
- add_app_template_test(f, name=None)¶
Registra una prueba de plantilla personalizada, disponible en toda la aplicación. Como
Flask.add_template_test()
pero para un blueprint. Funciona exactamente igual que el decoradorapp_template_test()
.Changelog
Nuevo en la versión 0.10.
- add_url_rule(rule, endpoint=None, view_func=None, provide_automatic_options=None, **options)¶
Como
Flask.add_url_rule()
pero para un blueprint. El endpoint de la funciónurl_for()
lleva como prefijo el nombre del blueprint.- Parámetros
rule (str) –
view_func (Optional[Union[Callable[[...], Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, ...]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], int], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], int, Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, ...]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], WSGIApplication]], Callable[[...], Awaitable[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, ...]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], int], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], int, Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, ...]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], WSGIApplication]]]]]) –
options (Any) –
- Tipo del valor devuelto
None
- after_app_request(f)¶
Como
Flask.after_request()
pero para un blueprint. Dicha función se ejecuta después de cada petición, incluso si está fuera del blueprint.- Parámetros
f (flask.blueprints.T_after_request) –
- Tipo del valor devuelto
flask.blueprints.T_after_request
- after_request(f)¶
Registrar una función que se ejecute después de cada petición a este objeto.
La función se llama con el objeto response, y debe devolver un objeto response. Esto permite que las funciones modifiquen o sustituyan la respuesta antes de ser enviada.
Si una función lanza una excepción, cualquier función
after_request
restante no será llamada. Por lo tanto, esto no debe ser utilizado para las acciones que deben ejecutarse, como para cerrar los recursos. Utiliceteardown_request()
para eso.- Parámetros
f (flask.scaffold.T_after_request) –
- Tipo del valor devuelto
flask.scaffold.T_after_request
- after_request_funcs: t.Dict[ft.AppOrBlueprintKey, t.List[ft.AfterRequestCallable]]¶
Una estructura de datos de funciones a llamar al final de cada solicitud, con el formato
{scope: [functions]}
. La clavescope
es el nombre de un blueprint para el que las funciones están activas, oNone
para todas las peticiones.Para registrar una función, utilice el decorador
after_request()
.Esta estructura de datos es interna. No debe modificarse directamente y su formato puede cambiar en cualquier momento.
- app_context_processor(f)¶
Como
Flask.context_processor()
pero para un blueprint. Dicha función se ejecuta en cada petición, incluso si está fuera del blueprint.- Parámetros
f (flask.blueprints.T_template_context_processor) –
- Tipo del valor devuelto
flask.blueprints.T_template_context_processor
- app_errorhandler(code)¶
Como
Flask.errorhandler()
pero para un blueprint. Este manejador se utiliza para todas las solicitudes, incluso si están fuera del blueprint.
- app_template_filter(name=None)¶
Registra un filtro de plantilla personalizado, disponible en toda la aplicación. Como
Flask.template_filter()
pero para un blueprint.
- app_template_global(name=None)¶
Registrar una plantilla personalizada global, disponible en toda la aplicación. Como
Flask.template_global()
pero para un blueprint.Changelog
Nuevo en la versión 0.10.
- app_template_test(name=None)¶
Registra una prueba de plantilla personalizada, disponible en toda la aplicación. Como
Flask.template_test()
pero para un blueprint.Changelog
Nuevo en la versión 0.10.
- app_url_defaults(f)¶
Igual que
url_defaults()
pero en toda la aplicación.- Parámetros
f (flask.blueprints.T_url_defaults) –
- Tipo del valor devuelto
flask.blueprints.T_url_defaults
- app_url_value_preprocessor(f)¶
Igual que
url_value_preprocessor()
pero en toda la aplicación.- Parámetros
f (flask.blueprints.T_url_value_preprocessor) –
- Tipo del valor devuelto
flask.blueprints.T_url_value_preprocessor
- before_app_first_request(f)¶
Como
Flask.before_first_request()
. Dicha función se ejecuta antes de la primera petición a la aplicación.Obsoleto desde la versión 2.2: Se eliminará en Flask 2.3. Ejecute el código de configuración al crear la aplicación en su lugar.
- Parámetros
f (flask.blueprints.T_before_first_request) –
- Tipo del valor devuelto
flask.blueprints.T_before_first_request
- before_app_request(f)¶
Como
Flask.before_request()
. Esta función se ejecuta antes de cada solicitud, incluso si está fuera de un blueprint.- Parámetros
f (flask.blueprints.T_before_request) –
- Tipo del valor devuelto
flask.blueprints.T_before_request
- before_request(f)¶
Registrar una función para ejecutar antes de cada solicitud.
Por ejemplo, esto se puede utilizar para abrir una conexión a la base de datos, o para cargar el usuario conectado desde la sesión.
@app.before_request def load_user(): if "user_id" in session: g.user = db.session.get(session["user_id"])
La función será llamada sin ningún argumento. Si devuelve un valor que no sea
None
, el valor se maneja como si fuera el valor de retorno de la vista, y se detiene el manejo de la solicitud.- Parámetros
f (flask.scaffold.T_before_request) –
- Tipo del valor devuelto
flask.scaffold.T_before_request
- before_request_funcs: t.Dict[ft.AppOrBlueprintKey, t.List[ft.BeforeRequestCallable]]¶
Una estructura de datos de funciones a llamar al principio de cada petición, con el formato
{scope: [functions]}
. La clavescope
es el nombre de un plano para el que las funciones están activas, oNone
para todas las peticiones.Para registrar una función, utilice el decorador
before_request()
.Esta estructura de datos es interna. No debe modificarse directamente y su formato puede cambiar en cualquier momento.
- cli¶
El grupo de comandos Click para registrar los comandos CLI para este objeto. Los comandos están disponibles desde el comando
flask
una vez que se ha descubierto la aplicación y se han registrado los blueprints.
- context_processor(f)¶
Registra una función de procesador de contexto de plantilla.
- Parámetros
f (flask.scaffold.T_template_context_processor) –
- Tipo del valor devuelto
flask.scaffold.T_template_context_processor
- delete(rule, **options)¶
Acceso directo a
route()
conmethods=["DELETE"]
.Changelog
Nuevo en la versión 2.0.
- endpoint(endpoint)¶
Decora una función de vista para registrarla para el punto final dado. Se utiliza si se añade una regla sin una
view_func
conadd_url_rule()
.app.add_url_rule("/ex", endpoint="example") @app.endpoint("example") def example(): ...
- error_handler_spec: t.Dict[ft.AppOrBlueprintKey, t.Dict[t.Optional[int], t.Dict[t.Type[Exception], ft.ErrorHandlerCallable]]]¶
Una estructura de datos de los gestores de errores registrados, con el formato
scope: {code: {class: handler}}
. La clavescope
es el nombre de un plano para el que los manejadores están activos, oNone
para todas las peticiones. La clavecode
es el código de estado HTTP paraHTTPException
, oNone
para otras excepciones. El diccionario más interno asigna las clases de excepción a las funciones de los manejadores.Para registrar un manejador de errores, utilice el decorador
errorhandler()
.Esta estructura de datos es interna. No debe modificarse directamente y su formato puede cambiar en cualquier momento.
- errorhandler(code_or_exception)¶
Registrar una función para manejar errores por código o clase de excepción.
Un decorador que se utiliza para registrar una función dado un código de error. Ejemplo:
@app.errorhandler(404) def page_not_found(error): return 'This page does not exist', 404
También puedes registrar manejadores para excepciones arbitrarias:
@app.errorhandler(DatabaseError) def special_exception_handler(error): return 'Database connection failed', 500
Changelog
Nuevo en la versión 0.7: Utilice
register_error_handler()
en lugar de modificarerror_handler_spec
directamente, para los manejadores de error de toda la aplicación.Nuevo en la versión 0.7: Ahora también se pueden registrar tipos de excepción personalizados que no necesariamente tienen que ser una subclase de la clase
HTTPException
.
- get(rule, **options)¶
Acceso directo a
route()
conmethods=["GET"]
.Changelog
Nuevo en la versión 2.0.
- get_send_file_max_age(filename)¶
Utilizado por
send_file()
para determinar el valor de la cachémax_age
para una ruta de archivo dada si no se ha pasado.Por defecto, esto devuelve
SEND_FILE_MAX_AGE_DEFAULT
de la configuración decurrent_app
. Este valor por defecto esNone
, lo que indica al navegador que utilice peticiones condicionales en lugar de una caché temporizada, lo que suele ser preferible.Changelog
Distinto en la versión 2.0: La configuración por defecto es
None
en lugar de 12 horas.Nuevo en la versión 0.9.
- property has_static_folder: bool¶
True
sistatic_folder
está establecido.Changelog
Nuevo en la versión 0.5.
- import_name¶
El nombre del paquete o módulo al que pertenece este objeto. No lo cambie una vez que lo haya establecido el constructor.
- property jinja_loader: Optional[jinja2.loaders.FileSystemLoader]¶
El cargador de Jinja para las plantillas de este objeto. Por defecto es una clase
jinja2.loaders.FileSystemLoader
atemplate_folder
si se establece.Changelog
Nuevo en la versión 0.5.
- json_decoder: t.Optional[t.Type[JSONDecoder]] = None¶
Clase de decodificador JSON local del blueprint a utilizar. Establezca
None
para utilizar lajson_decoder
de la aplicación.
- json_encoder: t.Optional[t.Type[JSONEncoder]] = None¶
Clase de codificador JSON local del blueprint a utilizar. Establezca
None
para utilizar lajson_encoder
de la aplicación.
- make_setup_state(app, options, first_registration=False)¶
Crea una instancia del objeto
BlueprintSetupState()
que luego se pasa a las funciones de callback de registro. Las subclases pueden anular esto para devolver una subclase del estado de configuración.- Parámetros
- Tipo del valor devuelto
- open_resource(resource, mode='rb')¶
Abre un archivo de recursos relativo a
root_path
para su lectura.Por ejemplo, si el archivo
schema.sql
está junto al archivoapp.py
donde está definida la aplicaciónFlask
, se puede abrir con:with app.open_resource("schema.sql") as f: conn.executescript(f.read())
- patch(rule, **options)¶
Acceso directo a
route()
conmethods=["PATCH"]
.Changelog
Nuevo en la versión 2.0.
- post(rule, **options)¶
Acceso directo a
route()
conmethods=["POST"]
.Changelog
Nuevo en la versión 2.0.
- put(rule, **options)¶
Acceso directo a
route()
conmethods=["PUT"]
.Changelog
Nuevo en la versión 2.0.
- record(func)¶
Registra una función que es llamada cuando el blueprint es registrado en la aplicación. Esta función se llama con el estado como argumento devuelto por el método
make_setup_state()
.- Parámetros
func (Callable) –
- Tipo del valor devuelto
None
- record_once(func)¶
Funciona como
record()
pero envuelve la función en otra función que asegurará que la función sólo se llame una vez. Si el blueprint se registra una segunda vez en la aplicación, la función pasada no se llama.- Parámetros
func (Callable) –
- Tipo del valor devuelto
None
- register(app, options)¶
Llamado por
Flask.register_blueprint()
para registrar todas las vistas y callbacks registrados en el blueprint con la aplicación. Crea unBlueprintSetupState
y llama a cada callbackrecord()
con él.- Parámetros
app (Flask) – La aplicación con la que se registra este blueprint.
options (dict) – Argumentos de la palabra clave reenviados desde
register_blueprint()
.
- Tipo del valor devuelto
None
Changelog
Distinto en la versión 2.0.1: Los blueprints anidados se registran con su nombre punteado. Esto permite anidar diferentes blueprints con el mismo nombre en diferentes lugares.
Distinto en la versión 2.0.1: La opción
name
se puede utilizar para cambiar el nombre (pre-punteado) con el que se registra el blueprint. Esto permite registrar el mismo plano varias veces con nombres únicos paraurl_for
.Distinto en la versión 2.0.1: Registrar el mismo blueprint con el mismo nombre varias veces está obsoleto y será un error en Flask 2.1.
- register_blueprint(blueprint, **options)¶
Registra una
Blueprint
en este blueprint. Los argumentos de palabras clave pasados a este método anulan los valores predeterminados establecidos en el blueprint.Changelog
Distinto en la versión 2.0.1: La opción
name
se puede utilizar para cambiar el nombre (pre-punteado) con el que se registra el blueprint. Esto permite registrar el mismo plano varias veces con nombres únicos paraurl_for
.Nuevo en la versión 2.0.
- Parámetros
blueprint (flask.blueprints.Blueprint) –
options (Any) –
- Tipo del valor devuelto
None
- register_error_handler(code_or_exception, f)¶
Función alternativa de adición de errores al decorador
errorhandler()
que es más sencilla de utilizar para el uso de no decoradores.Changelog
Nuevo en la versión 0.7.
- Parámetros
f (Callable[[Any], Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, ...]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], int], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], int, Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, ...]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], WSGIApplication]]) –
- Tipo del valor devuelto
None
- root_path¶
Ruta absoluta del paquete en el sistema de archivos. Se utiliza para buscar los recursos contenidos en el paquete.
- route(rule, **options)¶
Decora una función de la vista para registrarla con la regla de URL y las opciones dadas. Llama a
add_url_rule()
, que tiene más detalles sobre la implementación.@app.route("/") def index(): return "Hello, World!"
Véase Registros de rutas URL.
El nombre del endpoint de la ruta es por defecto el nombre de la función de la vista si no se pasa el parámetro
endpoint
.El parámetro
methods
es por defecto["GET"]
. Los parámetrosHEAD
yOPTIONS
se añaden automáticamente.
- send_static_file(filename)¶
La función de la vista utilizada para servir archivos desde
carpeta_estática
. Se registra automáticamente una ruta para esta vista enstatic_url_path
si se establecestatic_folder
.Changelog
Nuevo en la versión 0.5.
- property static_folder: Optional[str]¶
La ruta absoluta a la carpeta estática configurada.
None
si no se ha configurado ninguna carpeta estática.
- property static_url_path: Optional[str]¶
El prefijo de la URL desde la que se podrá acceder a la ruta estática.
Si no se ha configurado durante el init, se deriva de
static_folder
.
- teardown_app_request(f)¶
Como
Flask.teardown_request()
pero para un blueprint. Dicha función se ejecuta al derribar cada solicitud, incluso si está fuera del blueprint.- Parámetros
f (flask.blueprints.T_teardown) –
- Tipo del valor devuelto
flask.blueprints.T_teardown
- teardown_request(f)¶
Registra una función para ser llamada cuando el contexto de la solicitud es empujado. Normalmente, esto ocurre al final de cada solicitud, pero los contextos pueden ser empujados manualmente también durante las pruebas.
with app.test_request_context(): ...
Cuando el bloque
with
sale (o se llama actx.pop()
), las funciones de desmontaje son llamadas justo antes de que el contexto de la petición se vuelva inactivo.Cuando se llama a una función de desmontaje debido a una excepción no manejada, se le pasa un objeto de error. Si se registra un
errorhandler()
, éste manejará la excepción y el teardown no la recibirá.Las funciones de desmontaje deben evitar lanzar excepciones. Si ejecutan código que puede fallar deben rodear ese código con un bloque
try
/except
y registrar cualquier error.Los valores de retorno de las funciones de desmontaje se ignoran.
- Parámetros
f (flask.scaffold.T_teardown) –
- Tipo del valor devuelto
flask.scaffold.T_teardown
- teardown_request_funcs: t.Dict[ft.AppOrBlueprintKey, t.List[ft.TeardownCallable]]¶
Una estructura de datos de funciones para llamar al final de cada solicitud, incluso si se produce una excepción, en el formato
{scope: [funciones]}
. La clavescope
es el nombre de un plano para el que las funciones están activas, oNone
para todas las peticiones.Para registrar una función, utilice el decorador
teardown_request()
.Esta estructura de datos es interna. No debe modificarse directamente y su formato puede cambiar en cualquier momento.
- template_context_processors: t.Dict[ft.AppOrBlueprintKey, t.List[ft.TemplateContextProcessorCallable]]¶
Una estructura de datos de funciones a las que llamar para pasar valores de contexto adicionales al renderizar plantillas, con el formato
{scope: [funciones]}
. La clavescope
es el nombre de un plano para el que las funciones están activas, oNone
para todas las solicitudes.Para registrar una función, utilice el decorador
context_processor()
.Esta estructura de datos es interna. No debe modificarse directamente y su formato puede cambiar en cualquier momento.
- template_folder¶
La ruta a la carpeta de plantillas, relativa a
root_path
, para añadir al cargador de plantillas.None
si no se deben añadir plantillas.
- url_default_functions: t.Dict[ft.AppOrBlueprintKey, t.List[ft.URLDefaultCallable]]¶
Una estructura de datos de funciones a las que llamar para modificar los argumentos de las palabras clave al generar las URL, con el formato
{scope: [funciones]}
. La clavescope
es el nombre de un plano para el que las funciones están activas, oNone
para todas las solicitudes.Para registrar una función, utilice el decorador
url_defaults()
.Esta estructura de datos es interna. No debe modificarse directamente y su formato puede cambiar en cualquier momento.
- url_defaults(f)¶
Función de devolución de llamada para los valores predeterminados de la URL para todas las funciones de vista de la aplicación. Se llama con el endpoint y los valores y debe actualizar los valores pasados en su lugar.
- Parámetros
f (flask.scaffold.T_url_defaults) –
- Tipo del valor devuelto
flask.scaffold.T_url_defaults
- url_value_preprocessor(f)¶
Registrar una función de preprocesador de valores de URL para todas las funciones de vista en la aplicación. Estas funciones serán llamadas antes de las funciones
before_request()
.La función puede modificar los valores capturados de la url coincidente antes de pasarlos a la vista. Por ejemplo, se puede utilizar para hacer saltar un valor de código de lenguaje común y colocarlo en
g
en lugar de pasarlo a cada vista.A la función se le pasa el nombre del endpoint y el dictado de valores. El valor de retorno se ignora.
- Parámetros
f (flask.scaffold.T_url_value_preprocessor) –
- Tipo del valor devuelto
flask.scaffold.T_url_value_preprocessor
- url_value_preprocessors: t.Dict[ft.AppOrBlueprintKey, t.List[ft.URLValuePreprocessorCallable]]¶
Una estructura de datos de funciones a las que llamar para modificar los argumentos de palabras clave pasados a la función de vista, con el formato
{scope: [functions]}
. La clavescope
es el nombre de un plano para el que las funciones están activas, oNone
para todas las solicitudes.Para registrar una función, utilice el decorador
url_value_preprocessor()
.Esta estructura de datos es interna. No debe modificarse directamente y su formato puede cambiar en cualquier momento.
- view_functions: t.Dict[str, t.Callable]¶
Un diccionario que asigna los nombres de los endpoints a las funciones de la vista.
Para registrar una función de vista, utilice el decorador
route()
.Esta estructura de datos es interna. No debe modificarse directamente y su formato puede cambiar en cualquier momento.
Datos de la solicitud entrante¶
- class flask.Request(environ, populate_request=True, shallow=False)¶
El objeto de solicitud utilizado por defecto en Flask. Recuerda el endpoint coincidente y los argumentos de la vista.
Es lo que termina como
request
. Si quieres reemplazar el objeto request usado puedes subclasificar esto y establecerrequest_class
a tu subclase.El objeto request es una subclase
Request
y proporciona todos los atributos que define Werkzeug más algunos específicos de Flask.- Parámetros
- Tipo del valor devuelto
None
- property accept_charsets: werkzeug.datastructures.CharsetAccept¶
Lista de conjuntos de caracteres que soporta este cliente como objeto
CharsetAccept
.
- property accept_encodings: werkzeug.datastructures.Accept¶
Lista de codificaciones que acepta este cliente. Las codificaciones en un término HTTP son codificaciones de compresión como gzip. Para los conjuntos de caracteres, consulte
accept_charset
.
- property accept_languages: werkzeug.datastructures.LanguageAccept¶
Lista de idiomas que este cliente acepta como objeto
LanguageAccept
.
- property accept_mimetypes: werkzeug.datastructures.MIMEAccept¶
Lista de mimetypes que este cliente soporta como objeto
MIMEAccept
.
- access_control_request_headers¶
Se envía con una solicitud de verificación previa para indicar qué cabeceras se enviarán con la solicitud de origen cruzado. Establece
access_control_allow_headers
en la respuesta para indicar qué cabeceras están permitidas.
- access_control_request_method¶
Enviado con una solicitud de preflight para indicar qué método se utilizará para la solicitud de origen cruzado. Establece
access_control_allow_methods
en la respuesta para indicar qué métodos están permitidos.
- property access_route: List[str]¶
Si existe una cabecera de reenvío esta es una lista de todas las direcciones ip desde la ip del cliente hasta el último servidor proxy.
- classmethod application(f)¶
Decora una función como respondedor que acepta la petición como último argumento. Esto funciona como el decorador
responder()
pero a la función se le pasa el objeto request como último argumento y el objeto request se cerrará automáticamente:@Request.application def my_wsgi_app(request): return Response('Hello World!')
A partir de Werkzeug 0.14 las excepciones HTTP se capturan automáticamente y se convierten en respuestas en lugar de fallar.
- property args: werkzeug.datastructures.MultiDict[str, str]¶
Los parámetros de la URL analizados (la parte de la URL después del signo de interrogación).
Por defecto, esta función devuelve una
ImmutableMultiDict
. Esto puede cambiarse estableciendoparameter_storage_class
a un tipo diferente. Esto puede ser necesario si el orden de los datos del formulario es importante.
- property authorization: Optional[werkzeug.datastructures.Authorization]¶
El objeto Authorization en forma analizada.
- property blueprint: Optional[str]¶
El nombre registrado del blueprint actual.
Será
None
si el endpoint no forma parte de un blueprint, o si la coincidencia de la URL ha fallado o no se ha realizado todavía.Esto no coincide necesariamente con el nombre con el que se creó el blueprint. Puede haber sido anidado o registrado con un nombre diferente.
- property blueprints: List[str]¶
Los nombres registrados del blueprint actual hacia arriba a través de los blueprints padre.
Será una lista vacía si no hay ningún blueprint actual, o si la coincidencia de URLs ha fallado.
Changelog
Nuevo en la versión 2.0.1.
- property cache_control: werkzeug.datastructures.RequestCacheControl¶
Un objeto
RequestCacheControl
para las cabeceras de control de caché entrantes.
- close()¶
Cierra los recursos asociados a este objeto de petición. Esto cierra todos los manejadores de archivo explícitamente. También puede utilizar el objeto request en una sentencia with que lo cerrará automáticamente.
Changelog
Nuevo en la versión 0.9.
- Tipo del valor devuelto
None
- content_encoding¶
El campo de cabecera de entidad Content-Encoding se utiliza como modificador del tipo de medio. Cuando está presente, su valor indica qué codificaciones de contenido adicionales se han aplicado al cuerpo de la entidad y, por tanto, qué mecanismos de descodificación deben aplicarse para obtener el tipo de medio al que se refiere el campo de cabecera Content-Type.
Changelog
Nuevo en la versión 0.9.
- property content_length: Optional[int]¶
El campo Content-Length de la cabecera de la entidad indica el tamaño del cuerpo de la entidad en bytes o, en el caso del método HEAD, el tamaño del cuerpo de la entidad que se habría enviado si la solicitud hubiera sido un GET.
- content_md5¶
El campo de cabecera de entidad Content-MD5, tal y como se define en el RFC 1864, es un compendio MD5 del cuerpo de la entidad con el fin de proporcionar una comprobación de integridad del mensaje de extremo a extremo (MIC) del cuerpo de la entidad. (Nota: un MIC es bueno para detectar modificaciones accidentales del cuerpo de la entidad en tránsito, pero no es a prueba de ataques maliciosos).
Changelog
Nuevo en la versión 0.9.
- content_type¶
El campo Content-Type de la cabecera de la entidad indica el tipo de medio del cuerpo de la entidad enviado al destinatario o, en el caso del método HEAD, el tipo de medio que se habría enviado si la solicitud hubiera sido un GET.
- property cookies: werkzeug.datastructures.ImmutableMultiDict[str, str]¶
Un
dict
con el contenido de todas las cookies transmitidas con la solicitud.
- property data: bytes¶
Contiene los datos de la solicitud entrante como cadena en caso de que venga con un mimetype que Werkzeug no maneja.
- date¶
El campo de cabecera general Date representa la fecha y hora en la que se originó el mensaje, teniendo la misma semántica que orig-date en RFC 822.
Changelog
Distinto en la versión 2.0: El objeto datetime tiene en cuenta la zona horaria.
- dict_storage_class¶
- property endpoint: Optional[str]¶
El endpoint que coincide con la URL de la solicitud.
Será
None
si la coincidencia ha fallado o no se ha realizado todavía.Esto en combinación con
view_args
puede utilizarse para reconstruir la misma URL o una URL modificada.
- environ: WSGIEnvironment¶
El entorno WSGI que contiene las cabeceras HTTP y la información del servidor WSGI.
- property files: werkzeug.datastructures.ImmutableMultiDict[str, werkzeug.datastructures.FileStorage]¶
MultiDict
objeto que contiene todos los archivos subidos. Cada clave enfiles
es el nombre del archivo<input type="file" name="">
. Cada valor enfiles
es un objeto WerkzeugFileStorage
.Básicamente se comporta como un objeto archivo estándar que conoces de Python, con la diferencia de que también tiene una función
save()
que puede almacenar el archivo en el sistema de archivos.Tenga en cuenta que
files
sólo contendrá datos si el método de solicitud fue POST, PUT o PATCH y el<form>
que envió la solicitud teníaenctype="multipart/form-data"
. En caso contrario, estará vacío.Consulte la documentación de
MultiDict
/FileStorage
para más detalles sobre la estructura de datos utilizada.
- property form: werkzeug.datastructures.ImmutableMultiDict[str, str]¶
Los parámetros del formulario. Por defecto, esta función devuelve una
ImmutableMultiDict
. Esto puede cambiarse estableciendoparameter_storage_class
a un tipo diferente. Esto puede ser necesario si el orden de los datos del formulario es importante.Por favor, tenga en cuenta que las subidas de archivos no acabarán aquí, sino en el atributo
files
.Changelog
Distinto en la versión 0.9: Antes de Werkzeug 0.9 esto sólo contenía datos de formulario para peticiones POST y PUT.
- form_data_parser_class¶
alias of
werkzeug.formparser.FormDataParser
- classmethod from_values(*args, **kwargs)¶
Crea un nuevo objeto de solicitud basado en los valores proporcionados. Si se da environ los valores que faltan se rellenan a partir de ahí. Este método es útil para pequeños scripts cuando se necesita simular una petición desde una URL. No utilice este método para pruebas unitarias, hay un objeto cliente completo (
Client
) que permite crear peticiones multiparte, soporte para cookies, etc.Acepta las mismas opciones que el
EnvironBuilder
.Changelog
Distinto en la versión 0.5: Este método acepta ahora los mismos argumentos que
EnvironBuilder
. Debido a esto el parámetro environ se llama ahora environ_overrides.- Returns
objeto de la solicitud
- Parámetros
- Tipo del valor devuelto
- get_data(cache=True, as_text=False, parse_form_data=False)¶
Esto lee los datos entrantes en el buffer del cliente en un objeto de bytes. Por defecto se almacena en caché, pero este comportamiento puede cambiarse estableciendo cache a False.
Normalmente es una mala idea llamar a este método sin comprobar primero la longitud del contenido, ya que un cliente podría enviar docenas de megabytes o más y causar problemas de memoria en el servidor.
Tenga en cuenta que si los datos del formulario ya han sido analizados, este método no devolverá nada, ya que el análisis de los datos del formulario no almacena en caché los datos como hace este método. Para invocar implícitamente la función de análisis de datos del formulario establezca parse_form_data a True. Cuando se hace esto el valor de retorno de este método será una cadena vacía si el analizador de formularios maneja los datos. Esto generalmente no es necesario, ya que si todos los datos se almacenan en caché (que es el valor predeterminado) el analizador de formularios utilizará los datos almacenados en caché para analizar los datos del formulario. Por favor, sea consciente de comprobar la longitud del contenido primero en cualquier caso antes de llamar a este método para evitar agotar la memoria del servidor.
Si as_text se establece como True el valor de retorno será una cadena decodificada.
Changelog
Nuevo en la versión 0.9.
- get_json(force=False, silent=False, cache=True)¶
Analiza
data
como JSON.Si el mimetype no indica JSON (application/json, véase
is_json
), o el análisis sintáctico falla, se llama aon_json_loading_failed()
y su valor de retorno se utiliza como valor de retorno. Por defecto, esto genera un error 400 Bad Request.- Parámetros
- Tipo del valor devuelto
Changelog
Distinto en la versión 2.1: Generar un error 400 si el tipo de contenido es incorrecto.
- headers¶
Las cabeceras recibidas con la solicitud.
- property host: str¶
El nombre del host al que se hizo la petición, incluyendo el puerto si no es estándar. Validado con
trusted_hosts
.
- property if_match: werkzeug.datastructures.ETags¶
Un objeto que contiene todas las etiquetas electrónicas de la cabecera If-Match.
- Tipo del valor devuelto
- property if_modified_since: Optional[datetime.datetime]¶
La cabecera If-Modified-Since analizada como un objeto datetime.
Changelog
Distinto en la versión 2.0: El objeto datetime tiene en cuenta la zona horaria.
- property if_none_match: werkzeug.datastructures.ETags¶
Un objeto que contiene todas las etiquetas electrónicas de la cabecera If-None-Match.
- Tipo del valor devuelto
- property if_range: werkzeug.datastructures.IfRange¶
La cabecera
If-Range
analizada.Changelog
Distinto en la versión 2.0:
IfRange.date
tiene en cuenta la zona horaria.Nuevo en la versión 0.7.
- property if_unmodified_since: Optional[datetime.datetime]¶
La cabecera If-Unmodified-Since analizada como un objeto datetime.
Changelog
Distinto en la versión 2.0: El objeto datetime tiene en cuenta la zona horaria.
- input_stream¶
El flujo de entrada WSGI.
En general es una mala idea usar este porque puedes leer fácilmente más allá del límite. Utiliza el
stream
en su lugar.
- property is_json: bool¶
Comprueba si el mimetype indica datos JSON, ya sea application/json o application/*+json.
- is_multiprocess¶
booleano que es True si la aplicación es servida por un servidor WSGI que genera múltiples procesos.
- is_multithread¶
booleano que es aTrue si la aplicación es servida por un servidor WSGI multihilo.
- is_run_once¶
booleano que es True si la aplicación se ejecutará sólo una vez en la vida del proceso. Este es el caso de CGI, por ejemplo, pero no está garantizado que la ejecución sólo se produzca una vez.
- property json: Optional[Any]¶
Los datos JSON analizados si
mimetype
indica JSON (application/json, véaseis_json
).Llama a
get_json()
con argumentos por defecto.Si el tipo de contenido de la solicitud no es
application/json
, se producirá un error 400 Bad Request.Changelog
Distinto en la versión 2.1: Generar un error 400 si el tipo de contenido es incorrecto.
- list_storage_class¶
- make_form_data_parser()¶
Crea el analizador de datos del formulario. Instala la clase
form_data_parser_class
con algunos parámetros.Changelog
Nuevo en la versión 0.8.
- Tipo del valor devuelto
- property max_content_length: Optional[int]¶
Vista de sólo lectura de la clave de configuración
MAX_CONTENT_LENGTH
.
- max_forwards¶
El campo Max-Forwards de la cabecera de la petición proporciona un mecanismo con los métodos TRACE y OPTIONS para limitar el número de proxies o pasarelas que pueden reenviar la petición al siguiente servidor entrante.
- method¶
El método con el que se hizo la petición, como
GET
.
- property mimetype: str¶
Como
content_type
, pero sin parámetros (por ejemplo, sin charset, tipo, etc.) y siempre en minúsculas. Por ejemplo, si el tipo de contenido estext/HTML; charset=utf-8
el mimetype sería'text/html'
.
- property mimetype_params: Dict[str, str]¶
Los parámetros de mimetype como dict. Por ejemplo, si el tipo de contenido es
text/html; charset=utf-8
los parámetros serían{'charset': 'utf-8'}
.
- on_json_loading_failed(e)¶
Se llama si
get_json()
falla y no se silencia.Si este método devuelve un valor, se utiliza como valor de retorno para
get_json()
. La implementación por defecto lanzaBadRequest
.- Parámetros
e (Optional[ValueError]) – Si el análisis sintáctico falló, esta es la excepción. Será
None
si el tipo de contenido no eraapplication/json
.- Tipo del valor devuelto
- origin¶
El host desde el que se originó la solicitud. Establezca
access_control_allow_origin
en la respuesta para indicar qué orígenes están permitidos.
- parameter_storage_class¶
- path¶
La parte de la ruta de la URL después de
root_path
. Esta es la ruta utilizada para el enrutamiento dentro de la aplicación.
- property pragma: werkzeug.datastructures.HeaderSet¶
El campo Pragma general-header se utiliza para incluir directivas específicas de la implementación que podrían aplicarse a cualquier destinatario a lo largo de la cadena de solicitud/respuesta. Todas las directivas pragma especifican un comportamiento opcional desde el punto de vista del protocolo; sin embargo, algunos sistemas PUEDEN exigir que el comportamiento sea coherente con las directivas.
- query_string¶
La parte de la URL después del «?». Este es el valor bruto, utilice
args
para los valores analizados.
- property range: Optional[werkzeug.datastructures.Range]¶
La cabecera Range analizada.
Changelog
Nuevo en la versión 0.7.
- Tipo del valor devuelto
- referrer¶
El campo Referer[sic] request-header permite al cliente especificar, en beneficio del servidor, la dirección (URI) del recurso del que se obtuvo la Request-URI (el «referrer», aunque el campo de la cabecera está mal escrito).
- remote_addr¶
La dirección del cliente que envía la solicitud.
- remote_user¶
Si el servidor admite la autenticación del usuario, y el script está protegido, este atributo contiene el nombre de usuario con el que el usuario se ha autenticado.
- root_path¶
El prefijo con el que se monta la aplicación, sin una barra al final.
path
viene después de esto.
- property root_url: str¶
El esquema de la URL de la solicitud, el host y la ruta raíz. Esta es la raíz desde la que se accede a la aplicación.
- routing_exception: Optional[Exception] = None¶
Si la coincidencia de la URL falló, esta es la excepción que se lanzará / se lanzó como parte del manejo de la solicitud. Normalmente es una excepción
NotFound
o algo similar.
- scheme¶
El esquema de la URL del protocolo que la solicitud utilizó, como
https
owss
.
- property script_root: str¶
Alias para
self.root_path
.environ["SCRIPT_ROOT"]
sin una barra al final.
- server¶
La dirección del servidor.
(host, port)
,(path, None)
para sockets unix, oNone
si no se conoce.
- shallow: bool¶
Se establece al crear el objeto de la petición. Si
True
, la lectura del cuerpo de la petición causará unaRuntimeException
. Útil para evitar la modificación del flujo desde el middleware.
- property stream: IO[bytes]¶
Si los datos del formulario entrante no fueron codificados con un mimetype conocido, los datos se almacenan sin modificar en este flujo para su consumo. La mayoría de las veces es mejor usar
data
que le dará esos datos como una cadena. El flujo sólo devuelve los datos una vez.A diferencia de
input_stream
este flujo está debidamente protegido para que no se pueda leer accidentalmente más allá de la longitud de la entrada. Werkzeug siempre se referirá internamente a este flujo para leer los datos, lo que hace posible envolver este objeto con un flujo que hace el filtrado.Changelog
Distinto en la versión 0.9: Este flujo está ahora siempre disponible pero puede ser consumido por el analizador de formularios más adelante. Anteriormente, el flujo sólo se establecía si no se realizaba el análisis.
- property url: str¶
La URL completa de la solicitud con el esquema, el host, la ruta raíz, la ruta y la cadena de consulta.
- property url_charset: str¶
El conjunto de caracteres que se asume para las URL. Por defecto, el valor de
charset
.Changelog
Nuevo en la versión 0.6.
- property url_root: str¶
Alias de
root_url
. La URL con esquema, host y ruta raíz. Por ejemplo,https://example.com/app/
.
- url_rule: Optional[Rule] = None¶
La regla interna de la URL que coincidió con la solicitud. Esto puede ser útil para inspeccionar qué métodos están permitidos para la URL desde un manejador before/after (
request.url_rule.methods
), etc. Aunque si el método de la petición no era válido para la regla de URL, la lista válida está disponible enrouting_exception.valid_methods
en su lugar (un atributo de la excepción de WerkzeugMethodNotAllowed
) porque la petición nunca estuvo vinculada internamente.Changelog
Nuevo en la versión 0.6.
- property user_agent: werkzeug.user_agent.UserAgent¶
El user agent. Utilice
user_agent.string
para obtener el valor de la cabecera. Estableceuser_agent_class
a una subclase deUserAgent
para proporcionar el análisis de las otras propiedades u otros datos extendidos.Changelog
Distinto en la versión 2.0: El analizador incorporado está obsoleto y será eliminado en Werkzeug 2.1. Se debe establecer una subclase
UserAgent
para analizar los datos de la cadena.
- user_agent_class¶
alias of
werkzeug.user_agent.UserAgent
- property values: werkzeug.datastructures.CombinedMultiDict[str, str]¶
Una
werkzeug.datastructures.CombinedMultiDict
que combinaargs
yform
.En el caso de las peticiones GET, sólo están presentes los
args
, no elform
.Changelog
Distinto en la versión 2.0: En el caso de las peticiones GET, sólo están presentes los
args
, no elform
.
- flask.request¶
Para acceder a los datos de las peticiones entrantes, puedes utilizar el objeto global request. Flask analiza los datos de las peticiones entrantes por ti y te da acceso a ellos a través de ese objeto global. Internamente Flask se asegura de que siempre obtengas los datos correctos para el hilo activo si estás en un entorno multihilo.
Se trata de un prox. Consulte Notas sobre los apoderados para obtener más información.
El objeto request es una instancia de una
Request
.
Objetos de respuesta¶
- class flask.Response(response=None, status=None, headers=None, mimetype=None, content_type=None, direct_passthrough=False)¶
El objeto de respuesta que se utiliza por defecto en Flask. Funciona como el objeto de respuesta de Werkzeug pero está configurado para tener un mimetype HTML por defecto. A menudo no tienes que crear este objeto tú mismo porque
make_response()
se encargará de ello por ti.Si quieres reemplazar el objeto de respuesta utilizado puedes subclasificar esto y establecer
response_class
a tu subclase.Changelog
Distinto en la versión 1.0: El soporte JSON se añade a la respuesta, al igual que la solicitud. Esto es útil cuando se hacen pruebas para obtener los datos de respuesta del cliente de prueba como JSON.
Distinto en la versión 1.0: Añadido
max_cookie_size
.- Parámetros
- Tipo del valor devuelto
None
- accept_ranges¶
La cabecera Accept-Ranges. Aunque el nombre indique que se admiten varios valores, debe ser un solo token de cadena.
Los valores «bytes» y
'none'
son comunes.Changelog
Nuevo en la versión 0.7.
- property access_control_allow_credentials: bool¶
Si las credenciales pueden ser compartidas por el navegador al código JavaScript. Como parte de la solicitud de verificación previa, indica si las credenciales se pueden utilizar en la solicitud de origen cruzado.
- access_control_allow_headers¶
Qué cabeceras se pueden enviar con la solicitud de origen cruzado.
- access_control_allow_methods¶
Qué métodos se pueden utilizar para la solicitud de origen cruzado.
- access_control_allow_origin¶
El origen o “*” para cualquier origen que pueda hacer peticiones de origen cruzado.
- access_control_expose_headers¶
Qué cabeceras pueden ser compartidas por el navegador al código JavaScript.
- access_control_max_age¶
La edad máxima en segundos que la configuración del control de acceso puede ser almacenada en caché.
- add_etag(overwrite=False, weak=False)¶
Añade una etiqueta electrónica para la respuesta actual si todavía no hay ninguna.
Changelog
Distinto en la versión 2.0: Se utiliza SHA-1 para generar el valor. MD5 puede no estar disponible en algunos entornos.
- age¶
El campo de encabezado de respuesta Age transmite la estimación del remitente sobre el tiempo transcurrido desde que se generó la respuesta (o su revalidación) en el servidor de origen.
Los valores de edad son enteros decimales no negativos que representan el tiempo en segundos.
- property allow: werkzeug.datastructures.HeaderSet¶
El campo Allow entity-header enumera el conjunto de métodos admitidos por el recurso identificado por la Request-URI. El propósito de este campo es estrictamente informar al destinatario de los métodos válidos asociados con el recurso. Un campo de cabecera Allow DEBE estar presente en una respuesta 405 (Method Not Allowed).
- property cache_control: werkzeug.datastructures.ResponseCacheControl¶
El campo Cache-Control general-header se utiliza para especificar las directivas que DEBEN ser obedecidas por todos los mecanismos de almacenamiento en caché a lo largo de la cadena de solicitud/respuesta.
- calculate_content_length()¶
Devuelve la longitud del contenido si está disponible o None en caso contrario.
- call_on_close(func)¶
Añade una función a la lista interna de funciones que deben ser llamadas como parte del cierre de la respuesta. Desde la versión 0.7 esta función también devuelve la función que se pasó para que esta pueda ser utilizada como un decorador.
Changelog
Nuevo en la versión 0.6.
- close()¶
Cierre la respuesta envuelta si es posible. También puedes utilizar el objeto en una sentencia with que lo cerrará automáticamente.
Changelog
Nuevo en la versión 0.9: Ahora se puede utilizar en una declaración con.
- Tipo del valor devuelto
None
- content_encoding¶
El campo de cabecera de entidad Content-Encoding se utiliza como modificador del tipo de medio. Cuando está presente, su valor indica qué codificaciones de contenido adicionales se han aplicado al cuerpo de la entidad y, por tanto, qué mecanismos de descodificación deben aplicarse para obtener el tipo de medio al que se refiere el campo de cabecera Content-Type.
- property content_language: werkzeug.datastructures.HeaderSet¶
El campo Content-Language de la cabecera de la entidad describe la(s) lengua(s) natural(es) de los destinatarios de la entidad adjunta. Tenga en cuenta que esto podría no ser equivalente a todos los idiomas utilizados dentro del cuerpo de la entidad.
- content_length¶
El campo Content-Length de la cabecera de la entidad indica el tamaño del cuerpo de la entidad, en número decimal de OCTETs, enviado al destinatario o, en el caso del método HEAD, el tamaño del cuerpo de la entidad que se habría enviado si la petición hubiera sido un GET.
- content_location¶
El campo de cabecera de entidad Content-Location PUEDE utilizarse para proporcionar la ubicación del recurso para la entidad incluida en el mensaje cuando dicha entidad es accesible desde una ubicación distinta del URI del recurso solicitado.
- content_md5¶
El campo de cabecera de entidad Content-MD5, tal y como se define en el RFC 1864, es un compendio MD5 del cuerpo de la entidad con el fin de proporcionar una comprobación de integridad del mensaje de extremo a extremo (MIC) del cuerpo de la entidad. (Nota: un MIC es bueno para detectar modificaciones accidentales del cuerpo de la entidad en tránsito, pero no es a prueba de ataques maliciosos).
- property content_range: werkzeug.datastructures.ContentRange¶
La cabecera
Content-Range
como objetoContentRange
. Disponible incluso si la cabecera no está establecida.Changelog
Nuevo en la versión 0.7.
- property content_security_policy: werkzeug.datastructures.ContentSecurityPolicy¶
La cabecera
Content-Security-Policy
como objetoContentSecurityPolicy
. Disponible incluso si la cabecera no está establecida.La cabecera Content-Security-Policy añade una capa adicional de seguridad para ayudar a detectar y mitigar ciertos tipos de ataques.
- property content_security_policy_report_only: werkzeug.datastructures.ContentSecurityPolicy¶
La cabecera
Content-Security-policy-report-only
como objetoContentSecurityPolicy
. Disponible incluso si la cabecera no está establecida.La cabecera Content-Security-Policy-Report-Only añade una política csp que no se aplica, pero que se notifica, ayudando así a detectar ciertos tipos de ataques.
- content_type¶
El campo Content-Type de la cabecera de la entidad indica el tipo de medio del cuerpo de la entidad enviado al destinatario o, en el caso del método HEAD, el tipo de medio que se habría enviado si la solicitud hubiera sido un GET.
- cross_origin_embedder_policy¶
Evita que un documento cargue cualquier recurso de origen cruzado que no conceda explícitamente el permiso al documento. Los valores deben ser miembros de la clase
werkzeug.http.COEP
enum.
- cross_origin_opener_policy¶
Permite controlar el uso compartido del grupo de contexto de navegación con documentos de origen cruzado. Los valores deben ser miembros de la clase
werkzeug.http.COOP
enum.
- property data: Union[bytes, str]¶
Un descriptor que llama a
get_data()
yset_data()
.
- date¶
El campo de cabecera general Date representa la fecha y hora en la que se originó el mensaje, teniendo la misma semántica que orig-date en RFC 822.
Changelog
Distinto en la versión 2.0: El objeto datetime tiene en cuenta la zona horaria.
- delete_cookie(key, path='/', domain=None, secure=False, httponly=False, samesite=None)¶
Borrar una cookie. Falla silenciosamente si la clave no existe.
- Parámetros
key (str) – la clave (nombre) de la cookie que se va a eliminar.
path (str) – si la cookie que debe ser eliminada estaba limitada a una ruta, la ruta tiene que ser definida aquí.
domain (Optional[str]) – si la cookie que debe ser eliminada estaba limitada a un dominio, ese dominio tiene que ser definido aquí.
secure (bool) – Si es
True
, la cookie sólo estará disponible a través de HTTPS.httponly (bool) – No permitir el acceso de JavaScript a la cookie.
samesite (Optional[str]) – Limitar el alcance de la cookie para que sólo se adjunte a las solicitudes que son «del mismo sitio».
- Tipo del valor devuelto
None
- direct_passthrough¶
Pasar el cuerpo de la respuesta directamente como el iterable WSGI. Esto puede usarse cuando el cuerpo es un archivo binario u otro iterable de bytes, para saltarse algunas comprobaciones innecesarias. Utilice
send_file()
en lugar de establecerlo manualmente.
- expires¶
El campo «Expires entity-header» indica la fecha/hora a partir de la cual la respuesta se considera antigua. Una entrada de caché obsoleta normalmente no puede ser devuelta por una caché.
Changelog
Distinto en la versión 2.0: El objeto datetime tiene en cuenta la zona horaria.
- classmethod force_type(response, environ=None)¶
Hacer que la respuesta WSGI sea un objeto de respuesta de la clase actual. Werkzeug utilizará la
Response
internamente en muchas situaciones como las excepciones. Si llamas aget_response()
en una excepción obtendrás un objetoResponse
normal, incluso si estás usando una subclase personalizada.Este método puede imponer un tipo de respuesta dado, y también convertirá callables WSGI arbitrarios en objetos de respuesta si se proporciona un entorno:
# convert a Werkzeug response object into an instance of the # MyResponseClass subclass. response = MyResponseClass.force_type(response) # convert any WSGI application into a response object response = MyResponseClass.force_type(response, environ)
Esto es especialmente útil si quieres posprocesar las respuestas en el despachador principal y utilizar la funcionalidad proporcionada por tu subclase.
¡Tenga en cuenta que esto modificará los objetos de respuesta en su lugar si es posible!
- freeze()¶
Prepara el objeto de respuesta para ser decapado. Hace lo siguiente:
Almacena la respuesta en una lista, ignorando
implicity_sequence_conversion
ydirect_passthrough
.Establece la cabecera
Content-Length
.Genera una cabecera
ETag
si aún no se ha establecido una.
Changelog
Distinto en la versión 2.1: Se ha eliminado el parámetro
no_etag
.Distinto en la versión 2.0: Se añade una cabecera
ETag
, el parámetrono_etag
está obsoleto y se eliminará en Werkzeug 2.1.Distinto en la versión 0.6: La cabecera
Content-Length
se ha establecido.- Tipo del valor devuelto
None
- classmethod from_app(app, environ, buffered=False)¶
Crea un nuevo objeto de respuesta a partir de la salida de una aplicación. Esto funciona mejor si le pasas una aplicación que devuelva un generador todo el tiempo. A veces las aplicaciones pueden utilizar la llamada write() devuelta por la función start_response. Esto trata de resolver estos casos extremos automáticamente. Pero si no obtienes la salida esperada, deberías poner buffered a True, lo que refuerza el buffering.
- get_app_iter(environ)¶
Devuelve el iterador de la solicitud para el entorno dado. Dependiendo del método de solicitud y del código de estado actual, el valor de retorno podría ser una respuesta vacía en lugar de la de la respuesta.
Si el método de solicitud es HEAD o el código de estado está en un rango en el que la especificación HTTP requiere una respuesta vacía, se devuelve un iterable vacío.
Changelog
Nuevo en la versión 0.6.
- get_data(as_text=False)¶
La representación en forma de cadena del cuerpo de la respuesta. Cada vez que se llama a esta propiedad, el iterable de la respuesta se codifica y se aplana. Esto puede dar lugar a un comportamiento no deseado si se transmiten grandes datos.
Este comportamiento puede desactivarse estableciendo
implicit_sequence_conversion
a False.Si as_text se establece como True el valor de retorno será una cadena decodificada.
Changelog
Nuevo en la versión 0.9.
- get_etag()¶
Devuelve una tupla de la forma
(etag, is_weak)
. Si no hay ETag el valor de retorno es(None, None)
.
- get_json(force=False, silent=False)¶
Analiza
data
como JSON. Útil durante las pruebas.Si el mimetype no indica JSON (application/json, véase
is_json
), devuelveNone
.A diferencia de
Request.get_json()
, el resultado no se almacena en caché.
- get_wsgi_headers(environ)¶
Se llama automáticamente justo antes de que se inicie la respuesta y devuelve las cabeceras modificadas para el entorno dado. Devuelve una copia de las cabeceras de la respuesta con algunas modificaciones aplicadas si es necesario.
Por ejemplo, la cabecera location (si está presente) se une a la URL raíz del entorno. También la longitud del contenido se pone automáticamente a cero aquí para ciertos códigos de estado.
Changelog
Distinto en la versión 0.6: Anteriormente esa función se llamaba fix_headers y modificaba el objeto de respuesta en su lugar. Además, desde la versión 0.6, los IRIs en las cabeceras location y content-location se manejan correctamente.
También a partir de la versión 0.6, Werkzeug intentará establecer la longitud del contenido si es capaz de averiguarlo por sí mismo. Este es el caso si todas las cadenas en el iterable de respuesta ya están codificadas y el iterable está en el buffer.
- Parámetros
environ (WSGIEnvironment) – el entorno WSGI de la solicitud.
- Returns
devuelve un nuevo objeto
Headers
.- Tipo del valor devuelto
- get_wsgi_response(environ)¶
Devuelve la respuesta final de WSGI como una tupla. El primer elemento de la tupla es el iterador de la aplicación, el segundo el estado y el tercero la lista de cabeceras. La respuesta devuelta se crea especialmente para el entorno dado. Por ejemplo, si el método de solicitud en el entorno WSGI es
'HEAD'
la respuesta estará vacía y sólo estarán presentes las cabeceras y el código de estado.Changelog
Nuevo en la versión 0.6.
- property is_json: bool¶
Comprueba si el mimetype indica datos JSON, ya sea application/json o application/*+json.
- property is_sequence: bool¶
Si el iterador se almacena en un buffer, esta propiedad será True. Un objeto de respuesta considerará que un iterador está almacenado en buffer si el atributo de la respuesta es una lista o tupla.
Changelog
Nuevo en la versión 0.6.
- property is_streamed: bool¶
Si la respuesta es «streamed» (la respuesta no es un iterable con información de longitud) esta propiedad es True. En este caso, streamed significa que no hay información sobre el número de iteraciones. Normalmente es True si se pasa un generador al objeto de respuesta.
Esto es útil para comprobar antes de aplicar algún tipo de filtrado de correos que no debería tener lugar para las respuestas transmitidas.
- iter_encoded()¶
Itera la respuesta codificada con la codificación de la respuesta. Si el objeto de respuesta se invoca como aplicación WSGI, el valor de retorno de este método se utiliza como iterador de la aplicación, a menos que se haya activado
direct_passthrough
.
- property json: Optional[Any]¶
Los datos JSON analizados si
mimetype
indica JSON (application/json, véaseis_json
).Llama a
get_json()
con argumentos por defecto.
- last_modified¶
El campo de cabecera de entidad Last-Modified indica la fecha y hora en la que el servidor de origen cree que la variante fue modificada por última vez.
Changelog
Distinto en la versión 2.0: El objeto datetime tiene en cuenta la zona horaria.
- location¶
El campo Location response-header se utiliza para redirigir al destinatario a una ubicación distinta de la Request-URI para completar la solicitud o identificar un nuevo recurso.
- make_conditional(request_or_environ, accept_ranges=False, complete_length=None)¶
Hacer que la respuesta esté condicionada a la solicitud. Este método funciona mejor si ya se ha definido una etiqueta electrónica para la respuesta. El método add_etag puede utilizarse para ello. Si se llama sin etag sólo se establece la cabecera de la fecha.
Esto no hace nada si el método de solicitud en la petición o el entorno es cualquier cosa que no sea GET o HEAD.
Para obtener un rendimiento óptimo en el manejo de las solicitudes de rango, se recomienda que su objeto de datos de respuesta implemente los métodos seekable, seek y tell como se describe en
io.IOBase
. Los objetos devueltos porwrap_file()
implementan automáticamente estos métodos.No elimina el cuerpo de la respuesta porque eso es algo que la función
__call__()
hace por nosotros automáticamente.Devuelve self para que puedas hacer
return resp.make_conditional(req)
pero modificando el objeto en el lugar.- Parámetros
request_or_environ (Union[WSGIEnvironment, Request]) – un objeto de solicitud o entorno WSGI que se utilizará para condicionar la respuesta.
accept_ranges (Union[bool, str]) – Este parámetro dicta el valor de la cabecera Accept-Ranges. Si es
False
(por defecto), la cabecera no se establece. Si esTrue
, se establecerá como"bytes"
. SiNone
, se establecerá como"none"
. Si es una cadena, se utilizará este valor.complete_length (Optional[int]) – Se utilizará sólo en las solicitudes válidas de Range. Establecerá el valor de longitud completa de Content-Range y calculará el valor real de Content-Length. Este parámetro es obligatorio para completar con éxito las solicitudes de rango.
- levanta
RequestedRangeNotSatisfiable
si la cabecera Range no ha podido ser analizada o satisfecha.- Tipo del valor devuelto
Changelog
Distinto en la versión 2.0: El procesamiento del rango se salta si la longitud es 0 en lugar de lanzar un error 416 de rango no satisfactorio.
- make_sequence()¶
Convierte el iterador de respuesta en una lista. Por defecto, esto ocurre automáticamente si es necesario. Si implicit_sequence_conversion está deshabilitado, este método no se llama automáticamente y algunas propiedades podrían lanzar excepciones. Esto también codifica todos los elementos.
Changelog
Nuevo en la versión 0.6.
- Tipo del valor devuelto
None
- property max_cookie_size: int¶
Vista de sólo lectura de la clave de configuración
MAX_COOKIE_SIZE
.Ver
max_cookie_size
en la documentación de Werkzeug.
- property mimetype_params: Dict[str, str]¶
Los parámetros de mimetype como dict. Por ejemplo, si el tipo de contenido es
text/html; charset=utf-8
los parámetros serían{'charset': 'utf-8'}
.Changelog
Nuevo en la versión 0.5.
- response: t.Union[t.Iterable[str], t.Iterable[bytes]]¶
The response body to send as the WSGI iterable. A list of strings or bytes represents a fixed-length response, any other iterable is a streaming response. Strings are encoded to bytes as UTF-8.
Do not set to a plain string or bytes, that will cause sending the response to be very inefficient as it will iterate one byte at a time.
- property retry_after: Optional[datetime.datetime]¶
El campo Retry-After response-header puede utilizarse con una respuesta 503 (Service Unavailable) para indicar cuánto tiempo se espera que el servicio no esté disponible para el cliente solicitante.
Tiempo en segundos hasta el vencimiento o la fecha.
Changelog
Distinto en la versión 2.0: El objeto datetime tiene en cuenta la zona horaria.
- set_cookie(key, value='', max_age=None, expires=None, path='/', domain=None, secure=False, httponly=False, samesite=None)¶
Establece una cookie.
Se produce una advertencia si el tamaño de la cabecera de la cookie excede
max_cookie_size
, pero la cabecera seguirá siendo establecida.- Parámetros
key (str) – la clave (nombre) de la cookie que se va a establecer.
value (str) – el valor de la cookie.
max_age (Optional[Union[datetime.timedelta, int]]) – debe ser un número de segundos, o None (por defecto) si la cookie debe durar sólo mientras la sesión del navegador del cliente.
expires (Optional[Union[str, datetime.datetime, int, float]]) – debe ser un objeto datetime o una marca de tiempo UNIX.
path (Optional[str]) – limita la cookie a una ruta determinada, por defecto abarcará todo el dominio.
domain (Optional[str]) – si desea establecer una cookie multidominio. Por ejemplo,
dominio=".ejemplo.com"
establecerá una cookie legible por el dominiowww.example.com
,foo.ejemplo.com
, etc. En caso contrario, una cookie sólo podrá ser leída por el dominio que la estableció.secure (bool) – Si es
True
, la cookie sólo estará disponible a través de HTTPS.httponly (bool) – No permitir el acceso de JavaScript a la cookie.
samesite (Optional[str]) – Limitar el alcance de la cookie para que sólo se adjunte a las solicitudes que son «del mismo sitio».
- Tipo del valor devuelto
None
- set_data(value)¶
Establece una nueva cadena como respuesta. El valor debe ser una cadena o bytes. Si se establece una cadena, se codifica con el conjunto de caracteres de la respuesta (utf-8 por defecto).
Changelog
Nuevo en la versión 0.9.
- set_etag(etag, weak=False)¶
Establece el etag, y anula el anterior si lo hubiera.
- property stream: werkzeug.wrappers.response.ResponseStream¶
La respuesta iterable como flujo de sólo escritura.
- property vary: werkzeug.datastructures.HeaderSet¶
El valor del campo Vary indica el conjunto de campos de la cabecera de la solicitud que determina completamente, mientras la respuesta está fresca, si se permite que una caché utilice la respuesta para responder a una solicitud posterior sin revalidación.
- property www_authenticate: werkzeug.datastructures.WWWAuthenticate¶
La cabecera
WW-Authenticate
en forma analizada.
Sesiones¶
Si has establecido Flask.secret_key
(o lo has configurado desde SECRET_KEY
) puedes utilizar sesiones en las aplicaciones Flask. Una sesión permite recordar información de una solicitud a otra. La forma en que Flask hace esto es utilizando una cookie firmada. El usuario puede ver el contenido de la sesión, pero no puede modificarlo a menos que conozca la clave secreta, así que asegúrate de establecerla con algo complejo e indescifrable.
Para acceder a la sesión actual puede utilizar el objeto session
:
- class flask.session¶
El objeto de sesión funciona de forma muy parecida a un dict ordinario, con la diferencia de que lleva la cuenta de las modificaciones.
Se trata de un prox. Consulte Notas sobre los apoderados para obtener más información.
Los siguientes atributos son interesantes:
- new¶
True
si la sesión es nueva,False
en caso contrario.
- modified¶
True
si el objeto de sesión ha detectado una modificación. Tenga en cuenta que las modificaciones en las estructuras mutables no se recogen automáticamente, en esa situación tiene que establecer explícitamente el atributo aTrue
usted mismo. Aquí un ejemplo:# this change is not picked up because a mutable object (here # a list) is changed. session['objects'].append(42) # so mark it as modified yourself session.modified = True
- permanent¶
Si se establece como
True
la sesión vive durantepermanent_session_lifetime
segundos. El valor por defecto es de 31 días. Si se establece enFalse
(que es el valor por defecto) la sesión se borrará cuando el usuario cierre el navegador.
Interfaz de la sesión¶
Changelog
Nuevo en la versión 0.8.
La interfaz de sesión proporciona una forma sencilla de reemplazar la implementación de sesión que utiliza Flask.
- class flask.sessions.SessionInterface¶
La interfaz básica que tienes que implementar para reemplazar la interfaz de sesión por defecto que utiliza la implementación de securecookie de werkzeug. Los únicos métodos que tienes que implementar son
open_session()
ysave_session()
, los demás tienen útiles valores por defecto que no necesitas cambiar.El objeto de sesión devuelto por el método
open_session()
tiene que proporcionar una interfaz similar a la de un diccionario, además de las propiedades y métodos de laSessionMixin
. Recomendamos simplemente subclasificar un diccionario y añadir ese mixin:class Session(dict, SessionMixin): pass
Si
open_session()
devuelveNone
Flask llamará amake_null_session()
para crear una sesión que actúe como reemplazo si el soporte de sesión no puede funcionar porque no se cumple algún requisito. La claseNullSession
por defecto que se crea se quejará de que no se ha establecido la clave secreta.Para reemplazar la interfaz de sesión en una aplicación todo lo que tienes que hacer es asignar
flask.Flask.session_interface
:app = Flask(__name__) app.session_interface = MySessionInterface()
Se pueden enviar y gestionar simultáneamente varias solicitudes con la misma sesión. Al implementar una nueva interfaz de sesión, hay que tener en cuenta si las lecturas o escrituras en el almacén de respaldo deben estar sincronizadas. No se garantiza el orden en el que se abre o guarda la sesión para cada solicitud, se producirá en el orden en el que las solicitudes comienzan y terminan de procesarse.
Changelog
Nuevo en la versión 0.8.
- get_cookie_domain(app)¶
Devuelve el dominio que debe establecerse para la cookie de sesión.
Utiliza
SESSION_COOKIE_DOMAIN
si está configurado, de lo contrario vuelve a detectar el dominio basado enSERVER_NAME
.Una vez detectado (o si no se establece en absoluto),
SESSION_COOKIE_DOMAIN
se actualiza para evitar volver a ejecutar la lógica.
- get_cookie_httponly(app)¶
Devuelve True si la cookie de sesión debe ser httponly. Actualmente sólo devuelve el valor de la varilla de configuración
SESSION_COOKIE_HTTPONLY
.
- get_cookie_name(app)¶
Devuelve el nombre de la cookie de sesión.
Utiliza
app.session_cookie_name
que se establece comoSESSION_COOKIE_NAME
- get_cookie_path(app)¶
Devuelve la ruta para la que la cookie debe ser válida. La implementación por defecto utiliza el valor de la var de configuración
SESSION_COOKIE_PATH
si está establecida, y vuelve aAPPLICATION_ROOT
o utiliza/
si esNone
.
- get_cookie_samesite(app)¶
Devuelve
'Strict'
o'Lax'
si la cookie debe utilizar el atributoSameSite
. Actualmente sólo devuelve el valor del ajusteSESSION_COOKIE_SAMESITE
.
- get_cookie_secure(app)¶
Devuelve True si la cookie debe ser segura. Actualmente sólo devuelve el valor del ajuste
SESSION_COOKIE_SECURE
.
- get_expiration_time(app, session)¶
Un método de ayuda que devuelve una fecha de caducidad para la sesión o
None
si la sesión está vinculada a la sesión del navegador. La implementación por defecto devuelve now + el tiempo de vida de la sesión permanente configurada en la aplicación.- Parámetros
app (Flask) –
session (flask.sessions.SessionMixin) –
- Tipo del valor devuelto
- is_null_session(obj)¶
Comprueba si un objeto dado es una sesión nula. No se pide que se guarden las sesiones nulas.
Comprueba si el objeto es una instancia de
null_session_class
por defecto.
- make_null_session(app)¶
Crea una sesión nula que actúa como objeto de reemplazo si el soporte de la sesión real no pudo ser cargado debido a un error de configuración. Esto ayuda principalmente a la experiencia del usuario porque el trabajo de la sesión nula es seguir soportando la búsqueda sin quejarse, pero las modificaciones se responden con un mensaje de error útil de lo que falló.
Esto crea una instancia de
null_session_class
por defecto.- Parámetros
app (Flask) –
- Tipo del valor devuelto
- null_session_class¶
make_null_session()
buscará aquí la clase que debe crearse cuando se solicita una sesión nula. Del mismo modo, el métodois_null_session()
realizará una comprobación de tipo con respecto a esta clase.alias of
flask.sessions.NullSession
- open_session(app, request)¶
Se llama al principio de cada solicitud, después de empujar el contexto de la solicitud, antes de hacer coincidir la URL.
Debe devolver un objeto que implemente una interfaz tipo diccionario, así como la interfaz
SessionMixin
.Esto devolverá
None
para indicar que la carga falló de alguna manera que no es inmediatamente un error. El contexto de la solicitud volverá a utilizarmake_null_session()
en este caso.- Parámetros
- Tipo del valor devuelto
- pickle_based = False¶
Una bandera que indica si la interfaz de sesión está basada en pickle. Esto puede ser utilizado por las extensiones de Flask para tomar una decisión con respecto a cómo tratar el objeto de sesión.
Changelog
Nuevo en la versión 0.10.
- save_session(app, session, response)¶
Se llama al final de cada solicitud, después de generar una respuesta, antes de eliminar el contexto de la solicitud. Se omite si
is_null_session()
devuelveTrue
.- Parámetros
app (Flask) –
session (flask.sessions.SessionMixin) –
response (Response) –
- Tipo del valor devuelto
None
- should_set_cookie(app, session)¶
Utilizado por los backends de sesión para determinar si se debe establecer una cabecera
Set-Cookie
para esta cookie de sesión para esta respuesta. Si la sesión ha sido modificada, se establece la cookie. Si la sesión es permanente y la configuraciónSESSION_REFRESH_EACH_REQUEST
es verdadera, la cookie se establece siempre.Esta comprobación suele omitirse si la sesión se ha eliminado.
Changelog
Nuevo en la versión 0.11.
- Parámetros
app (Flask) –
session (flask.sessions.SessionMixin) –
- Tipo del valor devuelto
- class flask.sessions.SecureCookieSessionInterface¶
La interfaz de sesión por defecto que almacena las sesiones en cookies firmadas a través del módulo
itsdangerous
.- static digest_method(string=b'', *, usedforsecurity=True)¶
la función hash a utilizar para la firma. El valor por defecto es sha1
- key_derivation = 'hmac'¶
el nombre de la derivación de clave soportada por itsdangerous. El valor por defecto es hmac.
- open_session(app, request)¶
Se llama al principio de cada solicitud, después de empujar el contexto de la solicitud, antes de hacer coincidir la URL.
Debe devolver un objeto que implemente una interfaz tipo diccionario, así como la interfaz
SessionMixin
.Esto devolverá
None
para indicar que la carga falló de alguna manera que no es inmediatamente un error. El contexto de la solicitud volverá a utilizarmake_null_session()
en este caso.- Parámetros
- Tipo del valor devuelto
- salt = 'cookie-session'¶
la sal que debe aplicarse sobre la clave secreta para la firma de las sesiones basadas en cookies.
- save_session(app, session, response)¶
Se llama al final de cada solicitud, después de generar una respuesta, antes de eliminar el contexto de la solicitud. Se omite si
is_null_session()
devuelveTrue
.- Parámetros
app (Flask) –
session (flask.sessions.SessionMixin) –
response (Response) –
- Tipo del valor devuelto
None
- serializer = <flask.json.tag.TaggedJSONSerializer object>¶
Un serializador de Python para la carga útil. El valor por defecto es un serializador compacto derivado de JSON con soporte para algunos tipos extra de Python como objetos datetime o tuplas.
- session_class¶
alias of
flask.sessions.SecureCookieSession
- class flask.sessions.SecureCookieSession(initial=None)¶
Clase base para sesiones basadas en cookies firmadas.
Este backend de sesión establecerá los atributos
modified
yaccessed
. No se puede saber de forma fiable si una sesión es nueva (frente a una vacía), por lo quenew
permanece codificado enFalse
.- Parámetros
initial (Any) –
- Tipo del valor devuelto
None
- accessed = False¶
que permite a los proxies de caché almacenar en caché diferentes páginas para diferentes usuarios.
- get(key, default=None)¶
Devuelve el valor de la clave si la clave está en el diccionario, si no, por defecto.
- modified = False¶
Cuando se modifican los datos, esto se establece como
True
. Sólo se rastrea el diccionario de sesión en sí mismo; si la sesión contiene datos mutables (por ejemplo, un dict anidado) entonces esto debe ser establecido aTrue
manualmente cuando se modifican esos datos. La cookie de sesión sólo se escribirá en la respuesta si esTrue
.
- class flask.sessions.NullSession(initial=None)¶
Clase utilizada para generar mensajes de error más agradables si las sesiones no están disponibles. Seguirá permitiendo el acceso de sólo lectura a la sesión vacía, pero fallará al establecerla.
- Parámetros
initial (Any) –
- Tipo del valor devuelto
None
- clear() None. Remove all items from D. ¶
- pop(k[, d]) v, remove specified key and return the corresponding value. ¶
If the key is not found, return the default if given; otherwise, raise a KeyError.
- popitem(*args, **kwargs)¶
Elimina y devuelve un par (clave, valor) como una 2-tupla.
Los pares se devuelven en orden LIFO (last-in, first-out). Se produce un KeyError si el dict está vacío.
- setdefault(*args, **kwargs)¶
Inserta la clave con un valor por defecto si la clave no está en el diccionario.
Devuelve el valor de la clave si la clave está en el diccionario, si no, por defecto.
- update([E, ]**F) None. Update D from dict/iterable E and F. ¶
Si E está presente y tiene un método .keys(), entonces hace: for k en E: D[k] = E[k] Si E está presente y carece de un método .keys(), entonces hace: for k, v en E: D[k] = v En cualquier caso, esto es seguido por: for k en F: D[k] = F[k]
- class flask.sessions.SessionMixin¶
Amplía un diccionario básico con atributos de sesión.
- accessed = True¶
Algunas implementaciones pueden detectar cuando se leen o escriben datos de la sesión y establecer esto cuando sucede. El mixin por defecto está codificado en
True
.
- modified = True¶
Algunas implementaciones pueden detectar cambios en la sesión y establecer esto cuando sucede. El mixin por defecto está codificado en
True
.
Aviso
La clave de configuración PERMANENT_SESSION_LIFETIME
también puede ser un entero a partir de Flask 0.8. Puede capturar esto usted mismo o utilizar el atributo permanent_session_lifetime
en la aplicación que convierte el resultado en un número entero automáticamente.
Test Client¶
- class flask.testing.FlaskClient(*args, **kwargs)¶
Funciona como un cliente de prueba Werkzeug normal, pero tiene conocimiento de los contextos de Flask para aplazar la limpieza del contexto de la solicitud hasta el final de un bloque
with
. Para información general sobre cómo usar esta clase, consultawerkzeug.test.Client
.Changelog
Distinto en la versión 0.12: app.test_client() incluye un entorno predeterminado, que se puede establecer después de la instanciación del objeto app.test_client() en client.environ_base.
El uso básico se describe en el capítulo Prueba de aplicaciones Flask.
- open(*args, buffered=False, follow_redirects=False, **kwargs)¶
Genera un environ dict a partir de los argumentos dados, realiza una petición a la aplicación que lo utiliza y devuelve la respuesta.
- Parámetros
args (Any) – Se pasa a
EnvironBuilder
para crear el entorno para la solicitud. Si se pasa un solo arg, puede ser unEnvironBuilder
existente o un environ dict.buffered (bool) – Convierte el iterador devuelto por la aplicación en una lista. Si el iterador tiene un método
close()
, se llama automáticamente.follow_redirects (bool) – Realiza peticiones adicionales para seguir las redirecciones HTTP hasta que se devuelva un estado de no redirección.
TestResponse.history
lista las respuestas intermedias.kwargs (Any) –
- Tipo del valor devuelto
TestResponse
Changelog
Distinto en la versión 2.1: Se ha eliminado el parámetro
as_tuple
.Distinto en la versión 2.0:
as_tuple
está obsoleto y será eliminado en Werkzeug 2.1. UtiliceTestResponse.request
yrequest.environ
en su lugar.Distinto en la versión 2.0: El flujo de entrada de la solicitud se cierra al llamar a
response.close()
. Los flujos de entrada para las redirecciones se cierran automáticamente.Distinto en la versión 0.5: Si se proporciona un dict como archivo en el dict para el parámetro
data
el tipo de contenido debe llamarsecontent_type
en lugar demimetype
. Este cambio se ha realizado por coherencia conwerkzeug.FileWrapper
.Distinto en la versión 0.5: Se ha añadido el parámetro
follow_redirects
.
- session_transaction(*args, **kwargs)¶
Cuando se utiliza en combinación con una sentencia
with
se abre una transacción de sesión. Esto se puede utilizar para modificar la sesión que utiliza el cliente de prueba. Una vez que se abandona el bloquewith
se vuelve a guardar la sesión.with client.session_transaction() as session: session['value'] = 42
Internamente esto se implementa pasando por un contexto de solicitud de prueba temporal y como el manejo de la sesión podría depender de las variables de la solicitud, esta función acepta los mismos argumentos que
test_request_context()
que se pasan directamente.- Parámetros
- Tipo del valor devuelto
Generator[flask.sessions.SessionMixin, None, None]
Test CLI Runner¶
- class flask.testing.FlaskCliRunner(app, **kwargs)¶
Un
CliRunner
para probar los comandos CLI de una aplicación Flask. Normalmente se crea usandotest_cli_runner()
. Ver Ejecución de comandos con el CLI Runner.- invoke(cli=None, args=None, **kwargs)¶
Invoca un comando CLI en un entorno aislado. Ver
CliRunner.invoke
para la documentación completa del método. Consulte Ejecución de comandos con el CLI Runner para ver ejemplos.Si el argumento
obj
no se da, pasa una instancia deScriptInfo
que sabe cómo cargar la aplicación Flask que se está probando.
Globales de aplicación¶
Para compartir datos que son válidos sólo para una petición de una función a otra, una variable global no es suficiente porque se rompería en entornos con hilos. Flask te proporciona un objeto especial que asegura que sólo es válido para la petición activa y que devolverá valores diferentes para cada petición. En pocas palabras: hace lo correcto, como lo hace para request
y session
.
- flask.g¶
Un objeto de espacio de nombres que puede almacenar datos durante un contexto de aplicación. Es una instancia de
Flask.app_ctx_globals_class
, que por defecto esctx._AppCtxGlobals
.Este es un buen lugar para almacenar recursos durante una petición. Por ejemplo, una función
before_request
podría cargar un objeto de usuario a partir de un id de sesión, y luego establecerg.user
para ser utilizado en la función de vista.Se trata de un proxy. Consulte Notas sobre los apoderados para obtener más información.
Changelog
Distinto en la versión 0.10: Vinculado al contexto de la aplicación en lugar del contexto de la solicitud.
- class flask.ctx._AppCtxGlobals¶
Un objeto simple. Se utiliza como espacio de nombres para almacenar datos durante un contexto de aplicación.
La creación de un contexto de aplicación crea automáticamente este objeto, que se pone a disposición como proxy
g
.- 'key' in g
Comprueba si un atributo está presente.
Changelog
Nuevo en la versión 0.10.
- iter(g)
Devuelve un iterador sobre los nombres de atributos.
Changelog
Nuevo en la versión 0.10.
- get(name, default=None)¶
Obtener un atributo por su nombre, o un valor por defecto. Como
dict.get()
.- Parámetros
- Tipo del valor devuelto
Changelog
Nuevo en la versión 0.10.
- pop(name, default=<object object>)¶
Obtener y eliminar un atributo por su nombre. Como
dict.pop()
.- Parámetros
- Tipo del valor devuelto
Changelog
Nuevo en la versión 0.11.
- setdefault(name, default=None)¶
Obtiene el valor de un atributo si está presente, en caso contrario establece y devuelve un valor por defecto. Como
dict.setdefault()
.- Parámetros
- Tipo del valor devuelto
Changelog
Nuevo en la versión 0.11.
Funciones y clases útiles¶
- flask.current_app¶
Un proxy de la aplicación que gestiona la solicitud actual. Esto es útil para acceder a la aplicación sin necesidad de importarla, o si no se puede importar, como cuando se utiliza el patrón de fábrica de aplicaciones o en blueprints y extensiones.
Esto sólo está disponible cuando un contexto de aplicación es empujado. Esto ocurre automáticamente durante las solicitudes y los comandos CLI. Se puede controlar manualmente con
app_context()
.Se trata de un proxy. Consulte Notas sobre los apoderados para obtener más información.
- flask.has_request_context()¶
Si usted tiene código que quiere probar si un contexto de solicitud está o no esta función puede ser utilizada. Por ejemplo, puede querer aprovechar la información de la solicitud si el objeto de solicitud está disponible, pero fallar silenciosamente si no está disponible.
class User(db.Model): def __init__(self, username, remote_addr=None): self.username = username if remote_addr is None and has_request_context(): remote_addr = request.remote_addr self.remote_addr = remote_addr
También puede comprobar la veracidad de cualquiera de los objetos vinculados al contexto (como
request
og
):class User(db.Model): def __init__(self, username, remote_addr=None): self.username = username if remote_addr is None and request: remote_addr = request.remote_addr self.remote_addr = remote_addr
Changelog
Nuevo en la versión 0.7.
- Tipo del valor devuelto
- flask.copy_current_request_context(f)¶
Una función de ayuda que decora una función para retener el contexto de la solicitud actual. Esto es útil cuando se trabaja con greenlets. En el momento en que la función es decorada, se crea una copia del contexto de la solicitud y luego se empuja cuando la función es llamada. La sesión actual también se incluye en el contexto de solicitud copiado.
Ejemplo:
import gevent from flask import copy_current_request_context @app.route('/') def index(): @copy_current_request_context def do_some_work(): # do some work here, it can access flask.request or # flask.session like you would otherwise in the view function. ... gevent.spawn(do_some_work) return 'Regular response'
Changelog
Nuevo en la versión 0.10.
- flask.has_app_context()¶
Funciona como
has_request_context()
pero para el contexto de la aplicación. También puede hacer una comprobación booleana en el objetocurrent_app
.Changelog
Nuevo en la versión 0.9.
- Tipo del valor devuelto
- flask.url_for(endpoint, *, _anchor=None, _method=None, _scheme=None, _external=None, **values)¶
Genera una URL al endpoint dado con los valores indicados.
Esto requiere una solicitud activa o un contexto de aplicación, y llama a
current_app.url_for()
. Consulte ese método para ver la documentación completa.- Parámetros
endpoint (str) – El nombre del endpoint asociado a la URL a generar. Si empieza por
.
, se utilizará el nombre del plano actual (si lo hay)._anchor (Optional[str]) – Si se proporciona, se añade como
#anchor
a la URL._method (Optional[str]) – Si se da, genera la URL asociada a este método para el punto final.
_scheme (Optional[str]) – Si se da, la URL tendrá este esquema si es externa.
_external (Optional[bool]) – Si se da, prefiere que la URL sea interna (False) o requiere que sea externa (True). Las URLs externas incluyen el esquema y el dominio. Cuando no están en una solicitud activa, las URL son externas por defecto.
values (Any) – Valores a utilizar para las partes variables de la regla URL. Las claves desconocidas se añaden como argumentos de la cadena de consulta, como
?a=b&c=d
.
- Tipo del valor devuelto
Distinto en la versión 2.2: Llama a
current_app.url_for
, permitiendo que una aplicación anule el comportamiento.Changelog
Distinto en la versión 0.10: Se ha añadido el parámetro
scheme
.Distinto en la versión 0.9: Se han añadido los parámetros
_anchor
y_method
.Distinto en la versión 0.9: Llama a
app.handle_url_build_error
en los errores de construcción.
- flask.abort(code, *args, **kwargs)¶
Lanza una
HTTPException
para el código de estado dado.Si
current_app
está disponible, llamará a su objetoaborter
, en caso contrario utilizaráwerkzeug.exceptions.abort()
.- Parámetros
- Tipo del valor devuelto
te.NoReturn
Nuevo en la versión 2.2: Llama a
current_app.aborter
si está disponible en lugar de utilizar siempre elabort
por defecto de Werkzeug.
- flask.redirect(location, code=302, Response=None)¶
Crea un objeto de respuesta de redirección.
Si
current_app
está disponible, utilizará su métodoredirect()
, en caso contrario utilizaráwerkzeug.utils.redirect()
.- Parámetros
- Tipo del valor devuelto
BaseResponse
Nuevo en la versión 2.2: Llama a
current_app.redirect
si está disponible en lugar de usar siempre elredirect
por defecto de Werkzeug.
- flask.make_response(*args)¶
A veces es necesario establecer cabeceras adicionales en una vista. Dado que las vistas no tienen que devolver objetos de respuesta sino que pueden devolver un valor que es convertido en un objeto de respuesta por el propio Flask, resulta complicado añadirle cabeceras. Se puede llamar a esta función en lugar de utilizar un retorno y se obtendrá un objeto respuesta que se puede utilizar para adjuntar cabeceras.
Si la vista tuviera este aspecto y quisiera añadir un nuevo encabezado:
def index(): return render_template('index.html', foo=42)
Ahora puedes hacer algo así:
def index(): response = make_response(render_template('index.html', foo=42)) response.headers['X-Parachutes'] = 'parachutes are cool' return response
Esta función acepta los mismos argumentos que puede devolver una función de vista. Esto, por ejemplo, crea una respuesta con un código de error 404:
response = make_response(render_template('not_found.html'), 404)
El otro caso de uso de esta función es forzar el valor de retorno de una función de vista en una respuesta que es útil con los decoradores de vista:
response = make_response(view_function()) response.headers['X-Parachutes'] = 'parachutes are cool'
Internamente esta función hace lo siguiente:
si no se pasan argumentos, crea un nuevo argumento de respuesta
si se pasa un argumento, se invoca
flask.Flask.make_response()
con él.si se pasa más de un argumento, los argumentos se pasan a la función
flask.Flask.make_response()
como tupla.
Changelog
Nuevo en la versión 0.6.
- flask.after_this_request(f)¶
Ejecuta una función después de esta solicitud. Esto es útil para modificar los objetos de respuesta. A la función se le pasa el objeto de respuesta y tiene que devolver el mismo o uno nuevo.
Ejemplo:
@app.route('/') def index(): @after_this_request def add_header(response): response.headers['X-Foo'] = 'Parachute' return response return 'Hello World!'
Esto es más útil si una función distinta de la función de la vista quiere modificar una respuesta. Por ejemplo, piensa en un decorador que quiera añadir algunas cabeceras sin convertir el valor de retorno en un objeto de respuesta.
Changelog
Nuevo en la versión 0.9.
- Parámetros
f (Union[Callable[[flask.typing.ResponseClass], flask.typing.ResponseClass], Callable[[flask.typing.ResponseClass], Awaitable[flask.typing.ResponseClass]]]) –
- Tipo del valor devuelto
Union[Callable[[flask.typing.ResponseClass], flask.typing.ResponseClass], Callable[[flask.typing.ResponseClass], Awaitable[flask.typing.ResponseClass]]]
- flask.send_file(path_or_file, mimetype=None, as_attachment=False, download_name=None, conditional=True, etag=True, last_modified=None, max_age=None)¶
Enviar el contenido de un archivo al cliente.
El primer argumento puede ser una ruta de archivo o un objeto similar a un archivo. Las rutas son preferibles en la mayoría de los casos porque Werkzeug puede gestionar el archivo y obtener información extra de la ruta. Pasar un objeto tipo archivo requiere que el archivo se abra en modo binario, y es mayormente útil cuando se construye un archivo en memoria con
io.BytesIO
.Nunca pases rutas de archivos proporcionadas por un usuario. Se asume que la ruta es de confianza, por lo que un usuario podría elaborar una ruta para acceder a un archivo que no era su intención. Utilice
send_from_directory()
para servir de forma segura las rutas solicitadas por el usuario desde un directorio.Si el servidor WSGI establece un
file_wrapper
enenviron
, se utiliza, de lo contrario se utiliza el wrapper incorporado de Werkzeug. Alternativamente, si el servidor HTTP soportaX-Sendfile
, configurando Flask conUSE_X_SENDFILE = True
le dirá al servidor que envíe la ruta dada, lo cual es mucho más eficiente que leerla en Python.- Parámetros
path_or_file (Union[os.PathLike, str, BinaryIO]) – La ruta del archivo a enviar, relativa al directorio de trabajo actual si se da una ruta relativa. Alternativamente, un objeto tipo archivo abierto en modo binario. Asegúrese de que el puntero del archivo se busque al principio de los datos.
mimetype (Optional[str]) – El tipo MIME a enviar para el archivo. Si no se proporciona, intentará detectarlo a partir del nombre del archivo.
as_attachment (bool) – Indicar a un navegador que debe ofrecer guardar el archivo en lugar de mostrarlo.
download_name (Optional[str]) – El nombre por defecto que utilizarán los navegadores al guardar el archivo. El nombre por defecto es el nombre del archivo pasado.
conditional (bool) – Habilitar respuestas condicionales y de rango basadas en las cabeceras de las peticiones. Requiere pasar una ruta de archivo y
environ
.etag (Union[bool, str]) – Calcula un ETag para el archivo, que requiere pasar una ruta de archivo. También puede ser una cadena para usar en su lugar.
last_modified (Optional[Union[datetime.datetime, int, float]]) – La última hora de modificación para enviar el archivo, en segundos. Si no se proporciona, intentará detectarla a partir de la ruta del archivo.
max_age (Optional[Union[int, Callable[[Optional[str]], Optional[int]]]]) – El tiempo que el cliente debe almacenar en caché el archivo, en segundos. Si se establece,
Cache-Control
serápublic
, de lo contrario seráno-cache
para preferir el almacenamiento en caché condicional.
- Tipo del valor devuelto
Changelog
Distinto en la versión 2.0:
download_name
sustituye al parámetroattachment_filename
. Sias_attachment=False
, se pasa conContent-Disposition: inline
en su lugar.Distinto en la versión 2.0:
max_age
sustituye al parámetrocache_timeout
. El parámetroconditional
está activado ymax_age
no está establecido por defecto.Distinto en la versión 2.0:
etag
sustituye al parámetroadd_etags
. Puede ser una cadena para usar en lugar de generar una.Distinto en la versión 2.0: Al pasar un objeto tipo archivo que herede de
TextIOBase
se producirá unValueError
en lugar de enviar un archivo vacío.Nuevo en la versión 2.0: Se ha trasladado la implementación a Werkzeug. Ahora es una envoltura para pasar algunos argumentos específicos de Flask.
Distinto en la versión 1.1:
filename
puede ser un objetoPathLike
.Distinto en la versión 1.1: Pasar un objeto
BytesIO
soporta solicitudes de rango.Distinto en la versión 1.0.3: Los nombres de los archivos se codifican con ASCII en lugar de Latin-1 para una mayor compatibilidad con los servidores WSGI.
Distinto en la versión 1.0: Se admiten los nombres de archivo UTF-8 especificados en RFC 2231.
Distinto en la versión 0.12: El nombre del archivo ya no se infiere automáticamente de los objetos de archivo. Si quieres utilizar el soporte automático de MIME y etags, pasa un nombre de archivo a través de
filename_or_fp
oattachment_filename
.Distinto en la versión 0.12: Se prefiere
attachment_filename
afilename
para la detección de MIME.Distinto en la versión 0.9:
cache_timeout
por defecto esFlask.get_send_file_max_age()
.Distinto en la versión 0.7: El soporte de conjeturas MIME y etags para objetos tipo archivo fue obviado porque no era confiable. Pase un nombre de archivo si puede hacerlo, de lo contrario adjunte una etiqueta electrónica usted mismo.
Distinto en la versión 0.5: Se han añadido los parámetros
add_etags
,cache_timeout
yconditional
. El comportamiento por defecto es añadir etags.Nuevo en la versión 0.2.
- flask.send_from_directory(directory, path, **kwargs)¶
Enviar un archivo desde un directorio utilizando
send_file()
.@app.route("/uploads/<path:name>") def download_file(name): return send_from_directory( app.config['UPLOAD_FOLDER'], name, as_attachment=True )
Esta es una forma segura de servir archivos desde una carpeta, como archivos estáticos o cargas. Utiliza
safe_join()
para asegurar que la ruta que viene del cliente no está maliciosamente diseñada para apuntar fuera del directorio especificado.Si la ruta final no apunta a un archivo regular existente, genera un error 404
NotFound
.- Parámetros
directory (Union[os.PathLike, str]) – El directorio en el que
path
debe estar ubicado, relativo a la ruta raíz de la aplicación actual.path (Union[os.PathLike, str]) – La ruta del archivo a enviar, relativa al
directory
.kwargs (Any) – Argumentos para pasar a
send_file()
.
- Tipo del valor devuelto
Changelog
Distinto en la versión 2.0:
path
sustituye al parámetrofilename
.Nuevo en la versión 2.0: Se ha trasladado la implementación a Werkzeug. Ahora es una envoltura para pasar algunos argumentos específicos de Flask.
Nuevo en la versión 0.5.
- flask.escape()¶
Reemplaza los caracteres
&
,<
,>
,'
, y"
en la cadena con secuencias seguras para HTML. Utilícelo si necesita mostrar un texto que pueda contener dichos caracteres en HTML.Si el objeto tiene un método
__html__
, se llama y se asume que el valor de retorno ya es seguro para HTML.- Parámetros
s – Un objeto que debe convertirse en una cadena y escaparse.
- Returns
Una cadena
Markup
con el texto escapado.
- class flask.Markup(base='', encoding=None, errors='strict')¶
Una cadena que está lista para ser insertada de forma segura en un documento HTML o XML, ya sea porque fue escapada o porque fue marcada como segura.
Pasar un objeto al constructor lo convierte en texto y lo envuelve para marcarlo como seguro sin escapar. Para escapar el texto, utilice el método de clase
escape()
en su lugar.>>> Markup("Hello, <em>World</em>!") Markup('Hello, <em>World</em>!') >>> Markup(42) Markup('42') >>> Markup.escape("Hello, <em>World</em>!") Markup('Hello <em>World</em>!')
Esto implementa la interfaz
__html__()
que utilizan algunos frameworks. Al pasar un objeto que implemente__html__()
se envolverá la salida de ese método, marcándolo como seguro.>>> class Foo: ... def __html__(self): ... return '<a href="/foo">foo</a>' ... >>> Markup(Foo()) Markup('<a href="/foo">foo</a>')
Es una subclase de
str
. Tiene los mismos métodos, pero escapa sus argumentos y devuelve una instancia deMarkup
.>>> Markup("<em>%s</em>") % ("foo & bar",) Markup('<em>foo & bar</em>') >>> Markup("<em>Hello</em> ") + "<foo>" Markup('<em>Hello</em> <foo>')
- classmethod escape(s)¶
Escapar una cadena. Llama a
escape()
y asegura que para las subclases se devuelva el tipo correcto.- Parámetros
s (Any) –
- Tipo del valor devuelto
- striptags()¶
unescape()
el marcado, elimina las etiquetas y normaliza los espacios en blanco a espacios simples.>>> Markup("Main » <em>About</em>").striptags() 'Main » About'
- Tipo del valor devuelto
Mensaje intermitente¶
- flask.flash(message, category='message')¶
Destella un mensaje a la siguiente petición. Para eliminar el mensaje flasheado de la sesión y mostrarlo al usuario, la plantilla debe llamar a
get_flashed_messages()
.Changelog
Distinto en la versión 0.3: Se ha añadido el parámetro «category».
- Parámetros
message (str) – el mensaje que se va a emitir.
category (str) – la categoría del mensaje. Se recomiendan los siguientes valores:
'message'
para cualquier tipo de mensaje,'error'
para los errores,'info'
para los mensajes de información y'warning'
para las advertencias. Sin embargo, se puede utilizar cualquier tipo de cadena como categoría.
- Tipo del valor devuelto
None
- flask.get_flashed_messages(with_categories=False, category_filter=())¶
Extrae todos los mensajes de la sesión y los devuelve. Las llamadas posteriores en la misma petición a la función devolverán los mismos mensajes. Por defecto sólo se devuelven los mensajes, pero cuando with_categories se establece como
True
, el valor de retorno será una lista de tuplas de la forma(category, message)
.Filtra los mensajes parpadeantes a una o más categorías proporcionando esas categorías en category_filter. Esto permite mostrar las categorías en bloques html separados. Los argumentos with_categories y category_filter son distintos:
with_categories controla si las categorías se devuelven con el texto del mensaje (
True
da una tupla, mientras queFalse
da sólo el texto del mensaje).El filtro de categorías filtra los mensajes para que sólo coincidan con las categorías indicadas.
Consulte Mensaje Flash para ver ejemplos.
Changelog
Distinto en la versión 0.9: Se ha añadido el parámetro category_filter.
Distinto en la versión 0.3: Se ha añadido el parámetro with_categories.
Soporte JSON¶
Flask utiliza el módulo incorporado json
para manejar JSON. Utilizará el codificador y decodificador JSON del plano o aplicación actual para facilitar la personalización. Por defecto maneja algunos tipos de datos extra:
datetime.datetime
ydatetime.date
se serializan en cadenas RFC 822. Esto es lo mismo que el formato de fecha HTTP.decimal.Decimal
se serializa en una cadena.uuid.UUID
se serializa en una cadena.dataclasses.dataclass
se pasa adataclasses.asdict()
.Markup
(o cualquier objeto con un método__html__
) llamará al método__html__
para obtener una cadena.
El filtro |tojson
de Jinja está configurado para utilizar la función dumps()
de Flask. El filtro marca la salida con |safe
automáticamente. Utiliza el filtro para renderizar datos dentro de las etiquetas <script>
.
<script>
const names = {{ names|tosjon }};
renderChart(names, {{ axis_data|tojson }});
</script>
- flask.json.jsonify(*args, **kwargs)¶
Serializa los datos a JSON y los envuelve en un
Response
con el mimetype:application/json.Utiliza
dumps()
para serializar los datos, pero losargs
y loskwargs
son tratados como datos en lugar de argumentos parajson.dumps()
.Argumento único: Se trata como un solo valor.
Argumentos múltiples: Tratados como una lista de valores.
jsonify(1, 2, 3)
es lo mismo quejsonify([1, 2, 3])
.Argumentos de palabras clave: Tratados como un dict de valores.
jsonify(data=data, errors=errors)
es lo mismo quejsonify({"data": data, "errors": errors})
.No se permite pasar tanto los argumentos como las palabras clave, ya que no está claro qué debe ocurrir.
from flask import jsonify @app.route("/users/me") def get_current_user(): return jsonify( username=g.user.username, email=g.user.email, id=g.user.id, )
Devolverá una respuesta JSON como esta:
{ "username": "admin", "email": "admin@localhost", "id": 42 }
La salida por defecto omite las sangrías y los espacios después de los separadores. En modo de depuración o si
JSONIFY_PRETTYPRINT_REGULAR
esTrue
, la salida tendrá un formato más fácil de leer.Changelog
Distinto en la versión 2.0.2:
decimal.Decimal
es compatible con la conversión a una cadena.Distinto en la versión 0.11: Se ha añadido soporte para serializar arrays de nivel superior. Esto introduce un riesgo de seguridad en los navegadores antiguos. Ver Seguridad JSON.
Nuevo en la versión 0.2.
- flask.json.dumps(obj, app=None, **kwargs)¶
Serializa un objeto a una cadena de JSON.
Toma los mismos argumentos que el built-in
json.dumps()
, con algunos valores por defecto de la configuración de la aplicación.- Parámetros
obj (Any) – Objeto para serializar a JSON.
app (Optional[Flask]) – Utiliza la configuración de esta aplicación en lugar del contexto de la aplicación activa o los valores predeterminados.
kwargs (Any) – Argumentos extra pasados a
json.dumps()
.
- Tipo del valor devuelto
Changelog
Distinto en la versión 2.0.2:
decimal.Decimal
es compatible con la conversión a una cadena.Distinto en la versión 2.0:
encoding
está obsoleto y será eliminado en Flask 2.1.Distinto en la versión 1.0.3:
app
se puede pasar directamente, en lugar de requerir un contexto de aplicación para la configuración.
- flask.json.dump(obj, fp, app=None, **kwargs)¶
Serializar un objeto a JSON escrito en un objeto de archivo.
Toma los mismos argumentos que el built-in
json.dump()
, con algunos valores por defecto de la configuración de la aplicación.- Parámetros
- Tipo del valor devuelto
None
Changelog
Distinto en la versión 2.0: La escritura en un archivo binario, y el argumento
encoding
, están obsoletos y se eliminarán en Flask 2.1.
- flask.json.loads(s, app=None, **kwargs)¶
Deserializar un objeto a partir de una cadena de JSON.
Toma los mismos argumentos que el built-in
json.loads()
, con algunos valores por defecto de la configuración de la aplicación.- Parámetros
- Tipo del valor devuelto
Changelog
Distinto en la versión 2.0:
encoding
está obsoleto y se eliminará en Flask 2.1. Los datos deben ser una cadena o bytes UTF-8.Distinto en la versión 1.0.3:
app
se puede pasar directamente, en lugar de requerir un contexto de aplicación para la configuración.
- flask.json.load(fp, app=None, **kwargs)¶
Deserializar un objeto a partir de JSON leído desde un objeto de archivo.
Toma los mismos argumentos que el built-in
json.load()
, con algunos valores por defecto de la configuración de la aplicación.- Parámetros
- Tipo del valor devuelto
Changelog
Distinto en la versión 2.0:
encoding
está obsoleto y será eliminado en Flask 2.1. El archivo debe estar en modo texto, o en modo binario con bytes UTF-8.
- class flask.json.JSONEncoder(*, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, default=None)¶
El codificador JSON por defecto. Maneja tipos adicionales en comparación con el incorporado
json.JSONEncoder
.datetime.datetime
ydatetime.date
se serializan en cadenas RFC 822. Esto es lo mismo que el formato de fecha HTTP.decimal.Decimal
se serializa en una cadena.uuid.UUID
se serializa en una cadena.dataclasses.dataclass
se pasa adataclasses.asdict()
.Markup
(o cualquier objeto con un método__html__
) llamará al método__html__
para obtener una cadena.
Asigna una subclase de esto a
flask.Flask.json_encoder
oflask.Blueprint.json_encoder
para anular el valor por defecto.- default(o)¶
Convierte
o
en un tipo JSON serializable. Verjson.JSONEncoder.default()
. Python no soporta anular cómo se serializan los tipos básicos comostr
olist
, se manejan antes de este método.
- class flask.json.JSONDecoder(*, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, strict=True, object_pairs_hook=None)¶
El decodificador JSON por defecto.
Esto no cambia el comportamiento del
json.JSONDecoder
incorporado.Asigna una subclase de esto a
flask.Flask.json_decoder
oflask.Blueprint.json_decoder
para anular el valor por defecto.
Etiquetado JSON¶
Una representación compacta para la serialización sin pérdidas de tipos JSON no estándar. SecureCookieSessionInterface
utiliza esto para serializar los datos de sesión, pero puede ser útil en otros lugares. Puede ser extendido para soportar otros tipos.
- class flask.json.tag.TaggedJSONSerializer¶
Serializador que utiliza un sistema de etiquetas para representar de forma compacta objetos no JSON. Se pasa como un serializador intermedio a
itsdangerous.Serializer
.Se admiten los siguientes tipos adicionales:
- Tipo del valor devuelto
None
- default_tags = [<class 'flask.json.tag.TagDict'>, <class 'flask.json.tag.PassDict'>, <class 'flask.json.tag.TagTuple'>, <class 'flask.json.tag.PassList'>, <class 'flask.json.tag.TagBytes'>, <class 'flask.json.tag.TagMarkup'>, <class 'flask.json.tag.TagUUID'>, <class 'flask.json.tag.TagDateTime'>]¶
Clases de etiquetas a enlazar cuando se crea el serializador. Se pueden añadir otras etiquetas más tarde usando
register()
.
- dumps(value)¶
Etiqueta el valor y lo vuelca en una cadena JSON compacta.
- loads(value)¶
Cargar datos de una cadena JSON y deserializar cualquier objeto etiquetado.
- register(tag_class, force=False, index=None)¶
Registra una nueva etiqueta con este serializador.
- Parámetros
tag_class (Type[flask.json.tag.JSONTag]) – clase de etiqueta a registrar. Se instanciará con esta instancia del serializador.
force (bool) – sobrescribir una etiqueta existente. Si es falso (por defecto), se produce un
KeyError
.index (Optional[int]) – para insertar la nueva etiqueta en el orden de las etiquetas. Es útil cuando la nueva etiqueta es un caso especial de una etiqueta existente. Si es
None
(por defecto), la etiqueta se añade al final del orden.
- Muestra
KeyError – si la clave de la etiqueta ya está registrada y
force
no es verdadero.- Tipo del valor devuelto
None
- tag(value)¶
Convierte un valor en una representación etiquetada si es necesario.
- class flask.json.tag.JSONTag(serializer)¶
Clase base para definir etiquetas de tipo para
TaggedJSONSerializer
.- Parámetros
serializer (TaggedJSONSerializer) –
- Tipo del valor devuelto
None
- check(value)¶
Comprueba si el valor dado debe ser etiquetado por esta etiqueta.
- key: Optional[str] = None¶
La etiqueta con la que se marcará el objeto serializado. Si es
None
, esta etiqueta sólo se utiliza como un paso intermedio durante el etiquetado.
- tag(value)¶
Convierte el valor a un tipo JSON válido y añade la estructura de etiquetas a su alrededor.
- to_json(value)¶
Convierte el objeto Python en un objeto de tipo JSON válido. La etiqueta se añadirá más tarde.
Veamos un ejemplo que añade soporte para OrderedDict
. Los dicts no tienen un orden en JSON, así que para manejar esto volcaremos los elementos como una lista de pares [key, value]
. Subclase JSONTag
y dale la nueva clave ' od'
para identificar el tipo. El serializador de sesión procesa primero los dicts, así que inserta la nueva etiqueta al principio de la orden ya que OrderedDict
debe ser procesado antes que dict
.
from flask.json.tag import JSONTag
class TagOrderedDict(JSONTag):
__slots__ = ('serializer',)
key = ' od'
def check(self, value):
return isinstance(value, OrderedDict)
def to_json(self, value):
return [[k, self.serializer.tag(v)] for k, v in iteritems(value)]
def to_python(self, value):
return OrderedDict(value)
app.session_interface.serializer.register(TagOrderedDict, index=0)
Renderizado de plantillas¶
- flask.render_template(template_name_or_list, **context)¶
Renderiza una plantilla por nombre con el contexto dado.
- Parámetros
template_name_or_list (Union[str, jinja2.environment.Template, List[Union[str, jinja2.environment.Template]]]) – El nombre de la plantilla a renderizar. Si se da una lista, se renderizará el primer nombre que exista.
context (Any) – Las variables que deben estar disponibles en la plantilla.
- Tipo del valor devuelto
- flask.render_template_string(source, **context)¶
Renderiza una plantilla a partir de la cadena fuente dada con el contexto dado.
- flask.stream_template(template_name_or_list, **context)¶
Renderiza una plantilla por nombre con el contexto dado como un flujo. Esto devuelve un iterador de cadenas, que puede ser utilizado como una respuesta de flujo de una vista.
- Parámetros
template_name_or_list (Union[str, jinja2.environment.Template, List[Union[str, jinja2.environment.Template]]]) – El nombre de la plantilla a renderizar. Si se da una lista, se renderizará el primer nombre que exista.
context (Any) – Las variables que deben estar disponibles en la plantilla.
- Tipo del valor devuelto
Nuevo en la versión 2.2.
- flask.stream_template_string(source, **context)¶
Renderiza una plantilla a partir de la cadena de origen dada con el contexto dado como un flujo. Esto devuelve un iterador de cadenas, que puede ser utilizado como una respuesta de flujo desde una vista.
- Parámetros
- Tipo del valor devuelto
Nuevo en la versión 2.2.
- flask.get_template_attribute(template_name, attribute)¶
Carga una macro (o variable) que una plantilla exporta. Esto puede usarse para invocar una macro desde el código de Python. Si por ejemplo tienes una plantilla llamada
_cider.html
con el siguiente contenido:{% macro hello(name) %}Hello {{ name }}!{% endmacro %}
Puedes acceder a esto desde el código Python así:
hello = get_template_attribute('_cider.html', 'hello') return hello('World')
Changelog
Nuevo en la versión 0.2.
Configuración¶
- class flask.Config(root_path, defaults=None)¶
Funciona exactamente como un dict, pero proporciona formas de llenarlo desde archivos o diccionarios especiales. Hay dos patrones comunes para rellenar la configuración.
O bien puede llenar la configuración de un archivo de configuración:
app.config.from_pyfile('yourconfig.cfg')
O, alternativamente, puede definir las opciones de configuración en el módulo que llama a
from_object()
o proporcionar una ruta de importación a un módulo que debe ser cargado. También es posible decirle que utilice el mismo módulo y con ello proporcionar los valores de configuración justo antes de la llamada:DEBUG = True SECRET_KEY = 'development key' app.config.from_object(__name__)
En ambos casos (carga desde cualquier archivo de Python o carga desde módulos), sólo se añaden claves en mayúsculas al config. Esto permite utilizar valores en minúsculas en el archivo config para valores temporales que no se añaden al config o definir las claves config en el mismo archivo que implementa la aplicación.
Probablemente la forma más interesante de cargar configuraciones es desde una variable de entorno que apunte a un archivo:
app.config.from_envvar('YOURAPPLICATION_SETTINGS')
En este caso, antes de lanzar la aplicación tienes que establecer esta variable de entorno en el archivo que quieres utilizar. En Linux y OS X utilice la sentencia export:
export YOURAPPLICATION_SETTINGS='/path/to/config/file'
En Windows utilice set en su lugar.
- Parámetros
- Tipo del valor devuelto
None
- from_envvar(variable_name, silent=False)¶
Carga una configuración desde una variable de entorno que apunta a un archivo de configuración. Esto es básicamente un atajo con mensajes de error más agradables para esta línea de código:
app.config.from_pyfile(os.environ['YOURAPPLICATION_SETTINGS'])
- from_file(filename, load, silent=False)¶
Actualiza los valores de la configuración a partir de un archivo que se carga con el parámetro
load
. Los datos cargados se pasan al métodofrom_mapping()
.import json app.config.from_file("config.json", load=json.load) import toml app.config.from_file("config.toml", load=toml.load)
- Parámetros
filename (str) – La ruta del archivo de datos. Puede ser una ruta absoluta o relativa a la ruta raíz de la configuración.
load (
Callable[[Reader], Mapping]
whereReader
implements aread
method.) – Un llamado que toma un manejador de archivo y devuelve un mapeo de los datos cargados desde el archivo.silent (bool) – Ignora el archivo si no existe.
- Returns
True
si el archivo se ha cargado con éxito.- Tipo del valor devuelto
Changelog
Nuevo en la versión 2.0.
- from_mapping(mapping=None, **kwargs)¶
Actualiza la configuración como
update()
ignorando los elementos con claves no superiores. :return: Siempre devuelveTrue
.Changelog
Nuevo en la versión 0.11.
- from_object(obj)¶
Actualiza los valores del objeto dado. Un objeto puede ser de uno de los dos tipos siguientes:
una cadena: En este caso se importará el objeto con ese nombre
una referencia a un objeto real: Ese objeto se utiliza directamente
Los objetos suelen ser módulos o clases.
from_object()
carga sólo los atributos en mayúsculas del módulo/clase. Un objetodict
no funcionará confrom_object()
porque las claves de undict
no son atributos de la clasedict
.Ejemplo de configuración por módulos:
app.config.from_object('yourapplication.default_config') from yourapplication import default_config app.config.from_object(default_config)
No se hace nada al objeto antes de cargarlo. Si el objeto es una clase y tiene atributos
@property
, es necesario instanciarlo antes de pasarlo a este método.No debe utilizar esta función para cargar la configuración real, sino los valores predeterminados de la configuración. La configuración real debe ser cargada con
from_pyfile()
e idealmente desde una ubicación que no esté dentro del paquete porque el paquete podría estar instalado en todo el sistema.Ver Desarrollo / Producción para un ejemplo de configuración basada en clases usando
from_object()
.
- from_prefixed_env(prefix='FLASK', *, loads=<function loads>)¶
Carga cualquier variable de entorno que empiece por
FLASK_
, eliminando el prefijo de la clave env para la clave config. Los valores se pasan a través de una función de carga para intentar convertirlos en tipos más específicos que las cadenas.Las claves se cargan en orden
sorted()
.La función de carga por defecto intenta analizar los valores como cualquier tipo JSON válido, incluyendo dicts y listas.
Se pueden establecer elementos específicos en los dicts anidados separando las claves con doble guión bajo (
__
). Si una clave intermedia no existe, se inicializará con un dict vacío.- Parámetros
prefix (str) – Cargar los env vars que comienzan con este prefijo, separados por un guión bajo (
_
).loads (Callable[[str], Any]) – Pase cada valor de cadena a esta función y utilice el valor devuelto como valor de configuración. Si se produce algún error se ignora y el valor sigue siendo una cadena. El valor por defecto es
json.loads()
.
- Tipo del valor devuelto
Changelog
Nuevo en la versión 2.1.
- from_pyfile(filename, silent=False)¶
Actualiza los valores de la configuración desde un archivo de Python. Esta función se comporta como si el archivo fuera importado como módulo con la función
from_object()
.- Parámetros
- Returns
True
si el archivo se ha cargado con éxito.- Tipo del valor devuelto
Changelog
Nuevo en la versión 0.7: parámetro silent.
- get_namespace(namespace, lowercase=True, trim_namespace=True)¶
Devuelve un diccionario que contiene un subconjunto de opciones de configuración que coinciden con el espacio de nombres/prefijo especificado. Ejemplo de uso:
app.config['IMAGE_STORE_TYPE'] = 'fs' app.config['IMAGE_STORE_PATH'] = '/var/app/images' app.config['IMAGE_STORE_BASE_URL'] = 'http://img.website.com' image_store_config = app.config.get_namespace('IMAGE_STORE_')
El diccionario resultante image_store_config tendría el siguiente aspecto:
{ 'type': 'fs', 'path': '/var/app/images', 'base_url': 'http://img.website.com' }
Esto suele ser útil cuando las opciones de configuración se asignan directamente a argumentos de palabras clave en funciones o constructores de clases.
- Parámetros
- Tipo del valor devuelto
Changelog
Nuevo en la versión 0.11.
Ayudas para streams¶
- flask.stream_with_context(generator_or_function)¶
Los contextos de petición desaparecen cuando la respuesta se inicia en el servidor. Esto se hace por razones de eficiencia y para que sea menos probable encontrar fugas de memoria con middlewares WSGI mal escritos. La desventaja es que si estás usando respuestas en flujo, el generador no puede acceder a la información de las peticiones.
Sin embargo, esta función puede ayudarte a mantener el contexto durante más tiempo:
from flask import stream_with_context, request, Response @app.route('/stream') def streamed_response(): @stream_with_context def generate(): yield 'Hello ' yield request.args['name'] yield '!' return Response(generate())
También puede utilizarse en torno a un generador específico:
from flask import stream_with_context, request, Response @app.route('/stream') def streamed_response(): def generate(): yield 'Hello ' yield request.args['name'] yield '!' return Response(stream_with_context(generate()))
Changelog
Nuevo en la versión 0.9.
Internos útiles¶
- class flask.ctx.RequestContext(app, environ, request=None, session=None)¶
El contexto de solicitud contiene información por solicitud. La aplicación Flask lo crea y empuja al principio de la petición, y luego lo saca al final de la misma. Creará el adaptador de URL y el objeto de solicitud para el entorno WSGI proporcionado.
No intente utilizar esta clase directamente, en su lugar utilice
test_request_context()
yrequest_context()
para crear este objeto.Cuando el contexto de la petición se abre, evaluará todas las funciones registradas en la aplicación para la ejecución de teardown (
teardown_request()
).El contexto de la petición es automáticamente extraído al final de la petición. Cuando se utiliza el depurador interactivo, el contexto será restaurado para que
request
siga siendo accesible. Del mismo modo, el cliente de prueba puede preservar el contexto después de que la solicitud termine. Sin embargo, las funciones de desmontaje pueden haber cerrado ya algunos recursos, como las conexiones a la base de datos.- Parámetros
- Tipo del valor devuelto
None
- copy()¶
Crea una copia de este contexto de solicitud con el mismo objeto de solicitud. Esto puede ser usado para mover un contexto de petición a un greenlet diferente. Debido a que el objeto de solicitud real es el mismo, esto no se puede utilizar para mover un contexto de solicitud a un hilo diferente a menos que el acceso al objeto de solicitud esté bloqueado.
Changelog
Distinto en la versión 1.1: Se utiliza el objeto de sesión actual en lugar de recargar los datos originales. Esto evita que flask.session apunte a un objeto desactualizado.
Nuevo en la versión 0.10.
- Tipo del valor devuelto
- match_request()¶
Puede ser sobrescrito por una subclase para engancharse a la coincidencia de la solicitud.
- Tipo del valor devuelto
None
- pop(exc=<object object>)¶
Despliega el contexto de la solicitud y lo desvincula al hacerlo. Esto también desencadenará la ejecución de las funciones registradas por el decorador
teardown_request()
.Changelog
Distinto en la versión 0.9: Se ha añadido el argumento exc.
- Parámetros
exc (Optional[BaseException]) –
- Tipo del valor devuelto
None
- flask.globals.request_ctx¶
La
RequestContext
actual. Si un contexto de solicitud no está activo, el acceso a los atributos de este proxy generará unRuntimeError
.Este es un objeto interno que es esencial para la forma en que Flask maneja las solicitudes. En la mayoría de los casos no debería ser necesario acceder a él. Lo más probable es que quieras
request
ysession
en su lugar.
- class flask.ctx.AppContext(app)¶
El contexto de la aplicación contiene información específica de la aplicación. Se crea un contexto de aplicación y se envía al principio de cada solicitud si no hay uno activo. También se envía un contexto de aplicación cuando se ejecutan comandos CLI.
- Parámetros
app (Flask) –
- Tipo del valor devuelto
None
- pop(exc=<object object>)¶
Muestra el contexto de la aplicación.
- Parámetros
exc (Optional[BaseException]) –
- Tipo del valor devuelto
None
- push()¶
Vincula el contexto de la aplicación al contexto actual.
- Tipo del valor devuelto
None
- flask.globals.app_ctx¶
La actual
AppContext
. Si un contexto de aplicación no está activo, el acceso a los atributos de este proxy generará unRuntimeError
.Este es un objeto interno que es esencial para la forma en que Flask maneja las solicitudes. En la mayoría de los casos no debería ser necesario acceder a él. Lo más probable es que quieras
current_app
yg
en su lugar.
- class flask.blueprints.BlueprintSetupState(blueprint, app, options, first_registration)¶
Objeto portador temporal para registrar un blueprint con la aplicación. Una instancia de esta clase es creada por el método
make_setup_state()
y posteriormente pasada a todas las funciones de callback de registro.- Parámetros
- Tipo del valor devuelto
None
- add_url_rule(rule, endpoint=None, view_func=None, **options)¶
Un método de ayuda para registrar una regla (y opcionalmente una función de vista) en la aplicación. El punto final se prefija automáticamente con el nombre del blueprint.
- app¶
una referencia a la aplicación actual
- blueprint¶
una referencia al plano que creó este estado de configuración.
- first_registration¶
como los blueprints pueden ser registrados varias veces en la aplicación y no todo quiere ser registrado varias veces en ella, este atributo puede ser utilizado para averiguar si el blueprint ya fue registrado en el pasado.
- options¶
un diccionario con todas las opciones que se pasaron al método
register_blueprint()
.
- subdomain¶
El subdominio para el que debe estar activo el blueprint,
None
en caso contrario.
- url_defaults¶
Un diccionario con los valores predeterminados de la URL que se añade a todas y cada una de las URL que se definieron con el plano.
- url_prefix¶
El prefijo que debe usarse para todas las URLs definidas en el blueprint.
Señales¶
Changelog
Nuevo en la versión 0.6.
- signals.signals_available¶
True
si el sistema de señalización está disponible. Este es el caso cuando blinker está instalado.
En Flask existen las siguientes señales:
- flask.template_rendered¶
Esta señal se envía cuando una plantilla se ha renderizado con éxito. La señal se invoca con la instancia de la plantilla como template y el contexto como diccionario (llamado context).
Ejemplo de suscriptor:
def log_template_renders(sender, template, context, **extra): sender.logger.debug('Rendering template "%s" with context %s', template.name or 'string template', context) from flask import template_rendered template_rendered.connect(log_template_renders, app)
- flask.before_render_template
Esta señal se envía antes del proceso de renderización de la plantilla. La señal se invoca con la instancia de la plantilla como template y el contexto como diccionario (llamado context).
Ejemplo de suscriptor:
def log_template_renders(sender, template, context, **extra): sender.logger.debug('Rendering template "%s" with context %s', template.name or 'string template', context) from flask import before_render_template before_render_template.connect(log_template_renders, app)
- flask.request_started¶
Esta señal es enviada cuando el contexto de la petición está configurado, antes de que ocurra cualquier procesamiento de la petición. Dado que el contexto de la solicitud ya está vinculado, el suscriptor puede acceder a la solicitud con los proxies globales estándar como
request
.Ejemplo de suscriptor:
def log_request(sender, **extra): sender.logger.debug('Request context is set up') from flask import request_started request_started.connect(log_request, app)
- flask.request_finished¶
Esta señal se envía justo antes de que se envíe la respuesta al cliente. Se le pasa la respuesta a enviar llamada response.
Ejemplo de suscriptor:
def log_response(sender, response, **extra): sender.logger.debug('Request context is about to close down. ' 'Response: %s', response) from flask import request_finished request_finished.connect(log_response, app)
- flask.got_request_exception¶
Esta señal se envía cuando se produce una excepción no controlada durante el procesamiento de la solicitud, incluso durante la depuración. La excepción se pasa al suscriptor como
excepción
.Esta señal no se envía para
HTTPException
, u otras excepciones que tengan manejadores de error registrados, a menos que la excepción haya sido lanzada desde un manejador de errores.Este ejemplo muestra cómo hacer un registro extra si una teórica
SecurityException
fue levantada:from flask import got_request_exception def log_security_exception(sender, exception, **extra): if not isinstance(exception, SecurityException): return security_logger.exception( f"SecurityException at {request.url!r}", exc_info=exception, ) got_request_exception.connect(log_security_exception, app)
- flask.request_tearing_down¶
Esta señal se envía cuando la solicitud se está derribando. Se llama siempre, incluso si se produce una excepción. Actualmente las funciones que escuchan esta señal son llamadas después de los manejadores regulares de teardown, pero esto no es algo en lo que se pueda confiar.
Ejemplo de suscriptor:
def close_db_connection(sender, **extra): session.close() from flask import request_tearing_down request_tearing_down.connect(close_db_connection, app)
A partir de Flask 0.9, también se le pasará un argumento de la palabra clave exc que tiene una referencia a la excepción que causó el teardown si es que hubo una.
- flask.appcontext_tearing_down¶
Esta señal se envía cuando el contexto de la aplicación se está cerrando. Se llama siempre, incluso si se produce una excepción. Actualmente las funciones que escuchan esta señal son llamadas después de los manejadores regulares de teardown, pero esto no es algo en lo que puedas confiar.
Ejemplo de suscriptor:
def close_db_connection(sender, **extra): session.close() from flask import appcontext_tearing_down appcontext_tearing_down.connect(close_db_connection, app)
También se le pasará un argumento de la palabra clave exc que tiene una referencia a la excepción que causó el derribo si es que la hubo.
- flask.appcontext_pushed¶
Esta señal se envía cuando se empuja un contexto de aplicación. El remitente es la aplicación. Suele ser útil en los unittests para enganchar temporalmente la información. Por ejemplo, se puede utilizar para establecer un recurso temprano en el objeto g.
Ejemplo de uso:
from contextlib import contextmanager from flask import appcontext_pushed @contextmanager def user_set(app, user): def handler(sender, **kwargs): g.user = user with appcontext_pushed.connected_to(handler, app): yield
Y en el testcode:
def test_user_me(self): with user_set(app, 'john'): c = app.test_client() resp = c.get('/users/me') assert resp.data == 'username=john'
Changelog
Nuevo en la versión 0.10.
- flask.appcontext_popped¶
Esta señal se envía cuando un contexto de aplicación se abre. El remitente es la aplicación. Suele coincidir con la señal
appcontext_tearing_down
.Changelog
Nuevo en la versión 0.10.
- flask.message_flashed¶
Esta señal se envía cuando la aplicación está emitiendo un mensaje. El mensaje se envía como argumento de la palabra clave message y la categoría como category.
Ejemplo de suscriptor:
recorded = [] def record(sender, message, category, **extra): recorded.append((message, category)) from flask import message_flashed message_flashed.connect(record, app)
Changelog
Nuevo en la versión 0.10.
- class signals.Namespace¶
Un alias para
blinker.base.Namespace
si blinker está disponible, de lo contrario una clase ficticia que crea señales falsas. Esta clase está disponible para las extensiones de Flask que quieran proporcionar el mismo sistema de fallback que el propio Flask.- signal(name, doc=None)¶
Crea una nueva señal para este espacio de nombres si blinker está disponible, de lo contrario devuelve una señal falsa que tiene un método de envío que no hará nada pero fallará con un
RuntimeError
para todas las demás operaciones, incluyendo la conexión.
Vistas basadas en clases¶
Changelog
Nuevo en la versión 0.7.
- class flask.views.View¶
Subclase de esta clase y anular
dispatch_request()
para crear una vista genérica basada en la clase. Llame aas_view()
para crear una función de vista que cree una instancia de la clase con los argumentos dados y llame a su métododispatch_request
con cualquier variable de la URL.Consulte Vistas basadas en las clases para obtener una guía detallada.
class Hello(View): init_every_request = False def dispatch_request(self, name): return f"Hello, {name}!" app.add_url_rule( "/hello/<name>", view_func=Hello.as_view("hello") )
Establezca
methods
en la clase para cambiar los métodos que acepta la vista.Establezca
decorators
en la clase para aplicar una lista de decoradores a la función de vista generada ¡Los decoradores aplicados a la propia clase no se aplicarán a la función de vista generada!Establece
init_every_request
aFalse
para mayor eficiencia, a menos que necesites almacenar datos globales de la solicitud enself
.- classmethod as_view(name, *class_args, **class_kwargs)¶
Convierte la clase en una función de vista que puede ser registrada para una ruta.
Por defecto, la vista generada creará una nueva instancia de la clase view para cada petición y llamará a su método
dispatch_request()
. Si la clase de vista estableceinit_every_request
aFalse
, se utilizará la misma instancia para cada solicitud.Los argumentos pasados a este método son enviados al método
__init__
de la clase view.Distinto en la versión 2.2: Añadido el atributo de clase
init_every_request
.- Parámetros
- Tipo del valor devuelto
Union[Callable[[…], Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, …]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, …]]]]]], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], int], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], int, Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, …]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, …]]]]]], WSGIApplication]], Callable[[…], Awaitable[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, …]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, …]]]]]], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], int], Tuple[Union[Response, str, bytes, List[Any], Dict[str, Any], Iterator[str], Iterator[bytes]], int, Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, …]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, …]]]]]], WSGIApplication]]]]