216 votes

Django : « projects » vs « apps »

J'ai une assez complexe "produit de" je suis prêt à construire à l'aide de Django. Je vais éviter d'utiliser les termes "projet" et de la "demande" dans ce contexte, parce que je ne suis pas clair sur leur signification spécifique dans Django.

Les projets peuvent avoir de nombreuses applications. Les applications peuvent être partagées entre plusieurs projets. Des beaux.

Je ne suis pas réinventer le blog ou le forum - je ne vois pas du tout partie de mon produit réutilisable dans n'importe quel contexte. Intuitivement, je dirais que c'est une "application". Puis-je faire mon travail unique "app" dans le dossier?

Si oui... en termes de Django project.app d'espace de noms, j'ai tendance à utiliser myproduct.myproduct, mais bien sûr, ce n'est pas autorisé (mais l'application que je suis en train de construire mon projet, et mon projet est une application!). Je suis donc porté à croire que peut-être je suis censé approche de Django par la construction d'une application par "significatif" modèle, mais je ne sais pas où tracer les frontières dans mon schéma de le séparer en apps - j'ai beaucoup de modèles relativement complexe de relations.

J'espère qu'il y a une solution commune à ce...

102voto

claymation Points 703

Une fois votre diplôme d’utiliser et , rien ne vous empêche de combiner un « projet » et « app » dans le même paquet Python. Un projet n’est vraiment rien de plus d’un module et un app n’est vraiment rien de plus d’un module-tout le reste est facultatif.

Pour les petits chantiers, il est tout à fait raisonnable d’avoir quelque chose comme :

70voto

Ski Points 5884
<blockquote> <p>Essayer de répondre la question : « Que fait ma demande ? ». Si vous ne pouvez pas répondre en une seule phrase, alors peut-être vous pouvez fractionner il à plusieurs applications avec une logique plus propre ?</p> </blockquote> <p>J’ai lu cette pensée quelque part peu de temps après j’ai regardé pour travailler avec django et je trouve que j’ai poser cette question moi-même assez souvent et ça m’aide.</p> <p>Vos applications ne doivent pas être réutilisables, ils pourront compter sur l’autre, mais ils devraient faire une chose.</p>

58voto

Ninefingers Points 18767

Quel est pour vous arrêter à l'aide de myproduct.myproduct? Ce que vous devez atteindre environ est composé de:

django-admin.py startproject myproduct
cd myproduct
mkdir myproduct
touch myproduct/__init__.py
touch myproduct/models.py
touch myproduct/views.py

et ainsi de suite. Serait-il aider si je disais views.py n'a pas à être appelés views.py? Pourvu que vous pouvez donner un nom, sur le python path, une fonction (généralement package.package.les vues.function_name) il vous a traité. Simple que cela. Toutes les ce "projet"/"application" des choses est juste les paquets python.

Maintenant, comment êtes-vous censé faire? Ou plutôt, comment pourrais-je le faire? Eh bien, si vous créez un élément important de fonctionnalités réutilisables, comme, disons, un balisage de l'éditeur, c'est lorsque vous créez un "haut niveau de l'application" qui peuvent contenir de l' widgets.py, fields.py, context_processors.py etc - toutes les choses que vous pouvez importer.

De même, si vous pouvez créer quelque chose comme un blog dans un format qui est assez générique à travers installe, vous pouvez l'envelopper dans un app, avec son propre modèle, le contenu statique dossier, etc, et configurer une instance d'un projet django utiliser cette application.

Il n'existe pas de règles strictes et rapides dire que vous devez le faire, mais il est l'un des objectifs du cadre. Le fait que tout, les modèles inclus, vous permet de comprendre à partir de certains courants de base signifie que votre blog doit être bien ajusté dans une autre configuration, il suffit de par sa propre partie.

