Estructura de directorios del código en proyectos Django

Estructura estándar de proyecto Django

Django no dispone de una estructura de directorios estándar para proyectos grandes. La documentación oficial de Django no proporciona recomendaciones específicas para la organización del código en proyectos grandes, y las artículos en línea varían según la estructura del proyecto.

Estilo 1: Enfoque modular Conuslte el artículo 2 de referencia

  • Gestión de dependencias: Crear un archivo requirements que liste todas las dependencias del proyecto, como los paquetes Python necesarios.
  • Separación de aplicaciones y bibliotecas: Crear carpetas apps y libs para almacenar aplicaciones y bibliotecas respectivamente.
  • Creación de módulos de configuración completos:

Ventajas: Diseño modular adecuado para proyectos grandes.

Desventajas: No especifica el lugar donde se deben colocar los archivos estáticos.

$ tree .
.
├── djangolicious
│   ├── apps
│   │   ├── blog
│   │   │   ├── __init__.py
│   │   │   ├── models.py
│   │   │   ├── tests.py
│   │   │   └── views.py
│   │   ├── __init__.py
│   │   ├── news
│   │   │   ├── __init__.py
│   │   │   ├── models.py
│   │   │   ├── tests.py
│   │   │   └── views.py
│   │   └── reader
│   │       ├── __init__.py
│   │       ├── models.py
│   │       ├── tests.py
│   │       └── views.py
│   ├── __init__.py
│   ├── libs
│   │   ├── display
│   │   │   ├── __init__.py
│   │   │   ├── models.py
│   │   │   ├── tests.py
│   │   │   └── views.py
│   │   ├── __init__.py
│   │   └── management
│   │       ├── __init__.py
│   │       ├── models.py
│   │       ├── tests.py
│   │       └── views.py
│   ├── settings
│   │   ├── common.py
│   │   ├── dev.py
│   │   ├── __init__.py
│   │   ├── prod.py
│   │   └── test.py
│   ├── urls.py
│   └── wsgi.py
├── manage.py
├── requirements
│   ├── common.txt
│   ├── dev.txt
│   ├── prod.txt
│   └── test.txt
└── requirements.txt

10 directories, 36 files

Estilo 2, Estructura para proyectos de Django de gran escala (Referencia 5)

Este esquema es comúnmente utilizado por proyectos de código abierto y es adecuado para proyectos de Django de gran escala.

La estructura de un proyecto PROJ_NAME, donde PROJ_NAME es el nombre del proyecto:

PROJ_NAME/
     __init__.py      Estos archivos son necesarios para crear un proyecto de Django, no se explican más
     manage.py
     settings.py
     urls.py  
     apps/               Incluso en proyectos pequeños, se recomienda dividirlos en múltiples aplicaciones, cada una simple y resolviendo un aspecto específico del problema (Nota 1)
         myapp1/
         myapp2/
     extra_apps/     Aplicaciones adicionales utilizadas.
     libs/                Carga de módulos de terceros, evitando conflictos de versiones, gestionados según el estándar de site-packages (Nota 2)
           python*.*/  Especifica la versión de Python
               site-packages/   
               requirements.pip    #Archivo de dependencias de pip
     tests/          Pruebas al nivel del proyecto, también debe haber pruebas individuales para cada aplicación
     static/          Contenido estático
            css/
            js/
            images/
     uploads/       Directorio para archivos subidos
     templates/    Carpetas de plantillas, sobrescribiendo las plantillas de aplicaciones
            flatpages/
            comments/
            example/
            app1/
            app2/
     templatetags/    Carpetas de etiquetas

Nota 1: Especificar el cargue de apliccaiones en settings.py:

sys.path.insert(0, os.path.join(PROJECT_ROOT, 'apps'))
sys.path.insert(0, os.path.join(PROJECT_ROOT, 'extras'))
sys.path.insert(0, os.path.join(PROJECT_ROOT, 'libs'))  

Nota 2: Cargar personalmente libs en settings.py:

sys.path.insert(0, '/{{MY_LIB)}/site-packages/*****.egg')
sys.path.insert(0, '/{{MY_LIB}} /site-packages/')  

Estructura de la carpeta app

$APP_NAME/
     tests/                    Código de prueba al nivel de la aplicación
     models/                 Nota 1
          __init__.py
          Amodels.py
          Bmodels.py
     templates/              Nota 2
     templatetags/        Carpetas de etiquetas

Nota 1: Si bien se controla eficazmente el tamaño de la aplicación, con un número reducido de clases Model, se puede usar el archivo models.py habitual, o se pueden hacer paquetes para Models.

Las siguientes dos opciones son posibles:

1. Importar todas las clases de Model en init.py 2. Especificar la clase Meta de los modelos con app_label, consulte aquí

Nota 2: Si se extiende base.html del proyecto principal, utilice !base.html

Mi resumen

El pensamiento modular enfatizado en Estilo 1 es muy adecuado para proyectos grandes, y la mayoría de los proyectos grandes siguen este principio de estructura modular.

Como se muestra a continuación:

-proyecto
 ---app1
   --templates
     --statics
   views
   models
   tests
   urls
 ---app2
 ---appn
 statics
   --css
   --js
 settings 

En los proyectos de código abierto, veo que las estructuras de carpetas de proyectos pequeños varían mucho, sin una estructura clara y un patrón claro.

Artículos de referencia

  1. Estructura de aplicación grande de Django
  2. Estructura importante de proyectos de Django basada en Django 1.4
  3. Diseño de proyectos / disposición de sistema de archivos para proyectos de Django grandes [cerrado]
  4. Estructura generalizada de proyecto de Django (> = 1.5) o disposición de carpetas
  5. Mejores prácticas de Django importentes: Estructura del proyecto | estructura de directorios de proyectos de Python
  6. ACTUALIZACIÓN DE LA ESTRUCTURA DE CARPETAS DEL PROYECTO DE DJANGO (>= 1.5)
  7. Discusión sobre la estructura de carpetas en el grupo de Google

Etiquetas: Django estructura de directorios diseño de proyectos

Publicado el 8-29 02:51