Quand créer une nouvelle application (avec startapp) dans Django?

103

J'ai cherché sur Google pour cela, mais j'ai encore du mal à comprendre ce que Django définit comme des «applications».

Dois-je créer une nouvelle application pour chaque élément de fonctionnalité d'un site, même si elle utilise des modèles du projet principal?

Avez-vous une bonne règle de base pour savoir quand séparer une nouvelle application et quand conserver les fonctionnalités avec le «projet principal» ou d'autres applications?

Håkan
la source

Réponses:

43

James Bennett a un magnifique ensemble de diapositives sur la façon d'organiser les applications réutilisables dans Django.

Antti Rasinen
la source
1
Cela signifie-t-il que si je crée un modèle enfant, il doit toujours être dans la même application? Comme je ne peux pas facilement le déposer dans un autre projet sans apporter plus de deux "applications"
Lionel
18

Je préfère considérer les applications Django comme des modules ou des composants réutilisables plutôt que comme des "applications".

Cela m'aide à encapsuler et à découpler certaines fonctionnalités les unes des autres, améliorant la réutilisation si je décide de partager une "application" particulière avec la communauté dans son ensemble, et la maintenabilité.

Mon approche générale consiste à regrouper des fonctionnalités spécifiques ou des ensembles de fonctionnalités dans des «applications» comme si j'allais les publier publiquement. Le plus difficile ici est de déterminer la taille de chaque seau.

Une bonne astuce que j'utilise est d'imaginer comment mes applications seraient utilisées si elles étaient publiées publiquement. Cela m'encourage souvent à rétrécir les seaux et à définir plus clairement son «objectif».

blahspam
la source
16

Voici la présentation mise à jour du 6 septembre 2008.

DjangoCon 2008: applications réutilisables à 7:53

Diapositive: Reusable_apps.pdf

Tiré de la diapositive

Cela devrait-il être sa propre application?

  • Cela n'a-t-il aucun rapport avec l'objectif de l'application?
  • Est-ce orthogonal à tout ce que je fais d'autre?
  • Aurai-je besoin de fonctionnalités similaires sur d'autres sites?

Si l'un d'eux est "Oui"? Alors mieux vaut le diviser en une application séparée.

Yeo
la source
La diapositive que j'ai vue ne contient pas la première question sur la "mise au point de l'application".
johnny
@johnny C'est là à la diapositive 31 de 99.
Yeo
13

J'ai tendance à créer de nouvelles applications pour chaque ensemble de modèles logiquement séparés. par exemple:

  • Des profils d'utilisateurs
  • Messages du forum
  • Articles de blog
pobk
la source
6

La règle que je suis est qu'il doit s'agir d'une nouvelle application si je souhaite réutiliser la fonctionnalité dans un autre projet.

S'il nécessite une compréhension approfondie des modèles de votre projet, il est probablement plus cohérent de le coller aux modèles.

Ryan
la source
4

Les deux meilleures réponses à cette question que j'ai trouvées sur le Web sont:

  1. La discussion sur les applications réutilisables ( diapositives ) ( vidéo ) également mentionnée dans d'autres réponses. Bennett, l'auteur et contributeur de Django, publie régulièrement des applications que d'autres peuvent utiliser et a un point de vue fort sur de nombreuses petites applications.
  2. Doordash's Tips for Django at Scale qui donne le conseil opposé et indique que dans leur cas, ils ont migré vers une seule application après avoir commencé avec de nombreuses applications distinctes. Ils ont rencontré des problèmes avec le graphique de dépendance de migration entre les applications.

Les deux sources conviennent que vous devez créer une application distincte dans les situations suivantes:

  • Si vous envisagez de réutiliser votre application dans un autre projet Django (en particulier si vous prévoyez de la publier pour que d'autres puissent la réutiliser).
  • Si l'application a peu ou pas de dépendances entre elle et une autre application. Ici, vous pourrez peut-être imaginer une application fonctionnant en tant que son propre microservice à l'avenir.
Jonathan Berger
la source
1

Une `` application '' peut être beaucoup de choses différentes, tout dépend vraiment du goût. Par exemple, disons que vous créez un blog. Votre application peut être le blog entier, ou vous pouvez avoir une application "admin", une application "site" pour toutes les vues publiques, une application "rss", une application "services" afin que les développeurs puissent s'interfacer avec le blog dans leur ses propres manières, etc.

Personnellement, je ferais du blog lui-même l'application et j'expliquerais les fonctionnalités qu'il contient. Le blog pourrait alors être réutilisé assez facilement dans d'autres sites Web.

L'avantage de Django est qu'il reconnaîtra n'importe quel fichier models.py dans n'importe quel niveau de votre arborescence de répertoires comme un fichier contenant des modèles Django. Donc, diviser vos fonctionnalités en `` sous-applications '' plus petites au sein d'une `` application '' elle-même ne rendra rien plus difficile.

Willurd
la source