¿Cuándo crear una nueva aplicación (con startapp) en Django?

102

He buscado en Google esto, pero todavía tengo problemas para relacionarme con lo que Django define como "aplicaciones".

¿Debo crear una nueva aplicación para cada pieza de funcionalidad en un sitio, aunque use modelos del proyecto principal?

¿Tienen una buena regla general sobre cuándo dividir una nueva aplicación y cuándo mantener la funcionalidad junto con el "proyecto principal" u otras aplicaciones?

Håkan
fuente

Respuestas:

43

James Bennett tiene un maravilloso conjunto de diapositivas sobre cómo organizar aplicaciones reutilizables en Django.

Antti Rasinen
fuente
1
¿Eso significa que si hago un modelo secundario, siempre debe estar en la misma aplicación? Como no puedo colocarlo fácilmente en otro proyecto sin traer dos "aplicaciones"
Lionel
18

Prefiero pensar en las aplicaciones de Django como módulos o componentes reutilizables que como "aplicaciones".

Esto me ayuda a encapsular y desacoplar ciertas características entre sí, mejorando la capacidad de reutilización en caso de que decida compartir una "aplicación" en particular con la comunidad en general y la capacidad de mantenimiento.

Mi enfoque general es agrupar funciones específicas o conjuntos de funciones en "aplicaciones" como si fuera a publicarlas. La parte difícil aquí es averiguar qué tan grande es cada cubo.

Un buen truco que utilizo es imaginar cómo se usarían mis aplicaciones si fueran publicadas. Esto a menudo me anima a reducir los cubos y definir más claramente su "propósito".

blahspam
fuente
16

Aquí está la presentación actualizada el 6 de septiembre de 2008.

DjangoCon 2008: Aplicaciones reutilizables a las 7:53

Diapositiva: Reusable_apps.pdf

Tomado de la diapositiva

¿Debería ser esta su propia aplicación?

  • ¿No tiene ninguna relación con el enfoque de la aplicación?
  • ¿Es ortogonal a cualquier otra cosa que esté haciendo?
  • ¿Necesitaré una funcionalidad similar en otros sitios?

Si alguno de ellos es "Sí"? Entonces es mejor dividirlo en una aplicación separada.

Yeo
fuente
La diapositiva que vi no contiene la primera pregunta sobre el "enfoque de la aplicación".
johnny
@johnny Está ahí en la diapositiva 31 de 99.
Yeo
13

Tiendo a crear nuevas aplicaciones para cada conjunto de modelos lógicamente separados. p.ej:

  • Perfiles de usuario
  • Publicaciones en foros
  • Publicaciones de blog
pobk
fuente
6

La regla que sigo es que debería ser una nueva aplicación si quiero reutilizar la funcionalidad en un proyecto diferente.

Si necesita una comprensión profunda de los modelos en su proyecto, probablemente sea más cohesivo pegarlo con los modelos.

Ryan
fuente
4

Las dos mejores respuestas a esta pregunta que he encontrado en la web son:

  1. La charla de aplicaciones reutilizables ( diapositivas ) ( video ) también se menciona en otras respuestas. Bennett, el autor y colaborador de Django, publica regularmente aplicaciones para que otros las usen y tiene un fuerte punto de vista hacia muchas aplicaciones pequeñas.
  2. Los consejos de Doordash para Django a escala, que dan el consejo opuesto y dicen que en su caso migraron a una sola aplicación después de comenzar con muchas aplicaciones separadas. Se encontraron con problemas con el gráfico de dependencia de la migración entre aplicaciones.

Ambas fuentes están de acuerdo en que debe crear una aplicación separada en las siguientes situaciones:

  • Si planeas reutilizar tu aplicación en otro proyecto de Django (especialmente si planeas publicarla para que otros la reutilicen).
  • Si la aplicación tiene pocas o ninguna dependencia entre ella y otra aplicación. Aquí puede imaginarse una aplicación ejecutándose como su propio microservicio en el futuro.
Jonathan Berger
fuente
1

Una 'aplicación' puede ser muchas cosas diferentes, todo se reduce al gusto. Por ejemplo, digamos que está creando un blog. Su aplicación podría ser el blog completo, o podría tener una aplicación de 'administración', una aplicación de 'sitio' para todas las vistas públicas, una aplicación de 'rss', una aplicación de 'servicios' para que los desarrolladores puedan interactuar con el blog en su propios caminos, etc.

Personalmente, convertiría el blog en la aplicación y desglosaría la funcionalidad dentro de él. El blog podría reutilizarse con bastante facilidad en otros sitios web.

Lo bueno de Django es que reconocerá cualquier archivo models.py dentro de cualquier nivel de su árbol de directorios como un archivo que contiene modelos Django. Por lo tanto, dividir su funcionalidad en 'subaplicaciones' más pequeñas dentro de una 'aplicación' en sí no hará nada más difícil.

Willurd
fuente