Los problemas que quiero resolver:
Harsha ya mencionó mi generador de proyectos, pero creo que puede ser útil para futuros lectores explicar las ideas detrás de él.
Si va a servir su interfaz, algo como yarn o npm . No debes preocuparte por la estructura entre ellos. Con algo como axios o la búsqueda de Javascript, puede hablar fácilmente con su backend desde cualquier lugar.
Cuando se trata de estructurar el backend, si desea renderizar plantillas con Jinja, puede tener algo parecido a MVC Pattern.
your_project ├── __init__.py ├── main.py ├── core │ ├── models │ │ ├── database.py │ │ └── __init__.py │ ├── schemas │ │ ├── __init__.py │ │ └── schema.py │ └── settings.py ├── tests │ ├── __init__.py │ └── v1 │ ├── __init__.py │ └── test_v1.py └── v1 ├── api.py ├── endpoints │ ├── endpoint.py │ └── __init__.py └── __init__.py Al usar __init__ en todas partes, podemos acceder a las variables desde toda la aplicación, al igual que Django.
Vamos a dividir las carpetas en partes:
Es para sus modelos de base de datos, al hacer esto puede importar la misma sesión de base de datos u objeto de v1 y v2.
Los esquemas son sus modelos de Pydantic, los llamamos esquemas porque en realidad se usan para crear esquemas de OpenAPI, ya que FastAPI se basa en la especificación de OpenAPI. Usamos esquemas en todas partes, desde la generación de Swagger hasta el cuerpo de solicitud esperado del punto final.
Es para la gestión de configuraciones de Pydantic, que es extremadamente útil, puede usar las mismas variables sin volver a declararlas, para ver cómo podría ser útil para usted, consulte nuestra documentación para configuraciones y variables de entorno.
Esto es opcional si va a renderizar su interfaz con Jinja, puede tener algo parecido al patrón MVC
Se vería algo como esto si desea agregar vistas.
Es bueno tener sus pruebas dentro de su carpeta de back-end.
Créelos de forma independiente mediante APIRouter, en lugar de reunir todas sus API en un solo archivo.
Puede usar la importación absoluta para todas sus importaciones ya que estamos usando __init__ en todas partes, consulte los documentos de empaquetado de Python .
Así que suponga que está tratando de importar endpoint.py de v1 desde v2 , simplemente puede hacer
from my_project.v1.endpoints.endpoint import something