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
requirementsque liste todas las dependencias del proyecto, como los paquetes Python necesarios. - Separación de aplicaciones y bibliotecas: Crear carpetas
appsylibspara 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
- Estructura de aplicación grande de Django
- Estructura importante de proyectos de Django basada en Django 1.4
- Diseño de proyectos / disposición de sistema de archivos para proyectos de Django grandes [cerrado]
- Estructura generalizada de proyecto de Django (> = 1.5) o disposición de carpetas
- Mejores prácticas de Django importentes: Estructura del proyecto | estructura de directorios de proyectos de Python
- ACTUALIZACIÓN DE LA ESTRUCTURA DE CARPETAS DEL PROYECTO DE DJANGO (>= 1.5)
- Discusión sobre la estructura de carpetas en el grupo de Google