|
| 1 | +# Full Stack FastAPI Plantilla |
| 2 | + |
| 3 | +<a href="https://github.com/fastapi/full-stack-fastapi-template/actions?query=workflow%3ATest" target="_blank"><img src="https://github.com/fastapi/full-stack-fastapi-template/workflows/Test/badge.svg" alt="Test"></a> |
| 4 | +<a href="https://coverage-badge.samuelcolvin.workers.dev/redirect/fastapi/full-stack-fastapi-template" target="_blank"><img src="https://coverage-badge.samuelcolvin.workers.dev/fastapi/full-stack-fastapi-template.svg" alt="Coverage"></a> |
| 5 | + |
| 6 | +## Pila de tecnología y características |
| 7 | + |
| 8 | +- ⚡ [**FastAPI**](https://fastapi.tiangolo.com) para la API de backend de Python. |
| 9 | + - 🧰 [SQLModel](https://sqlmodel.tiangolo.com) para las interacciones de la base de datos SQL de Python (ORM). |
| 10 | + - 🔍 [Pydantic](https://docs.pydantic.dev),utilizado por FastAPI, para la validación de datos y la gestión de configuraciones. |
| 11 | + - 💾 [PostgreSQL](https://www.postgresql.org) como la base de datos SQL. |
| 12 | +- 🚀 [React](https://react.dev) for the frontend. |
| 13 | + - 💃Usando TypeScript, ganchos, Vite y otras partes de una pila de frontend moderna. |
| 14 | + - 🎨 [Chakra UI](https://chakra-ui.com) para los componentes frontend. |
| 15 | + - 🤖Una cliente frontend generada automáticamente. |
| 16 | + - 🧪 [Playwright](https://playwright.dev) para pruebas de extremo a extremo. |
| 17 | + - 🦇 Soporte de modo oscuro. |
| 18 | +- 🐋 [Docker Compose](https://www.docker.com) para desarrollo y producción. |
| 19 | +- 🔒 Hashing de contraseña seguro de forma predeterminada. |
| 20 | +- 🔑 JWT (JSON Web Token) autenticación. |
| 21 | +- 📫 Recuperación de contraseña basada en correo electrónico. |
| 22 | +- ✅ Pruebas con[Pytest](https://pytest.org). |
| 23 | +- 📞 [Traefik](https://traefik.io) como proxy inverso / balanceador de carga. |
| 24 | +- 🚢 Instrucciones de implementación mediante Docker Compose, incluido cómo configurar un proxy Traefik de interfaz para manejar certificados HTTPS automáticos. |
| 25 | +- 🏭 CI (integración continua) y CD (implementación continua) basada en GitHub Actions. |
| 26 | + |
| 27 | +### Iniciar sesión en el panel |
| 28 | + |
| 29 | +[](https://github.com/fastapi/full-stack-fastapi-template) |
| 30 | + |
| 31 | +### Panel de control - Administrador |
| 32 | + |
| 33 | +[](https://github.com/fastapi/full-stack-fastapi-template) |
| 34 | + |
| 35 | +### Panel de control: crear usuario |
| 36 | + |
| 37 | +[](https://github.com/fastapi/full-stack-fastapi-template) |
| 38 | + |
| 39 | +### Panel de control - Artículos |
| 40 | + |
| 41 | +[](https://github.com/fastapi/full-stack-fastapi-template) |
| 42 | + |
| 43 | +### Panel de control: configuración de usuario |
| 44 | + |
| 45 | +[](https://github.com/fastapi/full-stack-fastapi-template) |
| 46 | + |
| 47 | +### Panel de control: modo oscuro |
| 48 | + |
| 49 | +[](https://github.com/fastapi/full-stack-fastapi-template) |
| 50 | + |
| 51 | +### Documentación API interactiva |
| 52 | + |
| 53 | +[](https://github.com/fastapi/full-stack-fastapi-template) |
| 54 | + |
| 55 | +## Cómo usarlo |
| 56 | + |
| 57 | + |
| 58 | +Puedes **simplemente bifurcar o clonar** este repositorio y usarlo tal como está. |
| 59 | + |
| 60 | +✨ simplemente funciona. ✨ |
| 61 | + |
| 62 | +### Cómo utilizar un repositorio privado |
| 63 | + |
| 64 | +Si quieres tener un repositorio privado, GitHub no te permitirá simplemente bifurcarlo ya que no permite cambiar la visibilidad de las bifurcaciones. |
| 65 | + |
| 66 | +Pero puedes hacer lo siguiente: |
| 67 | + |
| 68 | +- Crea un nuevo repositorio de GitHub, por ejemplo |
| 69 | +`my-full-stack`. |
| 70 | +- Clona este repositorio manualmente, establece el nombre con el nombre del proyecto que quieres usar, por ejemplo |
| 71 | +`my-full-stack`: |
| 72 | + |
| 73 | +```bash |
| 74 | +git clone [email protected]:fastapi/full-stack-fastapi-template.git my-full-stack |
| 75 | +``` |
| 76 | + |
| 77 | +- Ingresa al nuevo directorio: |
| 78 | + |
| 79 | + |
| 80 | +```bash |
| 81 | +cd my-full-stack |
| 82 | +``` |
| 83 | + |
| 84 | + |
| 85 | +- Establezca el nuevo origen en su nuevo repositorio, cópielo desde la interfaz de GitHub, por ejemplo |
| 86 | + |
| 87 | +```bash |
| 88 | +git remote set-url origin [email protected]:octocat/my-full-stack.git |
| 89 | +``` |
| 90 | + |
| 91 | +- Agregue este repositorio como otro "remoto" para permitirle recibir actualizaciones más tarde: |
| 92 | + |
| 93 | +```bash |
| 94 | +git remote add upstream [email protected]:fastapi/full-stack-fastapi-template.git |
| 95 | +``` |
| 96 | + |
| 97 | +- Envía el código a tu nuevo repositorio: |
| 98 | + |
| 99 | +```bash |
| 100 | +git push -u origin master |
| 101 | +``` |
| 102 | + |
| 103 | +### Actualización de la plantilla original |
| 104 | + |
| 105 | +Después de clonar el repositorio y realizar los cambios, es posible que desee obtener los últimos cambios de esta plantilla original. |
| 106 | + |
| 107 | +- Asegúrate de haber agregado el repositorio original como remoto, puedes comprobarlo con: |
| 108 | + |
| 109 | +```bash |
| 110 | +git remote -v |
| 111 | + |
| 112 | +origin [email protected]:octocat/my-full-stack.git (fetch) |
| 113 | +origin [email protected]:octocat/my-full-stack.git (push) |
| 114 | +upstream [email protected]:fastapi/full-stack-fastapi-template.git (fetch) |
| 115 | +upstream [email protected]:fastapi/full-stack-fastapi-template.git (push) |
| 116 | +``` |
| 117 | + |
| 118 | +- Extraer los últimos cambios sin fusionarlos: |
| 119 | + |
| 120 | +```bash |
| 121 | +git pull --no-commit upstream master |
| 122 | +``` |
| 123 | + |
| 124 | +Esto descargará los últimos cambios de esta plantilla sin confirmarlos, de modo que puedas comprobar que todo esté correcto antes de confirmarlos. |
| 125 | + |
| 126 | +- Si hay conflictos, resuélvelos en tu editor. |
| 127 | + |
| 128 | +- Una vez que hayas terminado, confirma los cambios: |
| 129 | + |
| 130 | +```bash |
| 131 | +git merge --continue |
| 132 | +``` |
| 133 | + |
| 134 | +### Configurar |
| 135 | +Luego, puede actualizar las configuraciones en los archivos `.env` para personalizarlas. |
| 136 | + |
| 137 | +Antes de implementarlo, asegúrese de cambiar al menos los valores de: |
| 138 | + |
| 139 | +- `SECRET_KEY` |
| 140 | +- `FIRST_SUPERUSER_PASSWORD` |
| 141 | +- `POSTGRES_PASSWORD` |
| 142 | + |
| 143 | +Puedes (y debes) pasarlos como variables de entorno desde secretos. |
| 144 | + |
| 145 | +Lea el [deployment.md](./deployment.md) documentos para más detalles. |
| 146 | + |
| 147 | +### Generar Secret Keys |
| 148 | + |
| 149 | +Algunas variables de entorno del archivo `.env` tienen el valor predeterminado `changethis`. |
| 150 | + |
| 151 | +Debes cambiarlas con una clave secreta. Para generarlas, puedes ejecutar el siguiente comando: |
| 152 | + |
| 153 | +```bash |
| 154 | +python -c "import secrets; print(secrets.token_urlsafe(32))" |
| 155 | +``` |
| 156 | + |
| 157 | +Copia el contenido y úsalo como contraseña o clave secreta. Ejecútalo de nuevo para generar otra clave segura |
| 158 | + |
| 159 | +## Cómo usarlo - Alternativa con fotocopiadora |
| 160 | + |
| 161 | + |
| 162 | +Este repositorio también admite la generación de un nuevo proyecto utilizando [Copier](https://copier.readthedocs.io). |
| 163 | + |
| 164 | +Copiará todos los archivos, le hará preguntas de configuración y actualizará los archivos `.env` con sus respuestas |
| 165 | + |
| 166 | +### Instalar copiadora |
| 167 | + |
| 168 | +Puedes instalar Copier con: |
| 169 | + |
| 170 | +```bash |
| 171 | +pip install copier |
| 172 | +``` |
| 173 | + |
| 174 | +O mejor, si tienes[`pipx`](https://pipx.pypa.io/), Puedes ejecutarlo con: |
| 175 | + |
| 176 | +```bash |
| 177 | +pipx install copier |
| 178 | +``` |
| 179 | + |
| 180 | + |
| 181 | +**Nota**: Si tienes `pipx`, la instalación de Copier es opcional, puedes ejecutarlo directamente |
| 182 | + |
| 183 | +### Generar un proyecto con Copier |
| 184 | + |
| 185 | +Elige un nombre para el directorio de tu nuevo proyecto; lo usarás a continuación. Por ejemplo:, `my-awesome-project`. |
| 186 | + |
| 187 | + |
| 188 | +Vaya al directorio que será el padre de su proyecto y ejecute el comando con el nombre de su proyecto: |
| 189 | + |
| 190 | +```bash |
| 191 | +copier copy https://github.com/fastapi/full-stack-fastapi-template my-awesome-project --trust |
| 192 | +``` |
| 193 | + |
| 194 | + |
| 195 | +Si tienes `pipx` y no instalaste `copier`, puedes ejecutarlo directamente: |
| 196 | + |
| 197 | +```bash |
| 198 | +pipx run copier copy https://github.com/fastapi/full-stack-fastapi-template my-awesome-project --trust |
| 199 | +``` |
| 200 | + |
| 201 | +**Nota** la opción `--trust` es necesaria para poder ejecutar un [post-creation script](https://github.com/fastapi/full-stack-fastapi-template/blob/master/.copier/update_dotenv.py) que actualiza tu `.env` archivos. |
| 202 | + |
| 203 | +### Variables de entrada |
| 204 | + |
| 205 | +Copier te solicitará algunos datos que quizás quieras tener a mano antes de generar el proyecto. |
| 206 | + |
| 207 | +Pero no te preocupes, puedes actualizarlos en los archivos `.env` posteriormente. |
| 208 | + |
| 209 | +Las variables de entrada, con sus valores predeterminados (algunos generados automáticamente), son: |
| 210 | + |
| 211 | +- `project_name`: (predeterminado: `"FastAPI Project"`) El nombre del proyecto, mostrado a los usuarios de la API (en .env). |
| 212 | + |
| 213 | +- `stack_name`: (predeterminado: `"fastapi-project"`) El nombre de la pila utilizada para las etiquetas de Docker Compose y el nombre del proyecto (sin espacios ni puntos) (en .env). |
| 214 | + |
| 215 | +- `secret_key`: (predeterminado: `"changethis"`) La clave secreta del proyecto, utilizada por seguridad, almacenada en .env. Puedes generarla con el método anterior. - `first_superuser`: (predeterminado: `"[email protected]"`) El correo electrónico del primer superusuario (en .env). |
| 216 | +- `first_superuser_password`: (predeterminado: `"changethis"`) La contraseña del primer superusuario (en .env). |
| 217 | +- `smtp_host`: (predeterminado: "") El host del servidor SMTP para enviar correos electrónicos. Puede configurarlo posteriormente en .env. |
| 218 | +- `smtp_user`: (predeterminado: "") El usuario del servidor SMTP para enviar correos electrónicos. Puede configurarlo posteriormente en .env. |
| 219 | +- `smtp_password`: (predeterminado: "") La contraseña del servidor SMTP para enviar correos electrónicos. Puede configurarla posteriormente en .env. |
| 220 | +- `emails_from_email`: (predeterminado: `"[email protected]"`) La cuenta de correo electrónico desde la que se envían los correos. Puede configurarla posteriormente en .env. |
| 221 | +- `postgres_password`: (predeterminado: `"changethis"`) La contraseña de la base de datos PostgreSQL, almacenada en .env. Puede generar una con el método descrito anteriormente. |
| 222 | +- `sentry_dsn`: (predeterminado: "") El DSN de Sentry. Si lo usa, puede configurarlo posteriormente en .env. |
| 223 | + |
| 224 | +## Desarrollo Backend |
| 225 | + |
| 226 | +Documentación backend: [backend/README.md](./backend/README.md). |
| 227 | + |
| 228 | +## Desarrollo Frontend |
| 229 | + |
| 230 | +Documentación frontend: [frontend/README.md](./frontend/README.md). |
| 231 | + |
| 232 | +## Implementación |
| 233 | + |
| 234 | +Documentación de implementación: [deployment.md](./deployment.md). |
| 235 | + |
| 236 | +## Desarrollo |
| 237 | + |
| 238 | +Documentación general de desarrollo: [development.md](./development.md). |
| 239 | + |
| 240 | +Esto incluye el uso de Docker Compose, dominios locales personalizados, configuraciones `.env`, etc. |
| 241 | + |
| 242 | +## Notas de la versión |
| 243 | + |
| 244 | +Consulta el archivo [release-notes.md](./release-notes.md). |
| 245 | + |
| 246 | +## Licencia |
| 247 | + |
| 248 | +La plantilla FastAPI Full Stack se rige por los términos de la licencia MIT. |
0 commit comments