From 96592d954b2f0f12941505863f8fffd78c07519b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Mon, 15 Jun 2026 21:32:43 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=8C=90=20Update=20translations=20for=20es?= =?UTF-8?q?=20(update-outdated)=20(#15752)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: github-actions[bot] --- docs/es/docs/advanced/additional-responses.md | 4 +-- .../es/docs/advanced/advanced-dependencies.md | 2 +- docs/es/docs/advanced/custom-response.md | 8 ++--- docs/es/docs/advanced/dataclasses.md | 2 +- docs/es/docs/advanced/events.md | 4 +-- docs/es/docs/advanced/generate-clients.md | 5 ++- docs/es/docs/advanced/openapi-callbacks.md | 6 ++-- docs/es/docs/advanced/openapi-webhooks.md | 4 +-- .../path-operation-advanced-configuration.md | 12 ++----- docs/es/docs/advanced/response-directly.md | 6 ++-- .../docs/advanced/security/oauth2-scopes.md | 4 +-- docs/es/docs/advanced/stream-data.md | 4 +-- docs/es/docs/advanced/strict-content-type.md | 8 ++--- docs/es/docs/advanced/websockets.md | 2 +- docs/es/docs/advanced/wsgi.md | 2 +- docs/es/docs/deployment/docker.md | 4 +-- docs/es/docs/deployment/fastapicloud.md | 24 ++----------- docs/es/docs/deployment/manually.md | 1 - docs/es/docs/deployment/server-workers.md | 2 +- docs/es/docs/how-to/extending-openapi.md | 12 +++++-- .../docs/how-to/separate-openapi-schemas.md | 2 +- docs/es/docs/index.md | 8 ++--- docs/es/docs/tutorial/bigger-applications.md | 22 +++++++++--- docs/es/docs/tutorial/body-multiple-params.md | 4 +-- docs/es/docs/tutorial/body-nested-models.md | 4 +-- docs/es/docs/tutorial/body.md | 2 +- docs/es/docs/tutorial/cookie-param-models.md | 2 +- docs/es/docs/tutorial/cookie-params.md | 4 +-- docs/es/docs/tutorial/debugging.md | 6 ++-- ...pendencies-in-path-operation-decorators.md | 2 +- .../dependencies/dependencies-with-yield.md | 2 +- docs/es/docs/tutorial/dependencies/index.md | 6 ++-- .../tutorial/dependencies/sub-dependencies.md | 2 +- docs/es/docs/tutorial/first-steps.md | 34 +++++++------------ docs/es/docs/tutorial/metadata.md | 2 +- .../tutorial/path-operation-configuration.md | 4 +-- .../path-params-numeric-validations.md | 4 +-- docs/es/docs/tutorial/path-params.md | 10 +++--- .../tutorial/query-params-str-validations.md | 6 ++-- docs/es/docs/tutorial/query-params.md | 2 +- docs/es/docs/tutorial/request-files.md | 4 +-- docs/es/docs/tutorial/request-form-models.md | 2 +- .../docs/tutorial/request-forms-and-files.md | 2 +- docs/es/docs/tutorial/request-forms.md | 8 ++--- docs/es/docs/tutorial/response-model.md | 4 +-- docs/es/docs/tutorial/response-status-code.md | 2 +- docs/es/docs/tutorial/schema-extra-example.md | 6 ++-- docs/es/docs/tutorial/security/first-steps.md | 10 +++--- .../tutorial/security/get-current-user.md | 2 +- docs/es/docs/tutorial/security/oauth2-jwt.md | 4 +-- .../docs/tutorial/security/simple-oauth2.md | 10 +++--- docs/es/docs/tutorial/server-sent-events.md | 2 +- docs/es/docs/tutorial/stream-json-lines.md | 4 +-- docs/es/docs/tutorial/testing.md | 6 ++-- 54 files changed, 148 insertions(+), 162 deletions(-) diff --git a/docs/es/docs/advanced/additional-responses.md b/docs/es/docs/advanced/additional-responses.md index 83053d3a9..6695caf1b 100644 --- a/docs/es/docs/advanced/additional-responses.md +++ b/docs/es/docs/advanced/additional-responses.md @@ -34,7 +34,7 @@ Ten en cuenta que debes devolver el `JSONResponse` directamente. /// -/// info | Información +/// note | Nota La clave `model` no es parte de OpenAPI. @@ -183,7 +183,7 @@ Nota que debes devolver la imagen usando un `FileResponse` directamente. /// -/// info | Información +/// note | Nota A menos que especifiques un media type diferente explícitamente en tu parámetro `responses`, FastAPI asumirá que el response tiene el mismo media type que la clase de response principal (por defecto `application/json`). diff --git a/docs/es/docs/advanced/advanced-dependencies.md b/docs/es/docs/advanced/advanced-dependencies.md index cee93692d..f3053ffe3 100644 --- a/docs/es/docs/advanced/advanced-dependencies.md +++ b/docs/es/docs/advanced/advanced-dependencies.md @@ -98,7 +98,7 @@ Por ejemplo, si tenías una sesión de base de datos en una dependencia con `yie Este comportamiento se revirtió en la 0.118.0, para hacer que el código de salida después de `yield` se ejecute después de que la response sea enviada. -/// info | Información +/// note | Nota Como verás abajo, esto es muy similar al comportamiento anterior a la versión 0.106.0, pero con varias mejoras y arreglos de bugs para casos límite. diff --git a/docs/es/docs/advanced/custom-response.md b/docs/es/docs/advanced/custom-response.md index e1db10147..838118cca 100644 --- a/docs/es/docs/advanced/custom-response.md +++ b/docs/es/docs/advanced/custom-response.md @@ -24,7 +24,7 @@ Si declaras un [Response Model](../tutorial/response-model.md) FastAPI lo usará Si no declaras un response model, FastAPI usará el `jsonable_encoder` explicado en [Codificador Compatible con JSON](../tutorial/encoder.md) y lo pondrá en un `JSONResponse`. -Si declaras un `response_class` con un media type JSON (`application/json`), como es el caso con `JSONResponse`, los datos que devuelvas se convertirán automáticamente (y serán filtrados) con cualquier `response_model` de Pydantic que hayas declarado en el *path operation decorator*. Pero los datos no se serializarán a bytes JSON con Pydantic, en su lugar se convertirán con el `jsonable_encoder` y luego se pasarán a la clase `JSONResponse`, que los serializará a bytes usando la librería JSON estándar de Python. +Si declaras un `response_class` con un media type JSON (`application/json`), como es el caso con `JSONResponse`, los datos que devuelvas se convertirán automáticamente (y serán filtrados) con cualquier `response_model` de Pydantic que hayas declarado en el *path operation decorator*. Pero los datos no se serializarán a bytes JSON con Pydantic, en su lugar se convertirán con el `jsonable_encoder` y luego se pasarán a la clase `JSONResponse`, que los serializará a bytes usando el paquete JSON estándar de Python. ### Rendimiento JSON { #json-performance } @@ -41,7 +41,7 @@ Para devolver un response con HTML directamente desde **FastAPI**, usa `HTMLResp {* ../../docs_src/custom_response/tutorial002_py310.py hl[2,7] *} -/// info | Información +/// note | Nota El parámetro `response_class` también se utilizará para definir el "media type" del response. @@ -65,7 +65,7 @@ Una `Response` devuelta directamente por tu *path operation function* no se docu /// -/// info | Información +/// note | Nota Por supuesto, el `Content-Type` header real, el código de estado, etc., provendrán del objeto `Response` que devolviste. @@ -181,7 +181,7 @@ Toma un generador `async` o un generador/iterador normal (una función con `yiel Una tarea `async` solo puede cancelarse cuando llega a un `await`. Si no hay `await`, el generador (función con `yield`) no se puede cancelar correctamente y puede seguir ejecutándose incluso después de solicitar la cancelación. -Como este pequeño ejemplo no necesita ninguna sentencia `await`, añadimos un `await anyio.sleep(0)` para darle al loop de eventos la oportunidad de manejar la cancelación. +Como este pequeño ejemplo no necesita ninguna statement `await`, añadimos un `await anyio.sleep(0)` para darle al loop de eventos la oportunidad de manejar la cancelación. Esto sería aún más importante con streams grandes o infinitos. diff --git a/docs/es/docs/advanced/dataclasses.md b/docs/es/docs/advanced/dataclasses.md index 3ce5c754f..e49cada43 100644 --- a/docs/es/docs/advanced/dataclasses.md +++ b/docs/es/docs/advanced/dataclasses.md @@ -18,7 +18,7 @@ Y por supuesto, soporta lo mismo: Esto funciona de la misma manera que con los modelos de Pydantic. Y en realidad se logra de la misma manera internamente, utilizando Pydantic. -/// info | Información +/// note | Nota Ten en cuenta que los dataclasses no pueden hacer todo lo que los modelos de Pydantic pueden hacer. diff --git a/docs/es/docs/advanced/events.md b/docs/es/docs/advanced/events.md index 264ee27ed..e69d6b054 100644 --- a/docs/es/docs/advanced/events.md +++ b/docs/es/docs/advanced/events.md @@ -120,7 +120,7 @@ Para añadir una función que debería ejecutarse cuando la aplicación se esté Aquí, la función manejadora del evento `shutdown` escribirá una línea de texto `"Application shutdown"` a un archivo `log.txt`. -/// info | Información +/// note | Nota En la función `open()`, el `mode="a"` significa "añadir", por lo tanto, la línea será añadida después de lo que sea que esté en ese archivo, sin sobrescribir el contenido anterior. @@ -152,7 +152,7 @@ Solo un detalle técnico para los nerds curiosos. 🤓 Por debajo, en la especificación técnica ASGI, esto es parte del [Protocolo de Lifespan](https://asgi.readthedocs.io/en/latest/specs/lifespan.html), y define eventos llamados `startup` y `shutdown`. -/// info | Información +/// note | Nota Puedes leer más sobre los manejadores `lifespan` de Starlette en [la documentación de `Lifespan` de Starlette](https://www.starlette.dev/lifespan/). diff --git a/docs/es/docs/advanced/generate-clients.md b/docs/es/docs/advanced/generate-clients.md index 534c5e98a..51834d89c 100644 --- a/docs/es/docs/advanced/generate-clients.md +++ b/docs/es/docs/advanced/generate-clients.md @@ -22,16 +22,15 @@ FastAPI genera automáticamente especificaciones **OpenAPI 3.1**, así que cualq ## Generadores de SDKs de sponsors de FastAPI { #sdk-generators-from-fastapi-sponsors } -Esta sección destaca soluciones **respaldadas por empresas** y **venture-backed** de compañías que sponsorean FastAPI. Estos productos ofrecen **funcionalidades adicionales** e **integraciones** además de SDKs generados de alta calidad. +Esta sección destaca soluciones **respaldadas por empresas** y **venture-backed** de compañías que sponsor FastAPI. Estos productos ofrecen **funcionalidades adicionales** e **integraciones** además de SDKs generados de alta calidad. -Al ✨ [**sponsorear FastAPI**](../help-fastapi.md#sponsor-the-author) ✨, estas compañías ayudan a asegurar que el framework y su **ecosistema** se mantengan saludables y **sustentables**. +Al ✨ [**ser sponsor de FastAPI**](../help-fastapi.md#sponsor-the-author) ✨, estas compañías ayudan a asegurar que el framework y su **ecosistema** se mantengan saludables y **sustentables**. Su sponsorship también demuestra un fuerte compromiso con la **comunidad** de FastAPI (tú), mostrando que no solo les importa ofrecer un **gran servicio**, sino también apoyar un **framework robusto y próspero**, FastAPI. 🙇 Por ejemplo, podrías querer probar: * [Stainless](https://www.stainless.com/?utm_source=fastapi&utm_medium=referral) -* [liblab](https://developers.liblab.com/tutorials/sdk-for-fastapi?utm_source=fastapi) Algunas de estas soluciones también pueden ser open source u ofrecer niveles gratuitos, así que puedes probarlas sin un compromiso financiero. Hay otros generadores de SDK comerciales disponibles y se pueden encontrar en línea. 🤓 diff --git a/docs/es/docs/advanced/openapi-callbacks.md b/docs/es/docs/advanced/openapi-callbacks.md index 5e3a1572c..49896b64b 100644 --- a/docs/es/docs/advanced/openapi-callbacks.md +++ b/docs/es/docs/advanced/openapi-callbacks.md @@ -4,7 +4,7 @@ Podrías crear una API con una *path operation* que podría desencadenar un requ El proceso que ocurre cuando tu aplicación API llama a la *API externa* se llama un "callback". Porque el software que escribió el desarrollador externo envía un request a tu API y luego tu API hace un *callback*, enviando un request a una *API externa* (que probablemente fue creada por el mismo desarrollador). -En este caso, podrías querer documentar cómo esa API externa *debería* verse. Qué *path operation* debería tener, qué cuerpo debería esperar, qué response debería devolver, etc. +En este caso, podrías querer documentar cómo esa API externa *debería* verse. Qué *path operation* debería tener, qué body debería esperar, qué response debería devolver, etc. ## Una aplicación con callbacks { #an-app-with-callbacks } @@ -167,13 +167,13 @@ Observa cómo la URL del callback utilizada contiene la URL recibida como parám En este punto tienes las *path operation(s)* del callback necesarias (las que el *desarrollador externo* debería implementar en la *API externa*) en el router de callback que creaste arriba. -Ahora usa el parámetro `callbacks` en el *decorador de path operation de tu API* para pasar el atributo `.routes` (que en realidad es solo un `list` de rutas/*path operations*) de ese router de callback: +Ahora usa el parámetro `callbacks` en el *decorador de path operation de tu API* para pasar el atributo `.routes` de ese router de callback: {* ../../docs_src/openapi_callbacks/tutorial001_py310.py hl[33] *} /// tip | Consejo -Observa que no estás pasando el router en sí (`invoices_callback_router`) a `callback=`, sino el atributo `.routes`, como en `invoices_callback_router.routes`. +Observa que no estás pasando el router en sí (`invoices_callback_router`) a `callbacks=`, sino su `.routes`, como en `invoices_callback_router.routes`. **FastAPI** usará esas rutas para generar la documentación OpenAPI del callback. /// diff --git a/docs/es/docs/advanced/openapi-webhooks.md b/docs/es/docs/advanced/openapi-webhooks.md index 163293f83..9e51735b1 100644 --- a/docs/es/docs/advanced/openapi-webhooks.md +++ b/docs/es/docs/advanced/openapi-webhooks.md @@ -22,7 +22,7 @@ Con **FastAPI**, usando OpenAPI, puedes definir los nombres de estos webhooks, l Esto puede hacer mucho más fácil para tus usuarios **implementar sus APIs** para recibir tus requests de **webhook**, incluso podrían ser capaces de autogenerar algo de su propio código de API. -/// info | Información +/// note | Nota Los webhooks están disponibles en OpenAPI 3.1.0 y superiores, soportados por FastAPI `0.99.0` y superiores. @@ -36,7 +36,7 @@ Cuando creas una aplicación de **FastAPI**, hay un atributo `webhooks` que pued Los webhooks que defines terminarán en el esquema de **OpenAPI** y en la interfaz automática de **documentación**. -/// info | Información +/// note | Nota El objeto `app.webhooks` es en realidad solo un `APIRouter`, el mismo tipo que usarías al estructurar tu aplicación con múltiples archivos. diff --git a/docs/es/docs/advanced/path-operation-advanced-configuration.md b/docs/es/docs/advanced/path-operation-advanced-configuration.md index a21975bc7..99fb14017 100644 --- a/docs/es/docs/advanced/path-operation-advanced-configuration.md +++ b/docs/es/docs/advanced/path-operation-advanced-configuration.md @@ -16,17 +16,11 @@ Tendrías que asegurarte de que sea único para cada operación. ### Usar el nombre de la *path operation function* como el operationId { #using-the-path-operation-function-name-as-the-operationid } -Si quieres usar los nombres de las funciones de tus APIs como `operationId`s, puedes iterar sobre todas ellas y sobrescribir el `operation_id` de cada *path operation* usando su `APIRoute.name`. +Si quieres usar los nombres de las funciones de tus APIs como `operationId`s, puedes pasar una `generate_unique_id_function` personalizada a `FastAPI`. -Deberías hacerlo después de agregar todas tus *path operations*. +La función recibe cada `APIRoute` y devuelve el `operationId` a usar para esa *path operation*. -{* ../../docs_src/path_operation_advanced_configuration/tutorial002_py310.py hl[2, 12:21, 24] *} - -/// tip | Consejo - -Si llamas manualmente a `app.openapi()`, deberías actualizar los `operationId`s antes de eso. - -/// +{* ../../docs_src/path_operation_advanced_configuration/tutorial002_py310.py hl[2,5:6,9] *} /// warning | Advertencia diff --git a/docs/es/docs/advanced/response-directly.md b/docs/es/docs/advanced/response-directly.md index b2d5d18b8..fa05a3ed6 100644 --- a/docs/es/docs/advanced/response-directly.md +++ b/docs/es/docs/advanced/response-directly.md @@ -16,9 +16,9 @@ Normalmente tendrás mucho mejor rendimiento usando un [Response Model](../tutor ## Devolver una `Response` { #return-a-response } -De hecho, puedes devolver cualquier `Response` o cualquier subclase de ella. +Puedes devolver una `Response` o cualquier subclase de ella. -/// info | Información +/// note | Nota `JSONResponse` en sí misma es una subclase de `Response`. @@ -78,6 +78,6 @@ En su lugar, toma los bytes JSON generados con Pydantic usando el response model Cuando devuelves una `Response` directamente, sus datos no son validados, convertidos (serializados), ni documentados automáticamente. -Pero aún puedes documentarlo como se describe en [Additional Responses in OpenAPI](additional-responses.md). +Pero aún puedes documentarlo como se describe en [Respuestas adicionales en OpenAPI](additional-responses.md). Puedes ver en secciones posteriores cómo usar/declarar estas `Response`s personalizadas mientras todavía tienes conversión automática de datos, documentación, etc. diff --git a/docs/es/docs/advanced/security/oauth2-scopes.md b/docs/es/docs/advanced/security/oauth2-scopes.md index 6ee3dd5ac..f9ddd19e3 100644 --- a/docs/es/docs/advanced/security/oauth2-scopes.md +++ b/docs/es/docs/advanced/security/oauth2-scopes.md @@ -46,7 +46,7 @@ Normalmente se utilizan para declarar permisos de seguridad específicos, por ej * `instagram_basic` es usado por Facebook / Instagram. * `https://www.googleapis.com/auth/drive` es usado por Google. -/// info | Información +/// note | Nota En OAuth2 un "scope" es solo un string que declara un permiso específico requerido. @@ -126,7 +126,7 @@ Lo estamos haciendo aquí para demostrar cómo **FastAPI** maneja scopes declara {* ../../docs_src/security/tutorial005_an_py310.py hl[5,141,172] *} -/// info | Información Técnica +/// note | Detalles técnicos `Security` es en realidad una subclase de `Depends`, y tiene solo un parámetro extra que veremos más adelante. diff --git a/docs/es/docs/advanced/stream-data.md b/docs/es/docs/advanced/stream-data.md index 964a9ed58..2db037e0a 100644 --- a/docs/es/docs/advanced/stream-data.md +++ b/docs/es/docs/advanced/stream-data.md @@ -4,7 +4,7 @@ Si quieres transmitir datos que se puedan estructurar como JSON, deberías [Tran Pero si quieres transmitir datos binarios puros o strings, aquí tienes cómo hacerlo. -/// info | Información +/// note | Nota Añadido en FastAPI 0.134.0. @@ -90,7 +90,7 @@ Por ejemplo, no tienen un `await file.read()`, ni un `async for chunk in file`. Y en muchos casos leerlos sería una operación bloqueante (que podría bloquear el event loop), porque se leen desde disco o desde la red. -/// info | Información +/// note | Nota El ejemplo anterior es en realidad una excepción, porque el objeto `io.BytesIO` ya está en memoria, así que leerlo no bloqueará nada. diff --git a/docs/es/docs/advanced/strict-content-type.md b/docs/es/docs/advanced/strict-content-type.md index 41615edf3..d8003dc9d 100644 --- a/docs/es/docs/advanced/strict-content-type.md +++ b/docs/es/docs/advanced/strict-content-type.md @@ -40,7 +40,7 @@ Ten en cuenta que ambos tienen el mismo host. Luego, usando el frontend, puedes hacer que el agente de IA haga cosas en tu nombre. -Como está corriendo localmente y no en Internet abierta, decides no tener ninguna autenticación configurada, confiando simplemente en el acceso a la red local. +Como está corriendo **localmente** y no en Internet abierta, decides **no tener ninguna autenticación** configurada, confiando simplemente en el acceso a la red local. Entonces, uno de tus usuarios podría instalarlo y ejecutarlo localmente. @@ -69,9 +69,9 @@ Si tu app está en Internet abierta, no “confiarías en la red” ni permitir Los atacantes podrían simplemente ejecutar un script para enviar requests a tu API, sin necesidad de interacción del navegador, así que probablemente ya estás asegurando cualquier endpoint privilegiado. -En ese caso, este ataque/riesgo no aplica a ti. +En ese caso, **este ataque/riesgo no aplica a ti**. -Este riesgo y ataque es relevante principalmente cuando la app corre en la red local y esa es la única protección asumida. +Este riesgo y ataque es relevante principalmente cuando la app corre en la **red local** y esa es la **única protección asumida**. ## Permitir requests sin Content-Type { #allowing-requests-without-content-type } @@ -81,7 +81,7 @@ Si necesitas soportar clientes que no envían un header `Content-Type`, puedes d Con esta configuración, las requests sin un header `Content-Type` tendrán su body parseado como JSON, que es el mismo comportamiento de versiones anteriores de FastAPI. -/// info | Información +/// note | Nota Este comportamiento y configuración se añadieron en FastAPI 0.132.0. diff --git a/docs/es/docs/advanced/websockets.md b/docs/es/docs/advanced/websockets.md index fe75e644b..e3e0ba554 100644 --- a/docs/es/docs/advanced/websockets.md +++ b/docs/es/docs/advanced/websockets.md @@ -111,7 +111,7 @@ Funcionan de la misma manera que para otros endpoints de FastAPI/*path operation {* ../../docs_src/websockets_/tutorial002_an_py310.py hl[68:69,82] *} -/// info | Información +/// note | Nota Como esto es un WebSocket no tiene mucho sentido lanzar un `HTTPException`, en su lugar lanzamos un `WebSocketException`. diff --git a/docs/es/docs/advanced/wsgi.md b/docs/es/docs/advanced/wsgi.md index 0d0c42fd5..8afe215a1 100644 --- a/docs/es/docs/advanced/wsgi.md +++ b/docs/es/docs/advanced/wsgi.md @@ -6,7 +6,7 @@ Para eso, puedes usar el `WSGIMiddleware` y usarlo para envolver tu aplicación ## Usando `WSGIMiddleware` { #using-wsgimiddleware } -/// info | Información +/// note | Nota Esto requiere instalar `a2wsgi`, por ejemplo con `pip install a2wsgi`. diff --git a/docs/es/docs/deployment/docker.md b/docs/es/docs/deployment/docker.md index 6ce0e192a..f62db5e70 100644 --- a/docs/es/docs/deployment/docker.md +++ b/docs/es/docs/deployment/docker.md @@ -132,7 +132,7 @@ Successfully installed fastapi pydantic -/// info | Información +/// note | Nota Existen otros formatos y herramientas para definir e instalar dependencias de paquetes. @@ -556,7 +556,7 @@ Si estás usando contenedores (por ejemplo, Docker, Kubernetes), entonces hay do Si tienes **múltiples contenedores**, probablemente cada uno ejecutando un **proceso único** (por ejemplo, en un cluster de **Kubernetes**), entonces probablemente querrías tener un **contenedor separado** realizando el trabajo de los **pasos previos** en un solo contenedor, ejecutando un solo proceso, **antes** de ejecutar los contenedores worker replicados. -/// info | Información +/// note | Nota Si estás usando Kubernetes, probablemente sería un [Contenedor de Inicialización](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/). diff --git a/docs/es/docs/deployment/fastapicloud.md b/docs/es/docs/deployment/fastapicloud.md index fc770d1ee..9c289f4b1 100644 --- a/docs/es/docs/deployment/fastapicloud.md +++ b/docs/es/docs/deployment/fastapicloud.md @@ -1,26 +1,6 @@ # FastAPI Cloud { #fastapi-cloud } -Puedes desplegar tu app de FastAPI en [FastAPI Cloud](https://fastapicloud.com) con **un solo comando**; ve y únete a la lista de espera si aún no lo has hecho. 🚀 - -## Iniciar sesión { #login } - -Asegúrate de que ya tienes una cuenta de **FastAPI Cloud** (te invitamos desde la lista de espera 😉). - -Luego inicia sesión: - -
- -```console -$ fastapi login - -You are logged in to FastAPI Cloud 🚀 -``` - -
- -## Desplegar { #deploy } - -Ahora despliega tu app, con **un solo comando**: +Puedes desplegar tu app de FastAPI en [FastAPI Cloud](https://fastapicloud.com) con **un solo comando**. 🚀
@@ -36,6 +16,8 @@ Deploying to FastAPI Cloud...
+La CLI detectará automáticamente tu aplicación de FastAPI y la desplegará en la nube. Si no has iniciado sesión, se abrirá tu navegador para completar el proceso de autenticación. + ¡Eso es todo! Ahora puedes acceder a tu app en esa URL. ✨ ## Acerca de FastAPI Cloud { #about-fastapi-cloud } diff --git a/docs/es/docs/deployment/manually.md b/docs/es/docs/deployment/manually.md index f3c771a51..361a57c8f 100644 --- a/docs/es/docs/deployment/manually.md +++ b/docs/es/docs/deployment/manually.md @@ -56,7 +56,6 @@ Hay varias alternativas, incluyendo: * [Hypercorn](https://hypercorn.readthedocs.io/): un servidor ASGI compatible con HTTP/2 y Trio entre otras funcionalidades. * [Daphne](https://github.com/django/daphne): el servidor ASGI construido para Django Channels. * [Granian](https://github.com/emmett-framework/granian): Un servidor HTTP Rust para aplicaciones en Python. -* [NGINX Unit](https://unit.nginx.org/howto/fastapi/): NGINX Unit es un runtime para aplicaciones web ligero y versátil. ## Máquina Servidor y Programa Servidor { #server-machine-and-server-program } diff --git a/docs/es/docs/deployment/server-workers.md b/docs/es/docs/deployment/server-workers.md index 3e3a1898b..a7665ccb6 100644 --- a/docs/es/docs/deployment/server-workers.md +++ b/docs/es/docs/deployment/server-workers.md @@ -17,7 +17,7 @@ Como viste en el capítulo anterior sobre [Conceptos de Despliegue](concepts.md) Aquí te mostraré cómo usar **Uvicorn** con **worker processes** usando el comando `fastapi` o el comando `uvicorn` directamente. -/// info | Información +/// note | Nota Si estás usando contenedores, por ejemplo con Docker o Kubernetes, te contaré más sobre eso en el próximo capítulo: [FastAPI en Contenedores - Docker](docker.md). diff --git a/docs/es/docs/how-to/extending-openapi.md b/docs/es/docs/how-to/extending-openapi.md index d00455afd..b0fa23024 100644 --- a/docs/es/docs/how-to/extending-openapi.md +++ b/docs/es/docs/how-to/extending-openapi.md @@ -25,9 +25,17 @@ Y esa función `get_openapi()` recibe como parámetros: * `openapi_version`: La versión de la especificación OpenAPI utilizada. Por defecto, la más reciente: `3.1.0`. * `summary`: Un breve resumen de la API. * `description`: La descripción de tu API, esta puede incluir markdown y se mostrará en la documentación. -* `routes`: Una list de rutas, estas son cada una de las *path operations* registradas. Se toman de `app.routes`. +* `routes`: Las rutas de la aplicación, tomadas de `app.routes`. FastAPI las usa para recolectar las *path operations* registradas, incluidas las de los routers incluidos. -/// info | Información +/// tip | Detalles técnicos + +`app.routes` es un árbol de rutas de nivel inferior. Puede incluir rutas candidatas que FastAPI usa internamente para routers incluidos, no solo objetos `APIRoute` finales. + +Aun así puedes pasar `app.routes` a `get_openapi()`. FastAPI recorrerá ese árbol de rutas para recolectar las path operations efectivas. + +/// + +/// note | Nota El parámetro `summary` está disponible en OpenAPI 3.1.0 y versiones superiores, soportado por FastAPI 0.99.0 y superiores. diff --git a/docs/es/docs/how-to/separate-openapi-schemas.md b/docs/es/docs/how-to/separate-openapi-schemas.md index db9b46ddb..1026085e0 100644 --- a/docs/es/docs/how-to/separate-openapi-schemas.md +++ b/docs/es/docs/how-to/separate-openapi-schemas.md @@ -85,7 +85,7 @@ Probablemente el caso principal para esto es si ya tienes algún código cliente En ese caso, puedes desactivar esta funcionalidad en **FastAPI**, con el parámetro `separate_input_output_schemas=False`. -/// info | Información +/// note | Nota El soporte para `separate_input_output_schemas` fue agregado en FastAPI `0.102.0`. 🤓 diff --git a/docs/es/docs/index.md b/docs/es/docs/index.md index 1217c4c6f..58d534eef 100644 --- a/docs/es/docs/index.md +++ b/docs/es/docs/index.md @@ -45,7 +45,7 @@ Las funcionalidades clave son: * **Rápido**: Muy alto rendimiento, a la par con **NodeJS** y **Go** (gracias a Starlette y Pydantic). [Uno de los frameworks Python más rápidos disponibles](#performance). * **Rápido de programar**: Aumenta la velocidad para desarrollar funcionalidades en aproximadamente un 200% a 300%. * * **Menos bugs**: Reduce en aproximadamente un 40% los errores inducidos por humanos (desarrolladores). * -* **Intuitivo**: Gran soporte para editores. Autocompletado en todas partes. Menos tiempo depurando. +* **Intuitivo**: Gran soporte para editores. Autocompletado en todas partes. Menos tiempo depurando. * **Fácil**: Diseñado para ser fácil de usar y aprender. Menos tiempo leyendo documentación. * **Corto**: Minimiza la duplicación de código. Múltiples funcionalidades desde cada declaración de parámetro. Menos bugs. * **Robusto**: Obtén código listo para producción. Con documentación interactiva automática. @@ -492,9 +492,7 @@ Para un ejemplo más completo incluyendo más funcionalidades, ve al @@ -510,6 +508,8 @@ Deploying to FastAPI Cloud... +La CLI detectará automáticamente tu aplicación de FastAPI y la desplegará en la nube. Si no has iniciado sesión, se abrirá tu navegador para completar el proceso de autenticación. + ¡Eso es todo! Ahora puedes acceder a tu app en esa URL. ✨ #### Acerca de FastAPI Cloud { #about-fastapi-cloud } diff --git a/docs/es/docs/tutorial/bigger-applications.md b/docs/es/docs/tutorial/bigger-applications.md index 583cc380e..f45b4912a 100644 --- a/docs/es/docs/tutorial/bigger-applications.md +++ b/docs/es/docs/tutorial/bigger-applications.md @@ -396,9 +396,9 @@ Incluirá todas las rutas de ese router como parte de ella. /// note | Detalles Técnicos -En realidad creará internamente una *path operation* para cada *path operation* que fue declarada en el `APIRouter`. +FastAPI mantiene activo el `APIRouter` original y sus `APIRoute`s cuando el router se incluye en la aplicación principal. -Así, detrás de escena, funcionará como si todo fuera la misma única app. +Eso significa que las subclases personalizadas de `APIRouter` y `APIRoute` aún pueden participar después de incluir el router. /// @@ -406,7 +406,7 @@ Así, detrás de escena, funcionará como si todo fuera la misma única app. No tienes que preocuparte por el rendimiento al incluir routers. -Esto tomará microsegundos y solo sucederá al inicio. +Esto está diseñado para ser liviano y evitar añadir sobrecarga a cada request. Así que no afectará el rendimiento. ⚡ @@ -461,7 +461,7 @@ Los `APIRouter`s no están "montados", no están aislados del resto de la aplica Esto se debe a que queremos incluir sus *path operations* en el esquema de OpenAPI y las interfaces de usuario. -Como no podemos simplemente aislarlos y "montarlos" independientemente del resto, las *path operations* se "clonan" (se vuelven a crear), no se incluyen directamente. +FastAPI mantiene los routers y *path operations* originales activos, y combina los prefijos del router, dependencias, tags, responses y otros metadatos al manejar requests y generar OpenAPI. /// @@ -532,4 +532,16 @@ De la misma manera que puedes incluir un `APIRouter` en una aplicación `FastAPI router.include_router(other_router) ``` -Asegúrate de hacerlo antes de incluir `router` en la app de `FastAPI`, para que las *path operations* de `other_router` también se incluyan. +Puedes hacerlo antes o después de incluir `router` en la app de `FastAPI`. FastAPI seguirá incluyendo las *path operations* de `other_router` en el ruteo y en OpenAPI. + +Lo mismo aplica a las *path operations* añadidas después a los routers. También serán visibles a través de la inclusión anterior. + +/// warning | Detalles Técnicos + +Evita mutar directamente `router.routes` después de incluir un router. FastAPI trata la inclusión de routers como “en vivo”, así que el router original y sus rutas siguen formando parte del ruteo y de la generación de OpenAPI. + +Usa APIs documentadas como los decoradores de *path operations* y `.include_router()` para agregar rutas y routers. + +Trata `router.routes` como un árbol de rutas de nivel bajo que puede contener definiciones de rutas y routers incluidos, y evita depender de él como una lista plana de *path operations* finales. + +/// diff --git a/docs/es/docs/tutorial/body-multiple-params.md b/docs/es/docs/tutorial/body-multiple-params.md index c78dd2881..e1b0d4b1c 100644 --- a/docs/es/docs/tutorial/body-multiple-params.md +++ b/docs/es/docs/tutorial/body-multiple-params.md @@ -108,7 +108,7 @@ Por ejemplo: {* ../../docs_src/body_multiple_params/tutorial004_an_py310.py hl[28] *} -/// info | Información +/// note | Nota `Body` también tiene todos los mismos parámetros de validación y metadatos extras que `Query`, `Path` y otros que verás luego. @@ -123,7 +123,7 @@ Por defecto, **FastAPI** esperará su cuerpo directamente. Pero si deseas que espere un JSON con una clave `item` y dentro de ella los contenidos del modelo, como lo hace cuando declaras parámetros de cuerpo extra, puedes usar el parámetro especial `Body` `embed`: ```Python -item: Item = Body(embed=True) +item: Annotated[Item, Body(embed=True)] ``` como en: diff --git a/docs/es/docs/tutorial/body-nested-models.md b/docs/es/docs/tutorial/body-nested-models.md index 742f78d42..14151a036 100644 --- a/docs/es/docs/tutorial/body-nested-models.md +++ b/docs/es/docs/tutorial/body-nested-models.md @@ -136,7 +136,7 @@ Esto esperará (convertirá, validará, documentará, etc.) un cuerpo JSON como: } ``` -/// info | Información +/// note | Nota Nota cómo la clave `images` ahora tiene una lista de objetos de imagen. @@ -148,7 +148,7 @@ Puedes definir modelos anidados tan profundamente como desees: {* ../../docs_src/body_nested_models/tutorial007_py310.py hl[7,12,18,21,25] *} -/// info | Información +/// note | Nota Observa cómo `Offer` tiene una lista de `Item`s, que a su vez tienen una lista opcional de `Image`s diff --git a/docs/es/docs/tutorial/body.md b/docs/es/docs/tutorial/body.md index 7c3b8e9d9..a87512da2 100644 --- a/docs/es/docs/tutorial/body.md +++ b/docs/es/docs/tutorial/body.md @@ -8,7 +8,7 @@ Tu API casi siempre tiene que enviar un **response** body. Pero los clientes no Para declarar un **request** body, usas modelos de [Pydantic](https://docs.pydantic.dev/) con todo su poder y beneficios. -/// info | Información +/// note | Nota Para enviar datos, deberías usar uno de estos métodos: `POST` (el más común), `PUT`, `DELETE` o `PATCH`. diff --git a/docs/es/docs/tutorial/cookie-param-models.md b/docs/es/docs/tutorial/cookie-param-models.md index 4e6038a46..3fbf0bcb5 100644 --- a/docs/es/docs/tutorial/cookie-param-models.md +++ b/docs/es/docs/tutorial/cookie-param-models.md @@ -32,7 +32,7 @@ Puedes ver las cookies definidas en la UI de la documentación en `/docs`: -/// info | Información +/// note | Nota Ten en cuenta que, como los **navegadores manejan las cookies** de maneras especiales y detrás de escenas, **no** permiten fácilmente que **JavaScript** las toque. diff --git a/docs/es/docs/tutorial/cookie-params.md b/docs/es/docs/tutorial/cookie-params.md index 598872c0a..eecd61907 100644 --- a/docs/es/docs/tutorial/cookie-params.md +++ b/docs/es/docs/tutorial/cookie-params.md @@ -24,13 +24,13 @@ Pero recuerda que cuando importas `Query`, `Path`, `Cookie` y otros desde `fasta /// -/// info | Información +/// note | Nota Para declarar cookies, necesitas usar `Cookie`, porque de lo contrario los parámetros serían interpretados como parámetros de query. /// -/// info | Información +/// note | Nota Ten en cuenta que, como **los navegadores manejan las cookies** de formas especiales y por detrás, **no** permiten fácilmente que **JavaScript** las toque. diff --git a/docs/es/docs/tutorial/debugging.md b/docs/es/docs/tutorial/debugging.md index b5d0704e0..d91a32616 100644 --- a/docs/es/docs/tutorial/debugging.md +++ b/docs/es/docs/tutorial/debugging.md @@ -62,7 +62,7 @@ from myapp import app # Algún código adicional ``` -en ese caso, la variable creada automáticamente dentro de `myapp.py` no tendrá la variable `__name__` con un valor de `"__main__"`. +en ese caso, la variable creada automáticamente `__name__` dentro de `myapp.py` no tendrá el valor `"__main__"`. Así que, la línea: @@ -72,7 +72,7 @@ Así que, la línea: no se ejecutará. -/// info | Información +/// note | Nota Para más información, revisa [la documentación oficial de Python](https://docs.python.org/3/library/__main__.html). @@ -88,7 +88,7 @@ Por ejemplo, en Visual Studio Code, puedes: * Ir al panel de "Debug". * "Add configuration...". -* Seleccionar "Python". +* Seleccionar "Python" * Ejecutar el depurador con la opción "`Python: Current File (Integrated Terminal)`". Luego, iniciará el servidor con tu código **FastAPI**, deteniéndose en tus puntos de interrupción, etc. diff --git a/docs/es/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md b/docs/es/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md index 72e4e973e..3c5796b8b 100644 --- a/docs/es/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md +++ b/docs/es/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md @@ -28,7 +28,7 @@ También puede ayudar a evitar confusiones para nuevos desarrolladores que vean /// -/// info | Información +/// note | Nota En este ejemplo usamos headers personalizados inventados `X-Key` y `X-Token`. diff --git a/docs/es/docs/tutorial/dependencies/dependencies-with-yield.md b/docs/es/docs/tutorial/dependencies/dependencies-with-yield.md index 084d72aa4..552c98ed0 100644 --- a/docs/es/docs/tutorial/dependencies/dependencies-with-yield.md +++ b/docs/es/docs/tutorial/dependencies/dependencies-with-yield.md @@ -170,7 +170,7 @@ participant tasks as Background tasks end ``` -/// info | Información +/// note | Nota Solo **un response** será enviado al cliente. Podría ser uno de los responses de error o será el response de la *path operation*. diff --git a/docs/es/docs/tutorial/dependencies/index.md b/docs/es/docs/tutorial/dependencies/index.md index ed5783f39..f725f4061 100644 --- a/docs/es/docs/tutorial/dependencies/index.md +++ b/docs/es/docs/tutorial/dependencies/index.md @@ -1,6 +1,6 @@ # Dependencias { #dependencies } -**FastAPI** tiene un sistema de **Inyección de Dependencias** muy poderoso pero intuitivo. +**FastAPI** tiene un sistema de **Inyección de Dependencias** muy poderoso pero intuitivo. Está diseñado para ser muy simple de usar, y para hacer que cualquier desarrollador integre otros componentes con **FastAPI** de forma muy sencilla. @@ -51,7 +51,7 @@ En este caso, esta dependencia espera: Y luego solo devuelve un `dict` que contiene esos valores. -/// info | Información +/// note | Nota FastAPI agregó soporte para `Annotated` (y comenzó a recomendarlo) en la versión 0.95.0. @@ -106,7 +106,7 @@ common_parameters --> read_users De esta manera escribes código compartido una vez y **FastAPI** se encarga de llamarlo para tus *path operations*. -/// check | Revisa +/// tip | Consejo Nota que no tienes que crear una clase especial y pasarla en algún lugar a **FastAPI** para "registrarla" o algo similar. diff --git a/docs/es/docs/tutorial/dependencies/sub-dependencies.md b/docs/es/docs/tutorial/dependencies/sub-dependencies.md index 95f3fe817..2432707f7 100644 --- a/docs/es/docs/tutorial/dependencies/sub-dependencies.md +++ b/docs/es/docs/tutorial/dependencies/sub-dependencies.md @@ -35,7 +35,7 @@ Entonces podemos usar la dependencia con: {* ../../docs_src/dependencies/tutorial005_an_py310.py hl[23] *} -/// info | Información +/// note | Nota Fíjate que solo estamos declarando una dependencia en la *path operation function*, `query_or_cookie_extractor`. diff --git a/docs/es/docs/tutorial/first-steps.md b/docs/es/docs/tutorial/first-steps.md index 1fcfdc140..5aaf8bdfa 100644 --- a/docs/es/docs/tutorial/first-steps.md +++ b/docs/es/docs/tutorial/first-steps.md @@ -180,7 +180,7 @@ lo cual sería equivalente a: from backend.main import app ``` -### `fastapi dev` con path { #fastapi-dev-with-path } +### `fastapi dev` con path o con la opción de CLI `--entrypoint` { #fastapi-dev-with-path-or-with-entrypoint-cli-option } También puedes pasar el path del archivo al comando `fastapi dev`, y adivinará el objeto app de FastAPI que debe usar: @@ -188,29 +188,19 @@ También puedes pasar el path del archivo al comando `fastapi dev`, y adivinará $ fastapi dev main.py ``` -Pero tendrías que recordar pasar el path correcto cada vez que llames al comando `fastapi`. +O, también puedes pasar la opción `--entrypoint` al comando `fastapi dev`: + +```console +$ fastapi dev --entrypoint main:app +``` + +Pero tendrías que recordar pasar el path o entrypoint correctos cada vez que llames al comando `fastapi`. Además, otras herramientas podrían no ser capaces de encontrarlo, por ejemplo la [Extensión de VS Code](../editor-support.md) o [FastAPI Cloud](https://fastapicloud.com), así que se recomienda usar el `entrypoint` en `pyproject.toml`. ### Despliega tu app (opcional) { #deploy-your-app-optional } -Opcionalmente puedes desplegar tu app de FastAPI en [FastAPI Cloud](https://fastapicloud.com), ve y únete a la lista de espera si aún no lo has hecho. 🚀 - -Si ya tienes una cuenta de **FastAPI Cloud** (te invitamos desde la lista de espera 😉), puedes desplegar tu aplicación con un solo comando. - -Antes de desplegar, asegúrate de haber iniciado sesión: - -
- -```console -$ fastapi login - -You are logged in to FastAPI Cloud 🚀 -``` - -
- -Luego despliega tu app: +Opcionalmente puedes desplegar tu app de FastAPI en [FastAPI Cloud](https://fastapicloud.com) con un solo comando. 🚀
@@ -226,6 +216,8 @@ Deploying to FastAPI Cloud...
+La CLI detectará automáticamente tu aplicación de FastAPI y la desplegará en la nube. Si no has iniciado sesión, se abrirá tu navegador para completar el proceso de autenticación. + ¡Eso es todo! Ahora puedes acceder a tu app en esa URL. ✨ ## Recapitulación, paso a paso { #recap-step-by-step } @@ -270,7 +262,7 @@ https://example.com/items/foo /items/foo ``` -/// info | Información +/// note | Nota Un "path" también es comúnmente llamado "endpoint" o "ruta". @@ -322,7 +314,7 @@ El `@app.get("/")` le dice a **FastAPI** que la función justo debajo se encarga * el path `/` * usando una get operación -/// info | Información sobre `@decorator` +/// note | Información sobre `@decorator` Esa sintaxis `@algo` en Python se llama un "decorador". diff --git a/docs/es/docs/tutorial/metadata.md b/docs/es/docs/tutorial/metadata.md index 35bc98a26..9dd9088da 100644 --- a/docs/es/docs/tutorial/metadata.md +++ b/docs/es/docs/tutorial/metadata.md @@ -74,7 +74,7 @@ Usa el parámetro `tags` con tus *path operations* (y `APIRouter`s) para asignar {* ../../docs_src/metadata/tutorial004_py310.py hl[21,26] *} -/// info | Información +/// note | Nota Lee más sobre etiquetas en [Configuración de Path Operation](path-operation-configuration.md#tags). diff --git a/docs/es/docs/tutorial/path-operation-configuration.md b/docs/es/docs/tutorial/path-operation-configuration.md index 21fd503bb..30dc9c19f 100644 --- a/docs/es/docs/tutorial/path-operation-configuration.md +++ b/docs/es/docs/tutorial/path-operation-configuration.md @@ -72,13 +72,13 @@ Puedes especificar la descripción del response con el parámetro `response_desc {* ../../docs_src/path_operation_configuration/tutorial005_py310.py hl[18] *} -/// info | Información +/// note | Nota Ten en cuenta que `response_description` se refiere específicamente al response, mientras que `description` se refiere a la *path operation* en general. /// -/// check | Revisa +/// tip | Consejo OpenAPI especifica que cada *path operation* requiere una descripción de response. diff --git a/docs/es/docs/tutorial/path-params-numeric-validations.md b/docs/es/docs/tutorial/path-params-numeric-validations.md index 5e7b9a978..24cd5117e 100644 --- a/docs/es/docs/tutorial/path-params-numeric-validations.md +++ b/docs/es/docs/tutorial/path-params-numeric-validations.md @@ -8,7 +8,7 @@ Primero, importa `Path` de `fastapi`, e importa `Annotated`: {* ../../docs_src/path_params_numeric_validations/tutorial001_an_py310.py hl[1,3] *} -/// info | Información +/// note | Nota FastAPI agregó soporte para `Annotated` (y comenzó a recomendar su uso) en la versión 0.95.0. @@ -131,7 +131,7 @@ Y también puedes declarar validaciones numéricas: * `lt`: `l`ess `t`han * `le`: `l`ess than or `e`qual -/// info | Información +/// note | Nota `Query`, `Path` y otras clases que verás más adelante son subclases de una clase común `Param`. diff --git a/docs/es/docs/tutorial/path-params.md b/docs/es/docs/tutorial/path-params.md index f1aa4ef8b..94465013e 100644 --- a/docs/es/docs/tutorial/path-params.md +++ b/docs/es/docs/tutorial/path-params.md @@ -20,7 +20,7 @@ Puedes declarar el tipo de un parámetro de path en la función, usando anotacio En este caso, `item_id` se declara como un `int`. -/// check | Revisa +/// tip | Consejo Esto te dará soporte del editor dentro de tu función, con chequeo de errores, autocompletado, etc. @@ -34,7 +34,7 @@ Si ejecutas este ejemplo y abres tu navegador en [http://127.0.0.1:8000/items/3] {"item_id":3} ``` -/// check | Revisa +/// tip | Consejo Nota que el valor que tu función recibió (y devolvió) es `3`, como un `int` de Python, no un string `"3"`. @@ -66,7 +66,7 @@ porque el parámetro de path `item_id` tenía un valor de `"foo"`, que no es un El mismo error aparecería si proporcionaras un `float` en lugar de un `int`, como en: [http://127.0.0.1:8000/items/4.2](http://127.0.0.1:8000/items/4.2) -/// check | Revisa +/// tip | Consejo Entonces, con la misma declaración de tipo de Python, **FastAPI** te ofrece validación de datos. @@ -82,7 +82,7 @@ Y cuando abras tu navegador en [http://127.0.0.1:8000/docs](http://127.0.0.1:800 -/// check | Revisa +/// tip | Consejo Nuevamente, solo con esa misma declaración de tipo de Python, **FastAPI** te ofrece documentación automática e interactiva (integrando Swagger UI). @@ -130,7 +130,7 @@ La primera siempre será utilizada ya que el path coincide primero. ## Valores predefinidos { #predefined-values } -Si tienes una *path operation* que recibe un *path parameter*, pero quieres que los valores posibles válidos del *path parameter* estén predefinidos, puedes usar un `Enum` estándar de Python. +Si tienes una *path operation* que recibe un *path parameter*, pero quieres que los valores posibles válidos del *path parameter* estén predefinidos, puedes usar un `Enum` estándar de Python. ### Crear una clase `Enum` { #create-an-enum-class } diff --git a/docs/es/docs/tutorial/query-params-str-validations.md b/docs/es/docs/tutorial/query-params-str-validations.md index 44beba2d3..01c2e4051 100644 --- a/docs/es/docs/tutorial/query-params-str-validations.md +++ b/docs/es/docs/tutorial/query-params-str-validations.md @@ -29,7 +29,7 @@ Para lograr eso, primero importa: {* ../../docs_src/query_params_str_validations/tutorial002_an_py310.py hl[1,3] *} -/// info | Información +/// note | Nota FastAPI añadió soporte para `Annotated` (y empezó a recomendarlo) en la versión 0.95.0. @@ -298,7 +298,7 @@ También puedes usar `list` directamente en lugar de `list[str]`: Ten en cuenta que en este caso, FastAPI no comprobará el contenido de la list. -Por ejemplo, `list[int]` comprobaría (y documentaría) que el contenido de la list son enteros. Pero `list` sola no lo haría. +Por ejemplo, `list[int]` comprobaría (and documentaría) que el contenido de la list son enteros. Pero `list` sola no lo haría. /// @@ -382,7 +382,7 @@ Por ejemplo, este validador personalizado comprueba que el ID del ítem empiece {* ../../docs_src/query_params_str_validations/tutorial015_an_py310.py hl[5,16:19,24] *} -/// info | Información +/// note | Nota Esto está disponible con Pydantic versión 2 o superior. 😎 diff --git a/docs/es/docs/tutorial/query-params.md b/docs/es/docs/tutorial/query-params.md index 2dbb04ef4..f6664d115 100644 --- a/docs/es/docs/tutorial/query-params.md +++ b/docs/es/docs/tutorial/query-params.md @@ -65,7 +65,7 @@ De la misma manera, puedes declarar parámetros de query opcionales, establecien En este caso, el parámetro de función `q` será opcional y será `None` por defecto. -/// check | Revisa +/// tip | Consejo Además, nota que **FastAPI** es lo suficientemente inteligente para notar que el parámetro de path `item_id` es un parámetro de path y `q` no lo es, por lo tanto, es un parámetro de query. diff --git a/docs/es/docs/tutorial/request-files.md b/docs/es/docs/tutorial/request-files.md index 8bfc7a772..f7470ca88 100644 --- a/docs/es/docs/tutorial/request-files.md +++ b/docs/es/docs/tutorial/request-files.md @@ -2,7 +2,7 @@ Puedes definir archivos que serán subidos por el cliente utilizando `File`. -/// info | Información +/// note | Nota Para recibir archivos subidos, primero instala [`python-multipart`](https://github.com/Kludex/python-multipart). @@ -28,7 +28,7 @@ Crea parámetros de archivo de la misma manera que lo harías para `Body` o `For {* ../../docs_src/request_files/tutorial001_an_py310.py hl[9] *} -/// info | Información +/// note | Nota `File` es una clase que hereda directamente de `Form`. diff --git a/docs/es/docs/tutorial/request-form-models.md b/docs/es/docs/tutorial/request-form-models.md index b20421bd0..e0685d4be 100644 --- a/docs/es/docs/tutorial/request-form-models.md +++ b/docs/es/docs/tutorial/request-form-models.md @@ -2,7 +2,7 @@ Puedes usar **modelos de Pydantic** para declarar **campos de formulario** en FastAPI. -/// info | Información +/// note | Nota Para usar formularios, primero instala [`python-multipart`](https://github.com/Kludex/python-multipart). diff --git a/docs/es/docs/tutorial/request-forms-and-files.md b/docs/es/docs/tutorial/request-forms-and-files.md index f7b5000b7..434a665c9 100644 --- a/docs/es/docs/tutorial/request-forms-and-files.md +++ b/docs/es/docs/tutorial/request-forms-and-files.md @@ -2,7 +2,7 @@ Puedes definir archivos y campos de formulario al mismo tiempo usando `File` y `Form`. -/// info | Información +/// note | Nota Para recibir archivos subidos y/o form data, primero instala [`python-multipart`](https://github.com/Kludex/python-multipart). diff --git a/docs/es/docs/tutorial/request-forms.md b/docs/es/docs/tutorial/request-forms.md index 7b78aee69..60722a261 100644 --- a/docs/es/docs/tutorial/request-forms.md +++ b/docs/es/docs/tutorial/request-forms.md @@ -1,8 +1,8 @@ -# Datos de formulario { #form-data } +# Form Data { #form-data } Cuando necesitas recibir campos de formulario en lugar de JSON, puedes usar `Form`. -/// info | Información +/// note | Nota Para usar formularios, primero instala [`python-multipart`](https://github.com/Kludex/python-multipart). @@ -32,7 +32,7 @@ La especificación requiere que los campos se Con `Form` puedes declarar las mismas configuraciones que con `Body` (y `Query`, `Path`, `Cookie`), incluyendo validación, ejemplos, un alias (por ejemplo, `user-name` en lugar de `username`), etc. -/// info | Información +/// note | Nota `Form` es una clase que hereda directamente de `Body`. @@ -70,4 +70,4 @@ Esto no es una limitación de **FastAPI**, es parte del protocolo HTTP. ## Recapitulación { #recap } -Usa `Form` para declarar parámetros de entrada de datos de formulario. +Usa `Form` para declarar parámetros de entrada de form data. diff --git a/docs/es/docs/tutorial/response-model.md b/docs/es/docs/tutorial/response-model.md index fc9028bee..2c97a6764 100644 --- a/docs/es/docs/tutorial/response-model.md +++ b/docs/es/docs/tutorial/response-model.md @@ -72,7 +72,7 @@ Aquí estamos declarando un modelo `UserIn`, contendrá una contraseña en texto {* ../../docs_src/response_model/tutorial002_py310.py hl[7,9] *} -/// info | Información +/// note | Nota Para usar `EmailStr`, primero instala [`email-validator`](https://github.com/JoshData/python-email-validator). @@ -251,7 +251,7 @@ Entonces, si envías un request a esa *path operation* para el ítem con ID `foo } ``` -/// info | Información +/// note | Nota También puedes usar: diff --git a/docs/es/docs/tutorial/response-status-code.md b/docs/es/docs/tutorial/response-status-code.md index a070819bb..4b9f0e234 100644 --- a/docs/es/docs/tutorial/response-status-code.md +++ b/docs/es/docs/tutorial/response-status-code.md @@ -18,7 +18,7 @@ Observa que `status_code` es un parámetro del método "decorador" (`get`, `post El parámetro `status_code` recibe un número con el código de estado HTTP. -/// info | Información +/// note | Nota `status_code` también puede recibir un `IntEnum`, como por ejemplo el [`http.HTTPStatus`](https://docs.python.org/3/library/http.html#http.HTTPStatus) de Python. diff --git a/docs/es/docs/tutorial/schema-extra-example.md b/docs/es/docs/tutorial/schema-extra-example.md index 73d0cdbe4..fba7215ef 100644 --- a/docs/es/docs/tutorial/schema-extra-example.md +++ b/docs/es/docs/tutorial/schema-extra-example.md @@ -24,7 +24,7 @@ Por ejemplo, podrías usarlo para añadir metadatos para una interfaz de usuario /// -/// info | Información +/// note | Nota OpenAPI 3.1.0 (usado desde FastAPI 0.99.0) añadió soporte para `examples`, que es parte del estándar de **JSON Schema**. @@ -155,7 +155,7 @@ OpenAPI también añadió los campos `example` y `examples` a otras partes de la * `File()` * `Form()` -/// info | Información +/// note | Nota Este viejo parámetro `examples` específico de OpenAPI ahora es `openapi_examples` desde FastAPI `0.103.0`. @@ -171,7 +171,7 @@ Y ahora este nuevo campo `examples` tiene precedencia sobre el viejo campo únic Este nuevo campo `examples` en JSON Schema es **solo una `list`** de ejemplos, no un dict con metadatos adicionales como en los otros lugares en OpenAPI (descritos arriba). -/// info | Información +/// note | Nota Incluso después de que OpenAPI 3.1.0 fue lanzado con esta nueva integración más sencilla con JSON Schema, por un tiempo, Swagger UI, la herramienta que proporciona la documentación automática, no soportaba OpenAPI 3.1.0 (lo hace desde la versión 5.0.0 🎉). diff --git a/docs/es/docs/tutorial/security/first-steps.md b/docs/es/docs/tutorial/security/first-steps.md index 8118906e5..e4755f951 100644 --- a/docs/es/docs/tutorial/security/first-steps.md +++ b/docs/es/docs/tutorial/security/first-steps.md @@ -24,7 +24,7 @@ Copia el ejemplo en un archivo `main.py`: ## Ejecútalo { #run-it } -/// info | Información +/// note | Nota El paquete [`python-multipart`](https://github.com/Kludex/python-multipart) se instala automáticamente con **FastAPI** cuando ejecutas el comando `pip install "fastapi[standard]"`. @@ -60,7 +60,7 @@ Verás algo así: -/// check | ¡Botón de autorización! +/// tip | ¡Botón de autorización! Ya tienes un nuevo y brillante botón de "Authorize". @@ -118,7 +118,7 @@ Así que, revisémoslo desde ese punto de vista simplificado: En este ejemplo vamos a usar **OAuth2**, con el flujo **Password**, usando un token **Bearer**. Hacemos eso utilizando la clase `OAuth2PasswordBearer`. -/// info | Información +/// note | Nota Un token "bearer" no es la única opción. @@ -148,7 +148,7 @@ Este parámetro no crea ese endpoint / *path operation*, pero declara que la URL Pronto también crearemos la verdadera *path operation*. -/// info | Información +/// note | Nota Si eres un "Pythonista" muy estricto, tal vez no te guste el estilo del nombre del parámetro `tokenUrl` en lugar de `token_url`. @@ -176,7 +176,7 @@ Esta dependencia proporcionará un `str` que se asigna al parámetro `token` de **FastAPI** sabrá que puede usar esta dependencia para definir un "security scheme" en el esquema OpenAPI (y en los docs automáticos del API). -/// info | Detalles técnicos +/// note | Detalles técnicos **FastAPI** sabrá que puede usar la clase `OAuth2PasswordBearer` (declarada en una dependencia) para definir el esquema de seguridad en OpenAPI porque hereda de `fastapi.security.oauth2.OAuth2`, que a su vez hereda de `fastapi.security.base.SecurityBase`. diff --git a/docs/es/docs/tutorial/security/get-current-user.md b/docs/es/docs/tutorial/security/get-current-user.md index 67b6c5835..fd331f68e 100644 --- a/docs/es/docs/tutorial/security/get-current-user.md +++ b/docs/es/docs/tutorial/security/get-current-user.md @@ -50,7 +50,7 @@ Aquí **FastAPI** no se confundirá porque estás usando `Depends`. /// -/// check | Revisa +/// tip | Consejo El modo en que este sistema de dependencias está diseñado nos permite tener diferentes dependencias (diferentes "dependables") que todas devuelven un modelo `User`. diff --git a/docs/es/docs/tutorial/security/oauth2-jwt.md b/docs/es/docs/tutorial/security/oauth2-jwt.md index af1140d1b..efd309df9 100644 --- a/docs/es/docs/tutorial/security/oauth2-jwt.md +++ b/docs/es/docs/tutorial/security/oauth2-jwt.md @@ -42,7 +42,7 @@ $ pip install pyjwt -/// info | Información +/// note | Nota Si planeas usar algoritmos de firma digital como RSA o ECDSA, deberías instalar la dependencia del paquete de criptografía `pyjwt[crypto]`. @@ -213,7 +213,7 @@ Usando las credenciales: Usuario: `johndoe` Contraseña: `secret` -/// check | Revisa +/// tip | Consejo Observa que en ninguna parte del código está la contraseña en texto claro "`secret`", solo tenemos la versión con hash. diff --git a/docs/es/docs/tutorial/security/simple-oauth2.md b/docs/es/docs/tutorial/security/simple-oauth2.md index 15c7146bd..2a98fff6c 100644 --- a/docs/es/docs/tutorial/security/simple-oauth2.md +++ b/docs/es/docs/tutorial/security/simple-oauth2.md @@ -32,7 +32,7 @@ Normalmente se utilizan para declarar permisos de seguridad específicos, por ej * `instagram_basic` es usado por Facebook / Instagram. * `https://www.googleapis.com/auth/drive` es usado por Google. -/// info | Información +/// note | Nota En OAuth2 un "scope" es solo un string que declara un permiso específico requerido. @@ -72,7 +72,7 @@ Si necesitas imponerlo, utiliza `OAuth2PasswordRequestFormStrict` en lugar de `O * Un `client_id` opcional (no lo necesitamos para nuestro ejemplo). * Un `client_secret` opcional (no lo necesitamos para nuestro ejemplo). -/// info | Información +/// note | Nota `OAuth2PasswordRequestForm` no es una clase especial para **FastAPI** como lo es `OAuth2PasswordBearer`. @@ -94,7 +94,7 @@ No estamos usando `scopes` en este ejemplo, pero la funcionalidad está ahí si /// -Ahora, obtén los datos del usuario desde la base de datos (falsa), usando el `username` del campo del form. +Ahora, obtén los datos del usuario desde la base de datos (falsa), usando el `username` del campo del formulario. Si no existe tal usuario, devolvemos un error diciendo "Incorrect username or password". @@ -144,7 +144,7 @@ UserInDB( ) ``` -/// info | Información +/// note | Nota Para una explicación más completa de `**user_dict` revisa en [la documentación para **Extra Models**](../extra-models.md#about-user-in-dict). @@ -196,7 +196,7 @@ Así que, en nuestro endpoint, solo obtendremos un usuario si el usuario existe, {* ../../docs_src/security/tutorial003_an_py310.py hl[58:66,69:74,94] *} -/// info | Información +/// note | Nota El header adicional `WWW-Authenticate` con el valor `Bearer` que estamos devolviendo aquí también es parte de la especificación. diff --git a/docs/es/docs/tutorial/server-sent-events.md b/docs/es/docs/tutorial/server-sent-events.md index 0a008c0de..79716ac85 100644 --- a/docs/es/docs/tutorial/server-sent-events.md +++ b/docs/es/docs/tutorial/server-sent-events.md @@ -4,7 +4,7 @@ Puedes enviar datos en streaming al cliente usando **Server-Sent Events** (SSE). Esto es similar a [Stream JSON Lines](stream-json-lines.md), pero usa el formato `text/event-stream`, que los navegadores soportan de forma nativa con la [`EventSource` API](https://developer.mozilla.org/en-US/docs/Web/API/EventSource). -/// info | Información +/// note | Nota Añadido en FastAPI 0.135.0. diff --git a/docs/es/docs/tutorial/stream-json-lines.md b/docs/es/docs/tutorial/stream-json-lines.md index e7fe18f5e..356b4e0bf 100644 --- a/docs/es/docs/tutorial/stream-json-lines.md +++ b/docs/es/docs/tutorial/stream-json-lines.md @@ -2,7 +2,7 @@ Podrías tener una secuencia de datos que quieras enviar en un "**stream**", podrías hacerlo con **JSON Lines**. -/// info | Información +/// note | Nota Añadido en FastAPI 0.134.0. @@ -48,7 +48,7 @@ Una response tendría un tipo de contenido `application/jsonl` (en lugar de `app Es muy similar a un array JSON (equivalente de una list de Python), pero en lugar de estar envuelto en `[]` y tener `,` entre los ítems, tiene **un objeto JSON por línea**, separados por un carácter de nueva línea. -/// info | Información +/// note | Nota El punto importante es que tu app podrá producir cada línea a su turno, mientras el cliente consume las líneas anteriores. diff --git a/docs/es/docs/tutorial/testing.md b/docs/es/docs/tutorial/testing.md index a40d90c5e..9612b6cba 100644 --- a/docs/es/docs/tutorial/testing.md +++ b/docs/es/docs/tutorial/testing.md @@ -1,4 +1,4 @@ -# Testing { #testing } +# Pruebas { #testing } Gracias a [Starlette](https://www.starlette.dev/testclient/), escribir pruebas para aplicaciones de **FastAPI** es fácil y agradable. @@ -8,7 +8,7 @@ Con él, puedes usar [pytest](https://docs.pytest.org/) directamente con **FastA ## Usando `TestClient` { #using-testclient } -/// info | Información +/// note | Nota Para usar `TestClient`, primero instala [`httpx`](https://www.python-httpx.org). @@ -142,7 +142,7 @@ Por ejemplo: Para más información sobre cómo pasar datos al backend (usando `httpx` o el `TestClient`) revisa la [documentación de HTTPX](https://www.python-httpx.org). -/// info | Información +/// note | Nota Ten en cuenta que el `TestClient` recibe datos que pueden ser convertidos a JSON, no modelos de Pydantic.