API¶
This part of the documentation covers all the interfaces of Flask. For parts where Flask depends on external libraries, we document the most important right here and provide links to the canonical documentation.
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 (str | None) – 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 (str | os.PathLike | None) – 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 (str | None) – 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 (str | os.PathLike | None) – 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 (str | None) – 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 (str | None) – 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.Changelog
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 (str | None) – 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 (ft.RouteCallable | None) – La función de la vista a asociar con el nombre del endpoint.
provide_automatic_options (bool | None) – Añade el método
OPTIONS
y responde a las peticionesOPTIONS
automáticamente.options (t.Any) – Opciones extra pasadas al objeto
Rule
.
- 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.This is available on both app and blueprint objects. When used on an app, this executes after every request. When used on a blueprint, this executes after every request that the blueprint handles. To register with a blueprint and execute after every request, use
Blueprint.after_app_request()
.- Parámetros
f (flask.scaffold.T_after_request) –
- Tipo del valor devuelto
flask.scaffold.T_after_request
- after_request_funcs: dict[ft.AppOrBlueprintKey, 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_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.This is available on both app and blueprint objects. When used on an app, this executes before every request. When used on a blueprint, this executes before every request that the blueprint handles. To register with a blueprint and execute before every request, use
Blueprint.before_app_request()
.- Parámetros
f (flask.scaffold.T_before_request) –
- Tipo del valor devuelto
flask.scaffold.T_before_request
- before_request_funcs: dict[ft.AppOrBlueprintKey, 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: 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)¶
Registers a template context processor function. These functions run before rendering a template. The keys of the returned dict are added as variables available in the template.
This is available on both app and blueprint objects. When used on an app, this is called for every rendered template. When used on a blueprint, this is called for templates rendered from the blueprint’s views. To register with a blueprint and affect every template, use
Blueprint.app_context_processor()
.- 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 (flask.wrappers.Request | None) –
- Tipo del valor devuelto
- property debug: bool¶
Whether debug mode is enabled. When using
flask run
to start the development server, an interactive debugger will be shown for unhandled exceptions, and the server will be reloaded when code changes. This maps to theDEBUG
config key. It may not behave as expected if set late.No active el modo de depuración cuando se despliegue en producción.
Default:
False
- default_config = {'APPLICATION_ROOT': '/', 'DEBUG': None, 'EXPLAIN_TEMPLATE_LOADING': False, '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
ft.ResponseReturnValue
- 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 (BaseException | None) –
- 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 (BaseException | None) – 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.
- error_handler_spec: dict[ft.AppOrBlueprintKey, dict[int | None, dict[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
This is available on both app and blueprint objects. When used on an app, this can handle errors from every request. When used on a blueprint, this can handle errors from requests that the blueprint handles. To register with a blueprint and affect every request, use
Blueprint.app_errorhandler()
.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.Obsoleto desde la versión 2.3: Will be removed in Flask 2.4.
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
.If
PROPAGATE_EXCEPTIONS
isTrue
, such as in debug mode, the error will be re-raised so that the debugger can display it. Otherwise, the original exception is logged, and anInternalServerError
is returned.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
e (HTTPException) –
- Tipo del valor devuelto
HTTPException | ft.ResponseReturnValue
- 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
HTTPException | ft.ResponseReturnValue
- 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
t.ValuesView[Blueprint]
- 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: jinja2.loaders.FileSystemLoader | None¶
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: JSONProvider¶
Provides access to JSON methods. Functions in
flask.json
will call methods on this provider when the application context is active. Used for handling JSON requests and responses.An instance of
json_provider_class
. Can be customized by changing that attribute on a subclass, or by assigning to this attribute afterwards.The default,
DefaultJSONProvider
, uses Python’s built-injson
library. A different provider can use a different JSON library.Changelog
Nuevo en la versión 2.2.
- json_provider_class¶
- 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 (tuple[type, BaseException, traceback] | 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
.Changelog
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 (ft.ResponseReturnValue) – 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
Changelog
Distinto en la versión 2.2: Un generador se convertirá en una respuesta en streaming. Una lista se convertirá en una respuesta JSON.
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
ft.ResponseReturnValue | None
- 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
- 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
Changelog
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 (t.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.
- 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
.The
FLASK_DEBUG
environment variable will overridedebug
.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
Distinto en la versión 2.2: Autoescaping is now enabled by default for
.svg
files.Nuevo en la versión 0.5.
- 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_interface: 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: 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 (BaseException | None) –
- Tipo del valor devuelto
- property static_folder: str | None¶
La ruta absoluta a la carpeta estática configurada.
None
si no se ha configurado ninguna carpeta estática.
- property static_url_path: str | None¶
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: 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.
This is available on both app and blueprint objects. When used on an app, this executes after every request. When used on a blueprint, this executes after every request that the blueprint handles. To register with a blueprint and execute after every request, use
Blueprint.teardown_app_request()
.- Parámetros
f (flask.scaffold.T_teardown) –
- Tipo del valor devuelto
flask.scaffold.T_teardown
- teardown_request_funcs: dict[ft.AppOrBlueprintKey, 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: dict[ft.AppOrBlueprintKey, 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.
- 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 (t.Any) –
- Tipo del valor devuelto
- test_cli_runner_class: type[FlaskCliRunner] | None = 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
use_cookies (bool) –
kwargs (t.Any) –
- Tipo del valor devuelto
- test_client_class: type[FlaskClient] | None = 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 app.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: list[t.Callable[[Exception, str, 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: dict[ft.AppOrBlueprintKey, 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.
This is available on both app and blueprint objects. When used on an app, this is called for every request. When used on a blueprint, this is called for requests that the blueprint handles. To register with a blueprint and affect every request, use
Blueprint.app_url_defaults()
.- 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
Changelog
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.
This is available on both app and blueprint objects. When used on an app, this is called for every request. When used on a blueprint, this is called for requests that the blueprint handles. To register with a blueprint and affect every request, use
Blueprint.app_url_value_preprocessor()
.- Parámetros
f (flask.scaffold.T_url_value_preprocessor) –
- Tipo del valor devuelto
flask.scaffold.T_url_value_preprocessor
- url_value_preprocessors: dict[ft.AppOrBlueprintKey, 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: 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 (str | os.PathLike | None) – 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 (str | None) – 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 (str | os.PathLike | None) – 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 (str | None) – Una ruta que se añade a todas las URL del blueprint, para distinguirlas del resto de las rutas de la aplicación.
subdomain (str | None) – Un subdominio en el que las rutas blueprint coincidirán por defecto.
url_defaults (dict | None) – Un diccionario de valores por defecto que las rutas de blueprint recibirán por defecto.
root_path (str | None) – 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 (str | None) – The name of the blueprint’s CLI group. If not set, the blueprint name will be used.
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)¶
Register a template filter, available in any template rendered by the application. Works like the
app_template_filter()
decorator. Equivalent toFlask.add_template_filter()
.
- add_app_template_global(f, name=None)¶
Register a template global, available in any template rendered by the application. Works like the
app_template_global()
decorator. Equivalent toFlask.add_template_global()
.Changelog
Nuevo en la versión 0.10.
- add_app_template_test(f, name=None)¶
Register a template test, available in any template rendered by the application. Works like the
app_template_test()
decorator. Equivalent toFlask.add_template_test()
.Changelog
Nuevo en la versión 0.10.
- add_url_rule(rule, endpoint=None, view_func=None, provide_automatic_options=None, **options)¶
Register a URL rule with the blueprint. See
Flask.add_url_rule()
for full documentation.The URL rule is prefixed with the blueprint’s URL prefix. The endpoint name, used with
url_for()
, is prefixed with the blueprint’s name.
- after_app_request(f)¶
Like
after_request()
, but after every request, not only those handled by the blueprint. Equivalent toFlask.after_request()
.- 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.This is available on both app and blueprint objects. When used on an app, this executes after every request. When used on a blueprint, this executes after every request that the blueprint handles. To register with a blueprint and execute after every request, use
Blueprint.after_app_request()
.- Parámetros
f (flask.scaffold.T_after_request) –
- Tipo del valor devuelto
flask.scaffold.T_after_request
- after_request_funcs: dict[ft.AppOrBlueprintKey, 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)¶
Like
context_processor()
, but for templates rendered by every view, not only by the blueprint. Equivalent toFlask.context_processor()
.- Parámetros
f (flask.blueprints.T_template_context_processor) –
- Tipo del valor devuelto
flask.blueprints.T_template_context_processor
- app_errorhandler(code)¶
Like
errorhandler()
, but for every request, not only those handled by the blueprint. Equivalent toFlask.errorhandler()
.
- app_template_filter(name=None)¶
Register a template filter, available in any template rendered by the application. Equivalent to
Flask.template_filter()
.
- app_template_global(name=None)¶
Register a template global, available in any template rendered by the application. Equivalent to
Flask.template_global()
.Changelog
Nuevo en la versión 0.10.
- app_template_test(name=None)¶
Register a template test, available in any template rendered by the application. Equivalent to
Flask.template_test()
.Changelog
Nuevo en la versión 0.10.
- app_url_defaults(f)¶
Like
url_defaults()
, but for every request, not only those handled by the blueprint. Equivalent toFlask.url_defaults()
.- Parámetros
f (flask.blueprints.T_url_defaults) –
- Tipo del valor devuelto
flask.blueprints.T_url_defaults
- app_url_value_preprocessor(f)¶
Like
url_value_preprocessor()
, but for every request, not only those handled by the blueprint. Equivalent toFlask.url_value_preprocessor()
.- Parámetros
f (flask.blueprints.T_url_value_preprocessor) –
- Tipo del valor devuelto
flask.blueprints.T_url_value_preprocessor
- before_app_request(f)¶
Like
before_request()
, but before every request, not only those handled by the blueprint. Equivalent toFlask.before_request()
.- 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.This is available on both app and blueprint objects. When used on an app, this executes before every request. When used on a blueprint, this executes before every request that the blueprint handles. To register with a blueprint and execute before every request, use
Blueprint.before_app_request()
.- Parámetros
f (flask.scaffold.T_before_request) –
- Tipo del valor devuelto
flask.scaffold.T_before_request
- before_request_funcs: dict[ft.AppOrBlueprintKey, 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)¶
Registers a template context processor function. These functions run before rendering a template. The keys of the returned dict are added as variables available in the template.
This is available on both app and blueprint objects. When used on an app, this is called for every rendered template. When used on a blueprint, this is called for templates rendered from the blueprint’s views. To register with a blueprint and affect every template, use
Blueprint.app_context_processor()
.- 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: dict[ft.AppOrBlueprintKey, dict[int | None, dict[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
This is available on both app and blueprint objects. When used on an app, this can handle errors from every request. When used on a blueprint, this can handle errors from requests that the blueprint handles. To register with a blueprint and affect every request, use
Blueprint.app_errorhandler()
.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: jinja2.loaders.FileSystemLoader | None¶
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.
- 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
Distinto en la versión 2.3: Nested blueprints now correctly apply subdomains.
Changelog
Distinto en la versión 2.1: Registering the same blueprint with the same name multiple times is an error.
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
.
- 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.
- 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: str | None¶
La ruta absoluta a la carpeta estática configurada.
None
si no se ha configurado ninguna carpeta estática.
- property static_url_path: str | None¶
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)¶
Like
teardown_request()
, but after every request, not only those handled by the blueprint. Equivalent toFlask.teardown_request()
.- 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.
This is available on both app and blueprint objects. When used on an app, this executes after every request. When used on a blueprint, this executes after every request that the blueprint handles. To register with a blueprint and execute after every request, use
Blueprint.teardown_app_request()
.- Parámetros
f (flask.scaffold.T_teardown) –
- Tipo del valor devuelto
flask.scaffold.T_teardown
- teardown_request_funcs: dict[ft.AppOrBlueprintKey, 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: dict[ft.AppOrBlueprintKey, 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: dict[ft.AppOrBlueprintKey, 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.
This is available on both app and blueprint objects. When used on an app, this is called for every request. When used on a blueprint, this is called for requests that the blueprint handles. To register with a blueprint and affect every request, use
Blueprint.app_url_defaults()
.- 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.
This is available on both app and blueprint objects. When used on an app, this is called for every request. When used on a blueprint, this is called for requests that the blueprint handles. To register with a blueprint and affect every request, use
Blueprint.app_url_value_preprocessor()
.- Parámetros
f (flask.scaffold.T_url_value_preprocessor) –
- Tipo del valor devuelto
flask.scaffold.T_url_value_preprocessor
- url_value_preprocessors: dict[ft.AppOrBlueprintKey, 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: 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.accept.CharsetAccept¶
Lista de conjuntos de caracteres que soporta este cliente como objeto
CharsetAccept
.
- property accept_encodings: werkzeug.datastructures.accept.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.accept.LanguageAccept¶
Lista de idiomas que este cliente acepta como objeto
LanguageAccept
.
- property accept_mimetypes: werkzeug.datastructures.accept.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.
- Parámetros
f (t.Callable[[Request], WSGIApplication]) – la llamada WSGI para decorar
- Returns
una nueva llamada WSGI
- Tipo del valor devuelto
WSGIApplication
- property args: werkzeug.datastructures.structures.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.Distinto en la versión 2.3: Invalid bytes remain percent encoded.
- property authorization: werkzeug.datastructures.auth.Authorization | None¶
The
Authorization
header parsed into anAuthorization
object.None
if the header is not present.Distinto en la versión 2.3:
Authorization
is no longer adict
. Thetoken
attribute was added for auth schemes that use a token instead of parameters.
- property blueprint: str | None¶
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.cache_control.RequestCacheControl¶
Un objeto
RequestCacheControl
para las cabeceras de control de caché entrantes.
- property charset: str¶
The charset used to decode body, form, and cookie data. Defaults to UTF-8.
Obsoleto desde la versión 2.3: Will be removed in Werkzeug 3.0. Request data must always be UTF-8.
- 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: int | None¶
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.structures.ImmutableMultiDict[str, str]¶
Un
dict
con el contenido de todas las cookies transmitidas con la solicitud.
- property data: bytes¶
The raw data read from
stream
. Will be empty if the request represents form data.To get the raw data even if it represents form data, use
get_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.
- dict_storage_class¶
alias of
werkzeug.datastructures.structures.ImmutableMultiDict
- property encoding_errors: str¶
How errors when decoding bytes are handled. Defaults to «replace».
Obsoleto desde la versión 2.3: Will be removed in Werkzeug 3.0.
- property endpoint: str | None¶
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.structures.ImmutableMultiDict[str, werkzeug.datastructures.file_storage.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.structures.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.If the mimetype does not indicate JSON (application/json, see
is_json
), or parsing fails,on_json_loading_failed()
is called and its return value is used as the return value. By default this raises a 415 Unsupported Media Type resp.- Parámetros
- Tipo del valor devuelto
Distinto en la versión 2.3: Raise a 415 error instead of 400.
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.etag.ETags¶
Un objeto que contiene todas las etiquetas electrónicas de la cabecera If-Match.
- Tipo del valor devuelto
- property if_modified_since: datetime.datetime | None¶
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.etag.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.range.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: datetime.datetime | None¶
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¶
The raw WSGI input stream, without any safety checks.
This is dangerous to use. It does not guard against infinite streams or reading past
content_length
ormax_content_length
.Use
stream
instead.
- 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.If the request content type is not
application/json
, this will raise a 415 Unsupported Media Type error.Distinto en la versión 2.3: Raise a 415 error instead of 400.
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: int | None¶
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 (ValueError | None) – 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
Distinto en la versión 2.3: Raise a 415 error instead of 400.
- 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¶
alias of
werkzeug.datastructures.structures.ImmutableMultiDict
- 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.structures.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: werkzeug.datastructures.range.Range | None¶
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: Exception | None = 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]¶
The WSGI input stream, with safety checks. This stream can only be consumed once.
Use
get_data()
to get the full data as bytes or text. Thedata
attribute will contain the full bytes only if they do not represent form data. Theform
attribute will contain the parsed form data in that case.Unlike
input_stream
, this stream guards against infinite streams or reading pastcontent_length
ormax_content_length
.If
max_content_length
is set, it can be enforced on streams ifwsgi.input_terminated
is set. Otherwise, an empty stream is returned.If the limit is reached before the underlying stream is exhausted (such as a file that is too large, or an infinite stream), the remaining contents of the stream cannot be read safely. Depending on how the server handles this, clients may show a «connection reset» failure instead of seeing the 413 response.
Distinto en la versión 2.3: Check
max_content_length
preemptively and while reading.Changelog
Distinto en la versión 0.9: The stream is always set (but may be consumed) even if form parsing was accessed first.
- 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¶
The charset to use when decoding percent-encoded bytes in
args
. Defaults to the value ofcharset
, which defaults to UTF-8.Obsoleto desde la versión 2.3: Will be removed in Werkzeug 3.0. Percent-encoded bytes must always be UTF-8.
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: Rule | None = 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.1: The built-in parser was removed. Set
user_agent_class
to aUserAgent
subclass to parse data from the string.
- user_agent_class¶
alias of
werkzeug.user_agent.UserAgent
- property values: werkzeug.datastructures.structures.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¶
To access incoming request data, you can use the global request object. Flask parses incoming request data for you and gives you access to it through that global object. Internally Flask makes sure that you always get the correct data for the active thread if you are in a multithreaded environment.
Se trata de un proxy. 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.structures.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.cache_control.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.
- Tipo del valor devuelto
int | None
- 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.
- property charset: str¶
The charset used to encode body and cookie data. Defaults to UTF-8.
Obsoleto desde la versión 2.3: Will be removed in Werkzeug 3.0. Response data must always be UTF-8.
- 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.structures.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.range.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.csp.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.csp.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: 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 | None) – 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: An
ETag
header is always added.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.
- Parámetros
environ (WSGIEnvironment) – el entorno WSGI de la solicitud.
- Returns
un iterable de respuesta.
- Tipo del valor devuelto
t.Iterable[bytes]
- 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
Headers
- 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 (WSGIEnvironment | Request) – un objeto de solicitud o entorno WSGI que se utilizará para condicionar la respuesta.
accept_ranges (bool | str) – This parameter dictates the value of Accept-Ranges header. If
False
(default), the header is not set. IfTrue
, it will be set to"bytes"
. If it’s a string, it will use this value.complete_length (int | None) – 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.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: datetime.datetime | None¶
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 (str | None) – 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.structures.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.auth.WWWAuthenticate¶
The
WWW-Authenticate
header parsed into aWWWAuthenticate
object. Modifying the object will modify the header value.This header is not set by default. To set this header, assign an instance of
WWWAuthenticate
to this attribute.response.www_authenticate = WWWAuthenticate( "basic", {"realm": "Authentication Required"} )
Multiple values for this header can be sent to give the client multiple options. Assign a list to set multiple headers. However, modifying the items in the list will not automatically update the header values, and accessing this attribute will only ever return the first value.
To unset this header, assign
None
or usedel
.Distinto en la versión 2.3: This attribute can be assigned to to set the header. A list can be assigned to set multiple header values. Use
del
to unset the header.Distinto en la versión 2.3:
WWWAuthenticate
is no longer adict
. Thetoken
attribute was added for auth challenges that use a token instead of parameters.
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 proxy. 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
if the session object detected a modification. Be advised that modifications on mutable structures are not picked up automatically, in that situation you have to explicitly set the attribute toTrue
yourself. Here an example:# 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¶
If set to
True
the session lives forpermanent_session_lifetime
seconds. The default is 31 days. If set toFalse
(which is the default) the session will be deleted when the user closes the browser.
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)¶
The value of the
Domain
parameter on the session cookie. If not set, browsers will only send the cookie to the exact domain it was set from. Otherwise, they will send it to any subdomain of the given value as well.Uses the
SESSION_COOKIE_DOMAIN
config.Distinto en la versión 2.3: Not set by default, does not fall back to
SERVER_NAME
.
- 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)¶
The name of the session cookie. Uses``app.config[«SESSION_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 (SessionMixin) –
- Tipo del valor devuelto
datetime | None
- 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
SessionMixin | None
- 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 (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 (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
SecureCookieSession | None
- 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 (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 (t.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 (t.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
The PERMANENT_SESSION_LIFETIME
config can be an integer or timedelta
.
The permanent_session_lifetime
attribute is always a
timedelta
.
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.
- Parámetros
args (t.Any) –
kwargs (t.Any) –
- Tipo del valor devuelto
None
- 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 (t.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 (t.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: 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.- Parámetros
app (Flask) –
kwargs (t.Any) –
- Tipo del valor devuelto
None
- 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¶
To share data that is valid for one request only from one function to
another, a global variable is not good enough because it would break in
threaded environments. Flask provides you with a special object that
ensures it is only valid for the active request and that will return
different values for each request. In a nutshell: it does the right
thing, like it does for request
and 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
Changelog
Distinto en la versión 2.2: Llama a
current_app.url_for
, permitiendo que una aplicación anule el comportamiento.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
code (int | BaseResponse) – El código de estado de la excepción, que debe registrarse en
app.aborter
.args (t.Any) – Pasó a la excepción.
kwargs (t.Any) – Pasó a la excepción.
- Tipo del valor devuelto
t.NoReturn
Changelog
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
Changelog
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.
- Parámetros
args (t.Any) –
- Tipo del valor devuelto
- 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 (os.PathLike | str | t.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 (str | None) – 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 (str | None) – 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 (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 (datetime | int | float | None) – 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 (None | (int | t.Callable[[str | None], int | None])) – 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 (os.PathLike | str) – El directorio en el que
path
debe estar ubicado, relativo a la ruta raíz de la aplicación actual.path (os.PathLike | str) – La ruta del archivo a enviar, relativa al
directory
.kwargs (t.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.
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 uses Python’s built-in json
module for handling JSON by
default. The JSON implementation can be changed by assigning a different
provider to flask.Flask.json_provider_class
or
flask.Flask.json
. The functions provided by flask.json
will
use methods on app.json
if an app context is active.
Jinja’s |tojson
filter is configured to use the app’s JSON provider.
The filter marks the output with |safe
. Use it to render data inside
HTML <script>
tags.
<script>
const names = {{ names|tojson }};
renderChart(names, {{ axis_data|tojson }});
</script>
- flask.json.jsonify(*args, **kwargs)¶
Serialize the given arguments as JSON, and return a
Response
object with theapplication/json
mimetype. A dict or list returned from a view will be converted to a JSON response automatically without needing to call this.This requires an active request or application context, and calls
app.json.response()
.In debug mode, the output is formatted with indentation to make it easier to read. This may also be controlled by the provider.
Either positional or keyword arguments can be given, not both. If no arguments are given,
None
is serialized.- Parámetros
args (t.Any) – A single value to serialize, or multiple values to treat as a list to serialize.
kwargs (t.Any) – Treat as a dict to serialize.
- Tipo del valor devuelto
Changelog
Distinto en la versión 2.2: Calls
current_app.json.response
, allowing an app to override the behavior.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: Added support for serializing top-level arrays. This was a security risk in ancient browsers. See Seguridad JSON.
Nuevo en la versión 0.2.
- flask.json.dumps(obj, **kwargs)¶
Serialize data as JSON.
If
current_app
is available, it will use itsapp.json.dumps()
method, otherwise it will usejson.dumps()
.- Parámetros
- Tipo del valor devuelto
Distinto en la versión 2.3: The
app
parameter was removed.Changelog
Distinto en la versión 2.2: Calls
current_app.json.dumps
, allowing an app to override the behavior.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
will be removed in 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, **kwargs)¶
Serialize data as JSON and write to a file.
If
current_app
is available, it will use itsapp.json.dump()
method, otherwise it will usejson.dump()
.- Parámetros
- Tipo del valor devuelto
None
Distinto en la versión 2.3: The
app
parameter was removed.Changelog
Distinto en la versión 2.2: Calls
current_app.json.dump
, allowing an app to override the behavior.Distinto en la versión 2.0: Writing to a binary file, and the
encoding
argument, will be removed in Flask 2.1.
- flask.json.loads(s, **kwargs)¶
Deserialize data as JSON.
If
current_app
is available, it will use itsapp.json.loads()
method, otherwise it will usejson.loads()
.- Parámetros
- Tipo del valor devuelto
Distinto en la versión 2.3: The
app
parameter was removed.Changelog
Distinto en la versión 2.2: Calls
current_app.json.loads
, allowing an app to override the behavior.Distinto en la versión 2.0:
encoding
will be removed in Flask 2.1. The data must be a string or UTF-8 bytes.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, **kwargs)¶
Deserialize data as JSON read from a file.
If
current_app
is available, it will use itsapp.json.load()
method, otherwise it will usejson.load()
.- Parámetros
- Tipo del valor devuelto
Distinto en la versión 2.3: The
app
parameter was removed.Changelog
Distinto en la versión 2.2: Calls
current_app.json.load
, allowing an app to override the behavior.Distinto en la versión 2.2: The
app
parameter will be removed in Flask 2.3.Distinto en la versión 2.0:
encoding
will be removed in Flask 2.1. The file must be text mode, or binary mode with UTF-8 bytes.
- class flask.json.provider.JSONProvider(app)¶
A standard set of JSON operations for an application. Subclasses of this can be used to customize JSON behavior or use different JSON libraries.
To implement a provider for a specific library, subclass this base class and implement at least
dumps()
andloads()
. All other methods have default implementations.To use a different provider, either subclass
Flask
and setjson_provider_class
to a provider class, or setapp.json
to an instance of the class.- Parámetros
app (Flask) – An application instance. This will be stored as a
weakref.proxy
on the_app
attribute.- Tipo del valor devuelto
None
Changelog
Nuevo en la versión 2.2.
- dumps(obj, **kwargs)¶
Serialize data as JSON.
- dump(obj, fp, **kwargs)¶
Serialize data as JSON and write to a file.
- loads(s, **kwargs)¶
Deserialize data as JSON.
- load(fp, **kwargs)¶
Deserialize data as JSON read from a file.
- response(*args, **kwargs)¶
Serialize the given arguments as JSON, and return a
Response
object with theapplication/json
mimetype.The
jsonify()
function calls this method for the current application.Either positional or keyword arguments can be given, not both. If no arguments are given,
None
is serialized.- Parámetros
args (t.Any) – A single value to serialize, or multiple values to treat as a list to serialize.
kwargs (t.Any) – Treat as a dict to serialize.
- Tipo del valor devuelto
- class flask.json.provider.DefaultJSONProvider(app)¶
Provide JSON operations using Python’s built-in
json
library. Serializes the following additional data types:datetime.datetime
anddatetime.date
are serialized to RFC 822 strings. This is the same as the HTTP date format.uuid.UUID
is serialized to a string.dataclasses.dataclass
is passed todataclasses.asdict()
.Markup
(or any object with a__html__
method) will call the__html__
method to get a string.
- Parámetros
app (Flask) –
- Tipo del valor devuelto
None
- static default(o)¶
Apply this function to any object that
json.dumps()
does not know how to serialize. It should return a valid JSON type or raise aTypeError
.
- ensure_ascii = True¶
Replace non-ASCII characters with escape sequences. This may be more compatible with some clients, but can be disabled for better performance and size.
- sort_keys = True¶
Sort the keys in any serialized dicts. This may be useful for some caching situations, but can be disabled for better performance. When enabled, keys must all be strings, they are not converted before sorting.
- compact: bool | None = None¶
If
True
, orNone
out of debug mode, theresponse()
output will not add indentation, newlines, or spaces. IfFalse
, orNone
in debug mode, it will use a non-compact representation.
- mimetype = 'application/json'¶
The mimetype set in
response()
.
- dumps(obj, **kwargs)¶
Serialize data as JSON to a string.
Keyword arguments are passed to
json.dumps()
. Sets some parameter defaults from thedefault
,ensure_ascii
, andsort_keys
attributes.- Parámetros
obj (Any) – The data to serialize.
kwargs (Any) – Passed to
json.dumps()
.
- Tipo del valor devuelto
- loads(s, **kwargs)¶
Deserialize data as JSON from a string or bytes.
- Parámetros
kwargs (Any) – Passed to
json.loads()
.
- Tipo del valor devuelto
- response(*args, **kwargs)¶
Serialize the given arguments as JSON, and return a
Response
object with it. The response mimetype will be «application/json» and can be changed withmimetype
.If
compact
isFalse
or debug mode is enabled, the output will be formatted to be easier to read.Either positional or keyword arguments can be given, not both. If no arguments are given,
None
is serialized.- Parámetros
args (t.Any) – A single value to serialize, or multiple values to treat as a list to serialize.
kwargs (t.Any) – Treat as a dict to serialize.
- Tipo del valor devuelto
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: str | None = 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 (str | jinja2.environment.Template | list[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 (str | jinja2.environment.Template | list[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
Changelog
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
Changelog
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, text=True)¶
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 tomllib app.config.from_file("config.toml", load=tomllib.load, text=False)
- 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.
text (bool) – Open the file in text or binary mode.
- Returns
True
si el archivo se ha cargado con éxito.- Tipo del valor devuelto
Distinto en la versión 2.3: The
text
parameter was added.Changelog
Nuevo en la versión 2.0.
- from_mapping(mapping=None, **kwargs)¶
Updates the config like
update()
ignoring items with non-upper keys.- Returns
Always returns
True
.- Parámetros
- Tipo del valor devuelto
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
app (Flask) –
environ (dict) –
request (Request | None) –
session (SessionMixin | None) –
- 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 (BaseException | None) –
- 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 (BaseException | None) –
- 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¶
Signals are provided by the Blinker library. See Señales for an introduction.
- flask.template_rendered¶
This signal is sent when a template was successfully rendered. The signal is invoked with the instance of the template as template and the context as dictionary (named 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¶
This signal is sent when the request context is set up, before any request processing happens. Because the request context is already bound, the subscriber can access the request with the standard global proxies such as
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¶
This signal is sent when the request is tearing down. This is always called, even if an exception is caused. Currently functions listening to this signal are called after the regular teardown handlers, but this is not something you can rely on.
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¶
This signal is sent when the app context is tearing down. This is always called, even if an exception is caused. Currently functions listening to this signal are called after the regular teardown handlers, but this is not something you can rely on.
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¶
This signal is sent when an application context is pushed. The sender is the application. This is usually useful for unittests in order to temporarily hook in information. For instance it can be used to set a resource early onto the g object.
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¶
This signal is sent when an application context is popped. The sender is the application. This usually falls in line with the
appcontext_tearing_down
signal.Changelog
Nuevo en la versión 0.10.
- flask.message_flashed¶
This signal is sent when the application is flashing a message. The messages is sent as message keyword argument and the category as 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.
- signals.signals_available¶
Obsoleto desde la versión 2.3: Will be removed in Flask 2.4. Signals are always available
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.Except for
name
, all other arguments passed to this method are forwarded to the view class__init__
method.Changelog
Distinto en la versión 2.2: Añadido el atributo de clase
init_every_request
.- Parámetros
name (str) –
class_args (t.Any) –
class_kwargs (t.Any) –
- Tipo del valor devuelto
ft.RouteCallable
- decorators: ClassVar[list[Callable]] = []¶
Una lista de decoradores para aplicar, en orden, a la función de vista generada. Recuerda que la sintaxis
@decorator
se aplica de abajo a arriba, por lo que el primer decorador de la lista sería el decorador inferior.Changelog
Nuevo en la versión 0.8.
- dispatch_request()¶
El comportamiento real de la función de la vista. Las subclases deben anular esto y devolver una respuesta válida. Cualquier variable de la regla de la URL se pasa como argumento de la palabra clave.
- Tipo del valor devuelto
ft.ResponseReturnValue
- init_every_request: ClassVar[bool] = True¶
Crea una nueva instancia de esta clase de vista para cada solicitud por defecto. Si una subclase de la vista establece esto como
False
, se utiliza la misma instancia para cada solicitud.Una sola instancia es más eficiente, especialmente si se realiza una configuración compleja durante el init. Sin embargo, el almacenamiento de datos en
self
ya no es seguro a través de las solicitudes, yg
debe ser utilizado en su lugar.Changelog
Nuevo en la versión 2.2.
- class flask.views.MethodView¶
Envía los métodos de solicitud a los métodos de instancia correspondientes. Por ejemplo, si implementas un método
get
, se utilizará para gestionar las peticionesGET
.Esto puede ser útil para definir una API REST.
methods
se establece automáticamente en función de los métodos definidos en la clase.Consulte Vistas basadas en las clases para obtener una guía detallada.
class CounterAPI(MethodView): def get(self): return str(session.get("counter", 0)) def post(self): session["counter"] = session.get("counter", 0) + 1 return redirect(url_for("counter")) app.add_url_rule( "/counter", view_func=CounterAPI.as_view("counter") )
- dispatch_request(**kwargs)¶
El comportamiento real de la función de la vista. Las subclases deben anular esto y devolver una respuesta válida. Cualquier variable de la regla de la URL se pasa como argumento de la palabra clave.
- Parámetros
kwargs (t.Any) –
- Tipo del valor devuelto
ft.ResponseReturnValue
Registros de rutas URL¶
En general, hay tres maneras de definir las reglas del sistema de enrutamiento:
Puede utilizar el decorador
flask.Flask.route()
.Puedes utilizar la función
flask.Flask.add_url_rule()
.Puedes acceder directamente al sistema de enrutamiento subyacente de Werkzeug que se expone como
flask.Flask.url_map
.
Variable parts in the route can be specified with angular brackets
(/user/<username>
). By default a variable part in the URL accepts any
string without a slash however a different converter can be specified as
well by using <converter:name>
.
Las partes variables se pasan a la función de la vista como argumentos de palabra clave.
Están disponibles los siguientes convertidores:
string |
acepta cualquier texto sin barra (por defecto) |
int |
acepta números enteros |
float |
como int pero para valores de punto flotante |
path |
como el predeterminado, pero también acepta barras inclinadas |
any |
coincide con uno de los elementos previstos |
uuid |
acepta cadenas UUID |
Los convertidores personalizados pueden ser definidos usando flask.Flask.url_map
.
He aquí algunos ejemplos:
@app.route('/')
def index():
pass
@app.route('/<username>')
def show_user(username):
pass
@app.route('/post/<int:post_id>')
def show_post(post_id):
pass
An important detail to keep in mind is how Flask deals with trailing slashes. The idea is to keep each URL unique so the following rules apply:
Si una regla termina con una barra y es solicitada sin barra por el usuario, éste es redirigido automáticamente a la misma página con una barra al final.
Si una regla no termina con una barra final y el usuario solicita la página con una barra final, se genera un 404 no encontrado.
This is consistent with how web servers deal with static files. This also makes it possible to use relative link targets safely.
You can also define multiple rules for the same function. They have to be unique however. Defaults can also be specified. Here for example is a definition for a URL that accepts an optional page:
@app.route('/users/', defaults={'page': 1})
@app.route('/users/page/<int:page>')
def show_users(page):
pass
Esto especifica que /users/
será la URL de la página uno y /users/page/N
será la URL de la página N
.
Si una URL contiene un valor por defecto, será redirigida a su forma más simple con una redirección 301. En el ejemplo anterior, /users/page/1
será redirigida a /users/
. Si tu ruta maneja solicitudes GET
y POST
, asegúrate de que la ruta por defecto sólo maneja GET
, ya que las redirecciones no pueden conservar los datos del formulario.
@app.route('/region/', defaults={'id': 1})
@app.route('/region/<int:id>', methods=['GET', 'POST'])
def region(id):
pass
Here are the parameters that route()
and
add_url_rule()
accept. The only difference is that
with the route parameter the view function is defined with the decorator
instead of the view_func parameter.
rule |
la regla URL como cadena |
endpoint |
the endpoint for the registered URL rule. Flask itself assumes that the name of the view function is the name of the endpoint if not explicitly stated. |
view_func |
the function to call when serving a request to the
provided endpoint. If this is not provided one can
specify the function later by storing it in the
|
defaults |
A dictionary with defaults for this rule. See the example above for how defaults work. |
subdomain |
specifies the rule for the subdomain in case subdomain matching is in use. If not specified the default subdomain is assumed. |
**options |
the options to be forwarded to the underlying
|
Ver opciones de funciones¶
Para uso interno las funciones de vista pueden tener algunos atributos adjuntos para personalizar el comportamiento sobre el que la función de vista normalmente no tendría control. Los siguientes atributos se pueden proporcionar opcionalmente para anular algunos valores predeterminados de add_url_rule()
o el comportamiento general:
__name__: The name of a function is by default used as endpoint. If endpoint is provided explicitly this value is used. Additionally this will be prefixed with the name of the blueprint by default which cannot be customized from the function itself.
methods: If methods are not provided when the URL rule is added, Flask will look on the view function object itself if a methods attribute exists. If it does, it will pull the information for the methods from there.
provide_automatic_options: if this attribute is set Flask will either force enable or disable the automatic implementation of the HTTP
OPTIONS
response. This can be useful when working with decorators that want to customize theOPTIONS
response on a per-view basis.required_methods: Si se establece este atributo, Flask siempre añadirá estos métodos al registrar una regla de URL, incluso si los métodos fueron explícitamente anulados en la llamada a
route()
.
Ejemplo completo:
def index():
if request.method == 'OPTIONS':
# custom options handling here
...
return 'Hello World!'
index.provide_automatic_options = False
index.methods = ['GET', 'OPTIONS']
app.add_url_rule('/', index)
Changelog
Nuevo en la versión 0.8: Se ha añadido la funcionalidad provide_automatic_options.
Interfaz de línea de comandos¶
- class flask.cli.FlaskGroup(add_default_commands=True, create_app=None, add_version_option=True, load_dotenv=True, set_debug_flag=True, **extra)¶
Subclase especial del grupo
AppGroup
que soporta la carga de más comandos de la aplicación Flask configurada. Normalmente un desarrollador no tiene que interactuar con esta clase pero hay algunos casos de uso muy avanzados para los que tiene sentido crear una instancia de esto. ver Scripts personalizados.- Parámetros
add_default_commands (bool) – si es True, se añadirán los comandos de ejecución y shell por defecto.
add_version_option (bool) – añade la opción
--versión
.create_app (t.Callable[..., Flask] | None) – un callback opcional al que se le pasa la información del script y devuelve la aplicación cargada.
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.set_debug_flag (bool) – Set the app’s debug flag.
extra (t.Any) –
- Tipo del valor devuelto
None
Changelog
Distinto en la versión 2.2: Added the
-A/--app
,--debug/--no-debug
,-e/--env-file
options.Distinto en la versión 2.2: Al ejecutar los comandos
app.cli
se envía un contexto de aplicación, por lo que@with_appcontext
ya no es necesario para esos comandos.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
.- get_command(ctx, name)¶
Dado un contexto y un nombre de comando, devuelve un objeto
Command
si existe o devuelve None.
- list_commands(ctx)¶
Devuelve una lista de nombres de subcomandos en el orden en que deben aparecer.
- make_context(info_name, args, parent=None, **extra)¶
Esta función, cuando se le da un nombre de información y argumentos, iniciará el análisis y creará un nuevo
Context
. Sin embargo, no invoca la llamada de retorno del comando real.Para personalizar rápidamente la clase de contexto utilizada sin sobrescribir este método, establezca el atributo
context_class
.- Parámetros
info_name (str | None) – el nombre informativo de esta invocación. Generalmente este es el nombre más descriptivo para el script o comando. Para el script de nivel superior suele ser el nombre del script, para los comandos inferiores es el nombre del comando.
args (list[str]) – los argumentos a analizar como lista de cadenas.
parent (Optional[click.core.Context]) – el contexto padre si está disponible.
extra (Any) – argumentos clave extras enviados al constructor del contexto.
- Tipo del valor devuelto
Distinto en la versión 8.0: Se ha añadido el atributo
context_class
.
- parse_args(ctx, args)¶
Dado un contexto y una lista de argumentos, crea el analizador y analiza los argumentos, luego modifica el contexto según sea necesario. Esto es invocado automáticamente por
make_context()
.- Parámetros
ctx (click.core.Context) –
- Tipo del valor devuelto
- class flask.cli.AppGroup(name=None, commands=None, **attrs)¶
Esto funciona de forma similar a un clic normal
Group
pero cambia el comportamiento del decoradorcommand()
para que envuelva automáticamente las funciones enwith_appcontext()
.No debe confundirse con
FlaskGroup
.- Parámetros
commands (Optional[Union[Dict[str, click.core.Command], Sequence[click.core.Command]]]) –
attrs (Any) –
- Tipo del valor devuelto
None
- command(*args, **kwargs)¶
Esto funciona exactamente igual que el método del mismo nombre en un
click.Group
normal, pero envuelve las devoluciones de llamada enwith_appcontext()
a menos que se desactive pasandowith_appcontext=False
.
- group(*args, **kwargs)¶
Esto funciona exactamente igual que el método del mismo nombre en un
click.Group
normal, pero por defecto la clase del grupo esAppGroup
.
- class flask.cli.ScriptInfo(app_import_path=None, create_app=None, set_debug_flag=True)¶
Objeto de ayuda para tratar con las aplicaciones de Flask. Normalmente no es necesario interactuar con él, ya que se utiliza internamente en el envío a click. En futuras versiones de Flask este objeto probablemente jugará un papel más importante. Normalmente es creado automáticamente por la clase
FlaskGroup
pero también se puede crear manualmente y pasarlo como objeto click.- Parámetros
- Tipo del valor devuelto
None
- app_import_path¶
Opcionalmente la ruta de importación de la aplicación Flask.
- create_app¶
Opcionalmente una función a la que se le pasa la información del script para crear la instancia de la aplicación.
- flask.cli.load_dotenv(path=None)¶
Cargue los archivos «dotenv» en orden de precedencia para establecer las variables de entorno.
Si una var env ya está configurada, no se sobrescribe, por lo que se prefieren los archivos anteriores de la lista a los posteriores.
Esto es un no-op si python-dotenv no está instalado.
- Parámetros
path (Optional[Union[str, os.PathLike]]) – Cargue el archivo en esta ubicación en lugar de buscarlo.
- Returns
True
si se ha cargado un archivo.- Tipo del valor devuelto
Changelog
Distinto en la versión 2.0: El directorio actual no se cambia a la ubicación del archivo cargado.
Distinto en la versión 2.0: Al cargar los archivos env, establezca la codificación por defecto en UTF-8.
Distinto en la versión 1.1.0: Devuelve
False
cuando python-dotenv no está instalado, o cuando la ruta dada no es un archivo.Nuevo en la versión 1.0.
- flask.cli.with_appcontext(f)¶
Envuelve una llamada de retorno para que se garantice su ejecución con el contexto de la aplicación del script.
Los comandos personalizados (y sus opciones) registrados en
app.cli
oblueprint.cli
siempre tendrán un contexto de aplicación disponible, este decorador no es necesario en ese caso.Changelog
Distinto en la versión 2.2: El contexto de la aplicación está activo para los subcomandos, así como para la devolución de llamada decorada. El contexto de la aplicación siempre está disponible para las devoluciones de llamada de comandos y parámetros de
app.cli
.
- flask.cli.pass_script_info(f)¶
Marca una función para que se pase una instancia de
ScriptInfo
como primer argumento a la llamada de retorno del clic.- Parámetros
f (click.decorators.F) –
- Tipo del valor devuelto
click.decorators.F
- flask.cli.run_command = <Command run>¶
Ejecutar un servidor de desarrollo local.
Este servidor es sólo para fines de desarrollo. No proporciona la estabilidad, seguridad o rendimiento de los servidores WSGI de producción.
The reloader and debugger are enabled by default with the “–debug” option.
- flask.cli.shell_command = <Command shell>¶
Ejecuta un shell interactivo de Python en el contexto de una aplicación Flask determinada. La aplicación rellenará el espacio de nombres por defecto de este shell según su configuración.
Esto es útil para ejecutar pequeños fragmentos de código de gestión sin tener que configurar manualmente la aplicación.