web-dev-qa-db-fra.com

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

J'ai cherché sur Google, mais j'ai toujours du mal à comprendre ce que Django définit comme des "applications". 

Devrais-je créer une nouvelle application pour chaque fonctionnalité d'un site, même s'il utilise des modèles du projet principal? 

Avez-vous une bonne idée du moment de scinder une nouvelle application et de conserver les fonctionnalités avec le "projet principal" ou d'autres applications?

79
Håkan

James Bennett a un magnifique ensemble de diapositives sur la manière d’organiser des applications réutilisables dans Django.

39
Antti Rasinen

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

Cela me permet d'encapsuler et de découpler certaines fonctionnalités les unes des autres, ce qui améliore la capacité de réutilisation si je décidais de partager une "application" particulière avec l'ensemble de la communauté, ainsi que sa maintenabilité.

Mon approche générale consiste à regrouper des fonctionnalités ou des ensembles de fonctionnalités spécifiques dans des "applications", comme si je les publiais publiquement. La partie difficile ici consiste à déterminer la taille de chaque seau. 

Un bon truc que j'utilise est d'imaginer comment mes applications seraient utilisées si elles étaient publiées. Cela m'encourage souvent à rétrécir les compartiments et à définir plus clairement son "objectif".

18
blahspam

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

  • Des profils d'utilisateurs
  • Messages du forum
  • Articles de blog
11
pobk

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

DjangoCon 2008: Applications réutilisables à 7h53

Diapositive: Reusable_apps.pdf

Tiré de la diapositive

Cela devrait-il être sa propre application?

  • Est-ce que cela n'a aucun rapport avec le focus de l'application?
  • Est-ce orthogonal à tout ce que je fais?
  • Aurai-je besoin de fonctionnalités similaires sur d'autres sites?

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

11
Yeo

La règle que je suis est que cela devrait être une nouvelle application si je veux réutiliser les fonctionnalités dans un projet différent.

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

5
Ryan

Une «application» peut être composée de nombreuses choses différentes. Tout se résume vraiment au goût. Par exemple, supposons que vous construisez 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 se connecter au blog dans leur propres moyens, etc.

Personnellement, je ferais du blog l'app elle-même et j'exploiterais ses fonctionnalités. Le blog pourrait ensuite être réutilisé assez facilement sur d'autres sites Web.

Le bon côté de Django est qu’il reconnaîtra tout fichier models.py, quel que soit le niveau de votre arborescence de répertoires, en tant que fichier contenant des modèles Django. Donc, briser vos fonctionnalités en petites "sous-applications" au sein d'une "application" elle-même ne rendra rien de plus difficile.

1
willurd

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

  1. La discussion sur les applications réutilisables ( diapositives ) ( vidéo ) est é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 positif sur de nombreuses petites applications.
  2. Conseils Doordash pour Django at Scale qui donne le conseil opposé et indique dans leur cas qu’ils ont migré vers une seule application après avoir démarré avec de nombreuses applications séparées. Ils ont rencontré des problèmes avec le graphique de dépendance de la 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 sous son propre microservice à l'avenir.
1
Jonathan Berger