with tutorial the español applications django design django-apps

tutorial - the django project



Django: mejores prácticas para dividir proyectos en aplicaciones (2)

Estoy realmente luchando con toda esta idea de aplicación. Leí muchos tutoriales y guías de estilo y sé que debería intentar crear aplicaciones especializadas, que hacen exactamente una cosa. Todo esto tiene sentido cuando se mira un proyecto tutorial simple, pero tan pronto como llega a un proyecto complejo de la vida real, no puedo determinar cómo debo dibujar las líneas entre diferentes aplicaciones.

Uno de los problemas es que quiero tener un sitio (o varios sitios) donde el usuario ve muchas cosas diferentes. Cosas que deben ser de diferentes aplicaciones, al seguir las reglas de diseño de la aplicación. ¿Cómo me doy cuenta de algo como esto? Mi primera idea fue crear una aplicación llamada ui , que solo maneja TODAS las vistas que realmente llevan a una plantilla y todas las otras aplicaciones proporcionan los modelos y las funciones de ayuda. Pero me temo que la aplicación de la ui usuario se convertirá en demasiado grande.

Para darle un pequeño ejemplo: Permítame tener un sitio donde el usuario pueda realizar las siguientes tareas:

  • Seleccione un tema
  • Establecer algunas opciones para el tema seleccionado.
  • Sube archivos que estén asociados a su cuenta.
  • Asignar algunos de los archivos subidos al sujeto.
  • Graba un audio que estará relacionado con el tema.

En este momento, crearía tres aplicaciones:

  1. temas (contiene el modelo de tema y algunos modelos relacionados)
  2. recursos (contiene el modelo de recursos, maneja subidas)
  3. audio (maneja todas las cosas de grabación y procesamiento de audio)

Pero entonces, necesitaría algún tipo de aplicación main o de ui usuario para manejar cómo interactúan estas aplicaciones y para crear el sitio real, donde todas las aplicaciones están involucradas de alguna manera.

Entonces, ¿hay alguna manera "correcta" de hacer esto? ¿O hay algún patrón que pueda usar? También agradecería tener enlaces a buenos recursos sobre este tema, aunque ya haya leído algunos.


Creo que la mejor manera de delimitar una aplicación es aproximadamente equivalente a la forma en que delimita una clase en un lenguaje de programación orientado a objetos. En lugar de variables y métodos, piensas en modelos y vistas respectivamente:

los modelos son el estado del objeto, las vistas se utilizan para ver e interactuar con el estado del objeto.

Mi regla de oro es, ¿la creación de una aplicación ayuda a encapsulate un conjunto específico de modelos? Si ese es el caso, entonces trato de crearlo.


Solo necesitas asegurarte de que tu estructura tenga sentido para ti .

No hay ningún requisito para crear una nueva aplicación para cada característica que esté vinculada a otra parte de la lógica del proyecto.

Las aplicaciones reutilizables son una historia completamente diferente, su código debe desconocer en cierta medida la implementación.

Echa un vistazo a la estructura de Django para inspirarte.

Un posible diseño para su ejemplo:

project_root/ project/ __init__.py settings.py urls.py templates/ app1/ # override stuff static/ media/ app1/ __init__.py admin/ # as a package __init__.py subjects.py resources.py # etc models/ # as a package subjects.py resources.py # etc managers/ __init__.py subjects.py resources.py # etc services/ __init__.py audio.py # upload handler etc views/ __init__.py subjects.py urls/ __init__.py subjects.py templates/ app1/ subject_list.html # override at project level static/ app1/ css/ subject.css # override at project level app2/ __init__.py models.py # holds a Member model or whatever you require manage.py