¿Cuál es la diferencia entre un proyecto y una aplicación en el mundo de Django?

Estoy creando mi primer sitio web real usando Django pero todavía estoy luchando por entender la diferencia entre un proyecto y una aplicación.

Por ejemplo, Mi sitio web es un sitio web de noticias deportivas que contendrá secciones como artículos, tablas de clasificación y “elementos y resultados”, mi pregunta es si cada una de estas secciones debe estar en una aplicación separada dentro de un proyecto completo o no. ¿Cuál es la mejor práctica en esta situación?

Un proyecto se refiere a toda la aplicación y todas sus partes.

Una aplicación se refiere a un submódulo del proyecto. Es autosuficiente y no está interrelacionado con las otras aplicaciones en el proyecto, de modo que, en teoría, podría recogerlo y colocarlo en otro proyecto sin ninguna modificación. Una aplicación normalmente tiene sus propios models.py (que en realidad podrían estar vacíos). Podrías considerarlo como un módulo de python independiente. Un proyecto simple puede tener una sola aplicación.

Para tu ejemplo, el proyecto es todo el sitio web. Puede estructurarlo para que haya una aplicación para artículos, una aplicación para clasificar tablas y una aplicación para arreglos y resultados. Si necesitan interactuar entre sí, lo hacen a través de clases públicas bien documentadas y métodos de acceso.

Lo principal a tener en cuenta es este nivel de interdependencia entre las aplicaciones . En la práctica, todo es un solo proyecto , por lo que no tiene sentido ir por la borda, pero tenga en cuenta lo co-dependientes que son las dos aplicaciones. Si encuentra que una aplicación está resolviendo dos problemas, divídalos en dos aplicaciones. Si encuentra que dos aplicaciones están tan interrelacionadas que nunca podría reutilizar una sin la otra, combínelas en una sola aplicación.

Idealmente, tu proyecto debería estar compuesto por aplicaciones . Es por eso que cuando usa la línea de comandos, crea un proyecto, y más adelante, agrega aplicaciones a ese proyecto.

Apps, tiene como objective aportar modularidad a su proyecto. Por ejemplo, si crea una articles app , idealmente , puede usarla en su proyecto de noticias deportivas y reutilizarla en un nuevo proyecto que la requiera con una modificación mínima o nula en su settings . Por ejemplo, un proyecto de blog. ejemplo.

Las aplicaciones son piezas de software destinadas a ser reutilizadas. Su proyecto representa solo sus necesidades muy específicas.

Echa un vistazo a la estructura del proyecto Django . Le puede dar una idea de la mejor práctica de organizar su proyecto Django.

También hay varias publicaciones de blog en Google que abordan este tema:

Entendamos Project y App en Django con este ejemplo realista:

Digamos que estás construyendo un sitio de compras en línea (sitio de comercio electrónico) en Django:

Proyecto:

Es simplemente el nombre de su sitio web. Django creará un paquete de Python y le dará un nombre que hayas proporcionado. Digamos que lo llamamos my_shopping_site .

Puedes crear un proyecto en Django con este comando

 python manage.py startproject my_shopping_site 

Esto creará el directorio my_shopping_site en su directorio de trabajo y la estructura se verá así:

 my_shopping_site/ manage.py my_shopping_site/ #<--- That is a python package __init__.py #<--- This makes it a python package settings.py #<--- module 1 urls.py #<--- module 2 wsgi.py #<--- module 3 

Aplicaciones:

Son esos pequeños componentes los que juntos conforman tu proyecto. Son las características de tu proyecto. En nuestro caso (sitio de compras) sería:

  • Carro : - Lo que tendría una lógica para los artículos seleccionados por el usuario para la compra.

  • Productos : - Que tendría una lógica para los productos que el sitio está vendiendo.

  • Perfil : - Que tendría una lógica para la información del usuario.

      ------------------------------------------------------------------- my_shopping_site Products Profile Cart ------------------------------------------------------------------- 

y puedes crear estas aplicaciones con estos comandos:

  python manage.py startapp cart python manage.py startapp products python manage.py startapp profile 

La estructura se vería así:

 my_shopping_site/ #<--- project_name manage.py products/ #<--- app 1 cart/ #<--- app 2 profile/ #<--- app 3 my_shopping_site/ 

Cada aplicación se enfoca en una sola pieza lógica de su proyecto.