41 votes

Conception de projet / mise en page FS pour les grands projets django

Quel est le meilleur moyen à la disposition d'un grand projet django? Les tutoriels simples instructions pour la configuration des applications, des modèles et des points de vue, mais il y a moins d'informations sur la façon dont les applications et les projets doivent être ventilés, combien le partage est autorisé/nécessaire entre les applications dans un projet typique (évidemment, cela dépend en grande partie du projet) et comment/où en général les modèles doivent être conservés.

Quelqu'un aurait-il des exemples, des suggestions et des explications pourquoi un projet de mise en page est meilleure que l'autre? Je suis particulièrement intéressé par l'incorporation d'un grand nombre de tests unitaires (2-5x la taille de l'effectif de la base de code) et de la chaîne de l'externalisation / modèles.

17voto

Carl Meyer Points 30736

Les grandes lignes sont semblables à tout autre grand projet de code. Les applications doivent répondre à une seule, clairement définis responsabilité. Le nom de "application" est un abus de langage; Django les applications doivent être considérés davantage comme des composants réutilisables qui peuvent être branchés ensemble pour créer une application réelle. Tests pour chaque application devrait être contenue à l'intérieur de cette application. Les applications doivent être découplés les uns des autres autant que possible, mais clairement, il y aura des dépendances, l'objectif doit donc être de garder le graphe de dépendance aussi simple et saine que possible.

Je préfère garder tous les modèles pour un projet dans le cadre d'un projet unique à l'échelle de répertoire de modèles, avec un sous-répertoire pour chaque application (à l'aide d'un modèle de sous-répertoire pour chaque app est un très fort convention dans Django, car il évite nom du modèle de collisions entre les applications). La raison pour laquelle un projet unique à l'échelle de répertoire de modèles est que les modèles, le modèle de l'héritage des arbres, et les noms des blocs peut être tout à fait spécifique à un projet, il est donc difficile de fournir "par défaut" application des modèles qui peuvent se brancher à n'importe quel projet. Il y a eu quelques tentatives pour établir des standards, conventions de nommage pour la base de l'ensemble du site, les modèles et les blocs qu'ils définissent, mais je n'ai pas vu un standard émergent encore (la manière de faire les choses plus à Pinax est probablement le plus proche que nous avons à une norme).

Re "chaîne de l'externalisation", si tu parles de l'i18n et l10n, Django a un soutien fort pour que les standard et les endroits où il met les .les fichiers po - vérifier les docs.

9voto

number5 Points 3749

J'ai trouvé la mise en page de Zachary plutôt utile . Le blog de Zachary Voase »Django Project Conventions, Revisited.

6voto

rcreswick Points 6429

Cette page fait un bon travail face à certaines de mes questions: http://www.b-list.org/weblog/2006/sep/10/django-tips-laying-out-application/

Plus précisément:

  1. Pour définir des balises de modèle ou de filtres, vous devez créer un sous-répertoire dans le répertoire de l'application appelée templatetags, et il doit contenir un fichier nommé __init__.py de sorte qu'il puisse être importé en tant que module Python.
  2. Pour définir les tests unitaires qui seront automatiquement remarqué par Django est un framework de test, les mettre dans un module appelé tests (qui peut être soit un fichier nommé tests.py ou un répertoire appelé tests). Le framework de test trouverez également toutes les doctests dans ce module, mais l'endroit préféré pour ces qui est, bien sûr, les docstrings des classes ou des fonctions qu'ils sont conçus pour tester.
  3. Pour offrir personnalisé SQL qui sera exécutée immédiatement après l'installation de l'application, créez un sous-répertoire appelé sql à l'intérieur de répertoire de l'application; les noms de fichiers doivent être les mêmes que les noms des modèles dont les tableaux qu'ils vont fonctionner sur; par exemple, si vous avez une application nommée blog contenant un modèle nommé d'Entrée, puis le fichier sql/entrée.sql à l'intérieur de l'app du répertoire peut être utilisé pour modifier ou insérer des données dans les entrées de la table dès qu'il a été créé.

La remarque à propos de tests.py et les tests (le répertoire) vaut aussi pour les modèles, ce qui permet de résoudre le problème de la voie à de nombreux tests (ou modèles) pour un fichier.

Je voudrais encore voir quelques exemples et suggestions pour l'application/du projet à l'échec, et grand django sites qui fonctionnent bien.

3voto

bwinton Points 990

Le projet Pinax est construit autour de l’idée de petites applications réutilisables, qui sont facilement réunies dans un projet. Ils ont utilisé le projet Cloud 27 en tant que projet de démonstration.

Le projet Django sur lequel je travaille (appelé Basie. Il est antérieur à 0.1, donc pas encore de lien.) Essaie de suivre le modèle Pinax, et jusqu'à présent, il fonctionne assez bien.

1voto

Alf Points 710

Ma configuration actuelle découle de moi de vouloir faire un test de la version de mes sites. Cela signifie avoir deux projets pour chaque site, car ils ont besoin de différentes configurations, et m'oblige à déplacer toutes les demandes de projets.

J'ai créé deux dossiers: $APP_ROOT/devel et $APP_ROOT/prod. Ceux-ci contiennent toutes les applications. L'aide de la source de contrôle (dans mon cas, git) j'ai les applications dans devel à la TÊTE de révision, tandis que les applications en prod, sont bloquées à la PROD de la balise. Les modèles ont également leur propre dossier avec la même disposition que les apps.

Maintenant, je suis capable de faire tout mon développement dans le devel-dossier apps et correspondant à la dossier template. Quand j'ai quelque chose, je suis content, je balise que la révision et la mise à jour de prod.

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