Toutefois, pour répondre à votre préoccupation, oui, rien ne dit que vous ne pouvez pas travailler avec le haut niveau de dossier de projet. C'est ce que les applications que faire et vous pouvez le faire si vous le voulez vraiment. J'ai tendance à ne pas, cependant, pour plusieurs raisons:

  • Django par défaut du programme d'installation de ne pas le faire.
  • Souvent, je veux créer une application principale, donc je créer un, souvent appelés website. Cependant, à une date ultérieure que je veuille mettre au point des fonctions de ce site. Avec une vue de la rendre amovible (si oui ou non j'ai jamais fais) j'ai tendance à ensuite créer un répertoire séparé. Cela signifie aussi que je peux déposer dit fonctionnalité vient en séparation de paquet de la config et de supprimer le dossier, plutôt que d'un complexe de supprimer le droit des url à partir d'un mondial urls.py dossier.
  • Très souvent, même quand je veux faire quelque chose d'indépendant, il a besoin d'un endroit pour vivre, tandis que je m'occupe d'elle / de le rendre indépendant. Fondamentalement, le cas ci-dessus, mais pour les trucs que je ne l'intention de le rendre générique.
  • Mon dossier de niveau supérieur contient souvent un peu d'autres choses, y compris mais non limité à wsgi des scripts, des scripts sql, etc.
  • de django reinhardt, de la gestion des extensions de s'appuyer sur des sous-répertoires. Il est donc logique de nom des paquets de façon appropriée.

En bref, la raison, la convention est le même que toute autre convention - il aide quand il s'agit d'autres personnes à travailler avec votre projet. Si je vois, fields.py immédiatement j'attends le code de la sous-classe de django reinhardt, champ, alors que si je vois inputtypes.py j'ai peut-être pas si clair sur ce que cela signifie que sans le regarder.

15voto

JooMing Points 500

J'ai trouvé sur le blog suivant les postes très utile sur django applications et projets:

En principe, vous avez beaucoup de liberté avec django pour l'organisation du code source de votre produit.

8voto

crodjer Points 4099

Si oui... en termes de Django du projet.application de l'espace de noms, j'ai tendance à usemyproduct.myproduct, mais bien sûr, ce n'est pas autorisé

Il n'y a rien comme pas permis. De ses votre projet, personne n'est de vous restreindre. Il est conseillé de garder un nom raisonnable.

Je ne vois pas du tout partie de mon produit réutilisable dans n'importe quel contexte. Intuitivement, je dirais que c'est une "application". Puis-je faire mon travail unique "app" dans le dossier?

En général projet django il existe de nombreuses applications (contrib apps) qui servent vraiment à chaque projet.

Permettez-nous de vous dire que votre projet n'a qu'une seule tâche et ne dispose que d'une seule application (j'ai le nom de il main comme lela projet tourne autour d'elle et est à peine enfichable). Ce projet utilise encore certaines autres applications en général.

Maintenant, si vous dites que votre projet est en utilisant seulement l'une seule application (INSTALLED_APPS='myproduct') alors qu'est-ce que l'utilisation d' project de définir le projet en tant que project.app, je pense que vous devriez considérer quelques points:

  • Il y a beaucoup d'autres choses que le code autre que l'application dans un projet de poignées (de la base de fichiers statiques, les modèles de base, paramètres....c'est à dire fournit la base).
  • Dans le projet général.application de l'approche de django définit automatiquement schéma sql à partir de modèles.
  • Votre projet serait beaucoup plus facile d'être construit avec l'approche conventionnelle.
  • Vous pouvez définir des noms différents pour les url, les vues et les autres fichiers que vous le souhaitez, mais je ne vois pas la nécessité.
  • Vous devrez peut-être ajouter quelques applications à l'avenir qui serait vraiment facile avec les classiques de django projets qui, autrement, il peut devenir tout aussi ou plus difficile et fastidieux à faire.

Autant que la plupart du travail se fait dans l'application, je pense que c'est le cas avec la plupart de django projets.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X