Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/main' into external-assets
Browse files Browse the repository at this point in the history
  • Loading branch information
abulvenz committed May 22, 2024
2 parents ca09e38 + 956a526 commit 9972a35
Show file tree
Hide file tree
Showing 34 changed files with 622 additions and 369 deletions.
136 changes: 74 additions & 62 deletions docs/es/README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
```diff
+ ยฟBuscando Pynecone? Estas en el repositorio correcto. Pynecone ha sido renomabrado a Reflex. +
+ ยฟBuscando Pynecone? Estรกs en el repositorio correcto. Pynecone ha sido renombrado a Reflex. +
```

<div align="center">
Expand All @@ -8,28 +8,42 @@

<hr>

### **โœจ Aplicaciones web personalizables y eficaces en Python puro. Despliega tรบ aplicaciรณn en segundos. โœจ**
### **โœจ Aplicaciones web personalizables y eficaces en Python puro. Despliega tu aplicaciรณn en segundos. โœจ**
[![PyPI version](https://badge.fury.io/py/reflex.svg)](https://badge.fury.io/py/reflex)
![tests](https://github.com/pynecone-io/pynecone/actions/workflows/integration.yml/badge.svg)
![versions](https://img.shields.io/pypi/pyversions/reflex.svg)
[![Documentaiton](https://img.shields.io/badge/Documentation%20-Introduction%20-%20%23007ec6)](https://reflex.dev/docs/getting-started/introduction)
![Pruebas](https://github.com/pynecone-io/pynecone/actions/workflows/integration.yml/badge.svg)
![Versiones](https://img.shields.io/pypi/pyversions/reflex.svg)
[![Documentaciรณn](https://img.shields.io/badge/Documentation%20-Introduction%20-%20%23007ec6)](https://reflex.dev/docs/getting-started/introduction)
[![Discord](https://img.shields.io/discord/1029853095527727165?color=%237289da&label=Discord)](https://discord.gg/T5WSbC2YtQ)
</div>

---
[English](https://github.com/reflex-dev/reflex/blob/main/README.md) | [็ฎ€ไฝ“ไธญๆ–‡](https://github.com/reflex-dev/reflex/blob/main/docs/zh/zh_cn/README.md) | [็น้ซ”ไธญๆ–‡](https://github.com/reflex-dev/reflex/blob/main/docs/zh/zh_tw/README.md) | [Tรผrkรงe](https://github.com/reflex-dev/reflex/blob/main/docs/tr/README.md) | [เคนเคฟเค‚เคฆเฅ€](https://github.com/reflex-dev/reflex/blob/main/docs/in/README.md) | [Portuguรชs (Brasil)](https://github.com/reflex-dev/reflex/blob/main/docs/pt/pt_br/README.md) | [Italiano](https://github.com/reflex-dev/reflex/blob/main/docs/it/README.md) | [Espaรฑol](https://github.com/reflex-dev/reflex/blob/main/docs/es/README.md)

[English](https://github.com/reflex-dev/reflex/blob/main/README.md) | [็ฎ€ไฝ“ไธญๆ–‡](https://github.com/reflex-dev/reflex/blob/main/docs/zh/zh_cn/README.md) | [็น้ซ”ไธญๆ–‡](https://github.com/reflex-dev/reflex/blob/main/docs/zh/zh_tw/README.md) | [Tรผrkรงe](https://github.com/reflex-dev/reflex/blob/main/docs/tr/README.md) | [เคนเคฟเค‚เคฆเฅ€](https://github.com/reflex-dev/reflex/blob/main/docs/in/README.md) | [Portuguรชs (Brasil)](https://github.com/reflex-dev/reflex/blob/main/docs/pt/pt_br/README.md) | [Italiano](https://github.com/reflex-dev/reflex/blob/main/docs/it/README.md) | [Espaรฑol](https://github.com/reflex-dev/reflex/blob/main/docs/es/README.md) | [ํ•œ๊ตญ์–ด](https://github.com/reflex-dev/reflex/blob/main/docs/kr/README.md) | [ๆ—ฅๆœฌ่ชž](https://github.com/reflex-dev/reflex/blob/main/docs/ja/README.md)

---

# Reflex

Reflex es una biblioteca para construir aplicaciones web full-stack en Python puro.

Caracterรญsticas clave:
* **Python puro** - Escribe el frontend y backend de tu aplicaciรณn en Python, sin necesidad de aprender JavaScript.
* **Flexibilidad total** - Reflex es fรกcil para empezar, pero tambiรฉn puede escalar a aplicaciones complejas.
* **Despliegue instantรกneo** - Despuรฉs de construir, despliega tu aplicaciรณn con un [solo comando](https://reflex.dev/docs/hosting/deploy-quick-start/) u hospรฉdala en tu propio servidor.

Consulta nuestra [pรกgina de arquitectura](https://reflex.dev/blog/2024-03-21-reflex-architecture/#the-reflex-architecture) para aprender cรณmo funciona Reflex en detalle.

## โš™๏ธ Instalaciรณn

Abra un terminal y ejecute (Requiere Python 3.7+):
Abra un terminal y ejecute (Requiere Python 3.8+):

```bash
pip install reflex
```

## ๐Ÿฅณ Crea tรบ primera aplicaciรณn
## ๐Ÿฅณ Crea tu primera aplicaciรณn

Al instalar `reflex` tambien se instala la herramienta de lรญnea de comandos `reflex`.
Al instalar `reflex` tambiรฉn se instala la herramienta de lรญnea de comandos `reflex`.

Compruebe que la instalaciรณn se ha realizado correctamente creando un nuevo proyecto. (Sustituye `my_app_name` por el nombre de tu proyecto):

Expand All @@ -39,7 +53,7 @@ cd my_app_name
reflex init
```

Este comando inicializa una aplicaciรณn de ejemplo (plantilla) en tu nuevo directorio.
Este comando inicializa una plantilla en tu nuevo directorio.

Puedes iniciar esta aplicaciรณn en modo de desarrollo:

Expand All @@ -54,12 +68,12 @@ Ahora puede modificar el cรณdigo fuente en `my_app_name/my_app_name.py`. Reflex

## ๐Ÿซง Ejemplo de una Aplicaciรณn

Veamos un ejemplo: crearemos una UI de generaciรณn de imรกgenes en torno a DALL-E. Para simplificar, solo llamamos a la API de OpenAI, pero podrรญas reeemplazar esto con un modelo ML ejecutado localmente.
Veamos un ejemplo: crearemos una UI de generaciรณn de imรกgenes en torno a [DALLยทE](https://platform.openai.com/docs/guides/images/image-generation?context=node). Para simplificar, solo llamamos a la [API de OpenAI](https://platform.openai.com/docs/api-reference/authentication), pero podrรญas reemplazar esto con un modelo ML ejecutado localmente.

&nbsp;

<div align="center">
<img src="https://raw.githubusercontent.com/reflex-dev/reflex/main/docs/images/dalle.gif" alt="A frontend wrapper for DALLยทE, shown in the process of generating an image." width="550" />
<img src="https://raw.githubusercontent.com/reflex-dev/reflex/main/docs/images/dalle.gif" alt="Un envoltorio frontend para DALLยทE, mostrado en el proceso de generar una imagen." width="550" />
</div>

&nbsp;
Expand All @@ -70,61 +84,65 @@ Aquรญ estรก el cรณdigo completo para crear esto. ยกTodo esto se hace en un archi
import reflex as rx
import openai

openai.api_key = "YOUR_API_KEY"
openai_client = openai.OpenAI()

class State(rx.State):
"""The app state."""
"""El estado de la aplicaciรณn"""
prompt = ""
image_url = ""
processing = False
complete = False

def get_image(self):
"""Get the image from the prompt."""
"""Obtiene la imagen desde la consulta."""
if self.prompt == "":
return rx.window_alert("Prompt Empty")

self.processing, self.complete = True, False
yield
response = openai.Image.create(prompt=self.prompt, n=1, size="1024x1024")
self.image_url = response["data"][0]["url"]
response = openai_client.images.generate(
prompt=self.prompt, n=1, size="1024x1024"
)
self.image_url = response.data[0].url
self.processing, self.complete = False, True


def index():
return rx.center(
rx.vstack(
rx.heading("DALLยทE"),
rx.input(placeholder="Enter a prompt", on_blur=State.set_prompt),
rx.heading("DALL-E", font_size="1.5em"),
rx.input(
placeholder="Enter a prompt..",
on_blur=State.set_prompt,
width="25em",
),
rx.button(
"Generate Image",
"Generate Image",
on_click=State.get_image,
is_loading=State.processing,
width="100%",
width="25em",
loading=State.processing
),
rx.cond(
State.complete,
rx.image(
src=State.image_url,
height="25em",
width="25em",
)
rx.image(src=State.image_url, width="20em"),
),
padding="2em",
shadow="lg",
border_radius="lg",
align="center",
),
width="100%",
height="100vh",
)

# Add state and page to the app.
# Agrega el estado y la pagina a la aplicaciรณn
app = rx.App()
app.add_page(index, title="reflex:DALLยทE")
app.add_page(index, title="Reflex:DALL-E")
```

## Vamos a analizarlo.

<div align="center">
<img src="https://github.com/reflex-dev/reflex/blob/main/docs/images/dalle_colored_code_example.png?raw=true" alt="Explicando las diferencias entre las partes del backend y frontend de la aplicaciรณn DALL-E." width="900" />
</div>

### **Reflex UI**

Empezemos por la interfaz de usuario (UI).
Expand All @@ -138,17 +156,17 @@ def index():

Esta funciรณn `index` define el frontend de la aplicaciรณn.

Utilizamos diferentes componentes como `center`, `vstack`, `input`, y `button` para construir el frontend. Los componentes pueden anidarse unos dentro de otros para crear diseรฑos complejos. Ademรกs, puedes usar argumentos (keyword args) para darles estilo con toda la potencia de CSS.
Utilizamos diferentes componentes como `center`, `vstack`, `input`, y `button` para construir el frontend. Los componentes pueden anidarse unos dentro de otros para crear diseรฑos complejos. Ademรกs, puedes usar argumentos de tipo keyword para darles estilo con toda la potencia de CSS.

Reflex viene con [mas de 60+ componentes incorporados](https://reflex.dev/docs/library) para ayudarle a empezar. Estamos aรฑadiendo activamente mรกs componentes y es fรกcil [crear sus propios componentes](https://reflex.dev/docs/advanced-guide/wrapping-react).
Reflex viene con [mas de 60 componentes incorporados](https://reflex.dev/docs/library) para ayudarle a empezar. Estamos aรฑadiendo activamente mรกs componentes y es fรกcil [crear sus propios componentes](https://reflex.dev/docs/wrapping-react/overview/).

### **State**
### **Estado**

Reflex representa su UI en funciรณn de su estado (State).
Reflex representa su UI como una funciรณn de su estado (State).

```python
class State(rx.State):
"""The app state."""
"""El estado de la aplicaciรณn"""
prompt = ""
image_url = ""
processing = False
Expand All @@ -157,28 +175,30 @@ class State(rx.State):

El estado (State) define todas las variables (llamadas vars) de una aplicaciรณn que pueden cambiar y las funciones que las modifican.

Aquรญ el estado (State) se compone de `prompt` e `image_url`. Tambiรฉn estรกn los booleanos `processing` y `complete` para poder indicar cuรกndo mostrar el progreso circular y la imagen.
Aquรญ el estado se compone de `prompt` e `image_url`. Tambiรฉn estรกn los booleanos `processing` y `complete` para indicar cuando se deshabilite el botรณn (durante la generaciรณn de la imagen) y cuando se muestre la imagen resultante.

### **Event Handlers**
### **Manejadores de Evento**

```python
def get_image(self):
"""Get the image from the prompt."""
"""Obtiene la imagen desde la consulta."""
if self.prompt == "":
return rx.window_alert("Prompt Empty")

self.processing, self.complete = True, False
yield
response = openai.Image.create(prompt=self.prompt, n=1, size="1024x1024")
self.image_url = response["data"][0]["url"]
response = openai_client.images.generate(
prompt=self.prompt, n=1, size="1024x1024"
)
self.image_url = response.data[0].url
self.processing, self.complete = False, True
```

Dentro del estado (State), definimos funciones llamadas "event handlers" que cambian los 'state vars'. Event handlers, son la manera que podemos modificar el 'state' en Reflex. Pueden ser activados en respuesta a las acciones del usuario, como hacer clic en un botรณn o escribir en un cuadro de texto. Estas acciones se llaman eventos 'events'.
Dentro del estado, definimos funciones llamadas manejadores de eventos que cambian las variables de estado. Los Manejadores de Evento son la manera que podemos modificar el estado en Reflex. Pueden ser activados en respuesta a las acciones del usuario, como hacer clic en un botรณn o escribir en un cuadro de texto. Estas acciones se llaman eventos.

Nuestra aplicaciรณn DALLยทE. tiene un controlador de eventos "event handler", `get_image` que recibe esta imagen del OpenAI API. El uso de `yield` en medio de un controlador de eventos "event handler" harรก que la UI se actualice. De lo contrario, la interfaz se actualizarรก al final del controlador de eventos "event handler".
Nuestra aplicaciรณn DALLยทE tiene un manipulador de eventos, `get_image` que recibe esta imagen del OpenAI API. El uso de `yield` en medio de un manipulador de eventos harรก que la UI se actualice. De lo contrario, la interfaz se actualizarรก al final del manejador de eventos.

### **Routing**
### **Enrutamiento**

Por รบltimo, definimos nuestra app.

Expand All @@ -198,36 +218,28 @@ Puedes crear una aplicaciรณn multipรกgina aรฑadiendo mรกs pรกginas.

<div align="center">

๐Ÿ“‘ [Docs](https://reflex.dev/docs/getting-started/introduction) &nbsp; | &nbsp; ๐Ÿ—ž๏ธ [Blog](https://reflex.dev/blog) &nbsp; | &nbsp; ๐Ÿ“ฑ [Biblioteca de Componentes](https://reflex.dev/docs/library) &nbsp; | &nbsp; ๐Ÿ–ผ๏ธ [Galerรญa](https://reflex.dev/docs/gallery) &nbsp; | &nbsp; ๐Ÿ›ธ [Hospedaje](https://reflex.dev/docs/hosting/deploy) &nbsp;
๐Ÿ“‘ [Docs](https://reflex.dev/docs/getting-started/introduction) &nbsp; | &nbsp; ๐Ÿ—ž๏ธ [Blog](https://reflex.dev/blog) &nbsp; | &nbsp; ๐Ÿ“ฑ [Librerรญa de componentes](https://reflex.dev/docs/library) &nbsp; | &nbsp; ๐Ÿ–ผ๏ธ [Galerรญa](https://reflex.dev/docs/gallery) &nbsp; | &nbsp; ๐Ÿ›ธ [Despliegue](https://reflex.dev/docs/hosting/deploy-quick-start) &nbsp;

</div>


## โœ… Estado

Reflex se lanzรณ en diciembre de 2022 con el nombre de Pynecone.

ยกDesde febrero de 2024, nuestro servicio de alojamiento estรก en fase alfa! Durante este tiempo, cualquiera puede implementar sus aplicaciones de forma gratuita. Consulta nuestra [hoja de ruta](https://github.com/reflex-dev/reflex/issues/2727) para ver quรฉ estรก planeado.

## โœ… Estatus

Reflex se lanzรณ en Diciembre de 2022 con el nombre Pynecone.

A partir de julio de 2023, nos encontramos en la etapa de **Beta Pรบblica**.

- :white_check_mark: **Alpha Pรบblica**: Cualquier persona puede instalar y usar Reflex. Puede haber problemas, pero estamos trabajando activamente para resolverlos.
- :large_orange_diamond: **Beta Pรบblica**: Suficientemente estable para casos de uso no empresariales.
- **Beta de Hospedaje Pรบblico**: ยก_Opcionalmente_, despliega y hospeda tus aplicaciรณnes en Reflex!
- **Pรบblico**: Reflex estรก listo para producciรณn.

ยกReflex tiene nuevas versiones y caracterรญsticas que se lanzan cada semana! Aseguratรฉ de darnos una :star: estrella y :eyes: revisa este repositorio para mantenerte actualizado.
ยกReflex tiene nuevas versiones y caracterรญsticas cada semana! Asegรบrate de :star: marcar como favorito y :eyes: seguir este repositorio para mantenerte actualizado.

## Contribuyendo
## Contribuciones

ยกAceptamos contribuciones de cualquier tamaรฑo! A continuaciรณn encontrarรก algunas buenas formas de iniciarse en la comunidad Reflex.

- **รšnete a nuestro Discord**: Nuestro [Discord](https://discord.gg/T5WSbC2YtQ) es el mejor lugar para obtener ayuda en su proyecto Reflex y discutir cรณmo puedes contribuir.
- **Discusiones de GitHub**: Una excelente manera de hablar sobre las caracterรญsticas que deseas agregar o las cosas que te resusltan confusas o necesitan aclaraciรณn.
- **GitHub Issues**: Las incidencias son una forma excelente de informar de errores. Ademรกs, puedes intentar resolver un problema exixtente y enviar un PR.
- **Discusiones de GitHub**: Una excelente manera de hablar sobre las caracterรญsticas que deseas agregar o las cosas que te resultan confusas o necesitan aclaraciรณn.
- **GitHub Issues**: Las incidencias son una forma excelente de informar de errores. Ademรกs, puedes intentar resolver un problema existente y enviar un PR.

Buscamos colaboradores, sin importar su nivel o experiencia.
Buscamos colaboradores, sin importar su nivel o experiencia. Para contribuir consulta [CONTIBUTING.md](https://github.com/reflex-dev/reflex/blob/main/CONTRIBUTING.md)

## Licencia

Expand Down
46 changes: 25 additions & 21 deletions docs/kr/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,10 +70,12 @@ http://localhost:3000 ์—์„œ ์•ฑ์ด ์‹คํ–‰ ๋ฉ๋‹ˆ๋‹ค.
import reflex as rx
import openai

openai.api_key = "YOUR_API_KEY"
openai_client = openai.OpenAI()


class State(rx.State):
"""The app state."""

prompt = ""
image_url = ""
processing = False
Expand All @@ -86,41 +88,41 @@ class State(rx.State):

self.processing, self.complete = True, False
yield
response = openai.Image.create(prompt=self.prompt, n=1, size="1024x1024")
self.image_url = response["data"][0]["url"]
response = openai_client.images.generate(
prompt=self.prompt, n=1, size="1024x1024"
)
self.image_url = response.data[0].url
self.processing, self.complete = False, True


def index():
return rx.center(
rx.vstack(
rx.heading("DALLยทE"),
rx.input(placeholder="Enter a prompt", on_blur=State.set_prompt),
rx.heading("DALL-E", font_size="1.5em"),
rx.input(
placeholder="Enter a prompt..",
on_blur=State.set_prompt,
width="25em",
),
rx.button(
"Generate Image",
"Generate Image",
on_click=State.get_image,
is_loading=State.processing,
width="100%",
width="25em",
loading=State.processing
),
rx.cond(
State.complete,
rx.image(
src=State.image_url,
height="25em",
width="25em",
)
rx.image(src=State.image_url, width="20em"),
),
padding="2em",
shadow="lg",
border_radius="lg",
align="center",
),
width="100%",
height="100vh",
)

# Add state and page to the app.
app = rx.App()
app.add_page(index, title="reflex:DALLยทE")
app.add_page(index, title="Reflex:DALL-E")
```

## ํ•˜๋‚˜์”ฉ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
Expand Down Expand Up @@ -160,7 +162,7 @@ class State(rx.State):

state๋Š” ์•ฑ์—์„œ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋ณ€์ˆ˜(vars๋กœ ๋ถˆ๋ฆผ)์™€ ์ด๋Ÿฌํ•œ ๋ณ€์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ state๋Š” `prompt`์™€ `image_url`๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ `processing`๊ณผ `complete`๋ผ๋Š” ๋ถˆ๋ฆฌ์–ธ ๊ฐ’์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฐ’๋“ค์€ ์›ํ˜• ์ง„ํ–‰๋ฅ ๊ณผ ์ด๋ฏธ์ง€๋ฅผ ํ‘œ์‹œํ•  ๋•Œ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
์—ฌ๊ธฐ์„œ state๋Š” `prompt`์™€ `image_url`๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ `processing`๊ณผ `complete`๋ผ๋Š” ๋ถˆ๋ฆฌ์–ธ ๊ฐ’์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฐ’๋“ค์€ ์ด๋ฏธ์ง€ ์ƒ์„ฑ ์ค‘ ๋ฒ„ํŠผ์„ ๋น„ํ™œ์„ฑํ™”ํ•  ๋•Œ์™€, ๊ฒฐ๊ณผ ์ด๋ฏธ์ง€๋ฅผ ํ‘œ์‹œํ•  ๋•Œ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

### **Event Handlers**

Expand All @@ -172,8 +174,10 @@ def get_image(self):

self.processing, self.complete = True, False
yield
response = openai.Image.create(prompt=self.prompt, n=1, size="1024x1024")
self.image_url = response["data"][0]["url"]
response = openai_client.images.generate(
prompt=self.prompt, n=1, size="1024x1024"
)
self.image_url = response.data[0].url
self.processing, self.complete = False, True
```

Expand Down
Loading

0 comments on commit 9972a35

Please sign in to comment.