Deux outils me viennent à l'esprit, qui sont tous deux des outils python génériques - ils ne doivent pas nécessairement fonctionner avec Django spécifiquement :
-
Tissu . Nous l'utilisons ; il nous permet d'écrire des commandes à distance comme si nous étions connectés en SSH, de télécharger du code, etc. Il n'y a pas grand chose que vous ne pouvez pas faire et parce que c'est essentiellement un script bash écrit en python, il est très facile de se lancer. Mais c'est aussi un bash script écrit en python, ce qui signifie que vous pouvez importer des parties de votre application django, exécuter vos tests ou faire tout ce que python peut faire dans le processus d'exécution de votre déploiement.
-
Buildout . Je ne l'ai pas utilisé, mais notre développeur frontal django m'a dit que c'était absolument l'outil à utiliser. À vue de nez, il s'agit soit de la même idée, soit d'un équivalent légèrement plus abstrait et plus orienté python.
Je suis sûr qu'il existe d'autres formules disponibles. Le meilleur conseil que je puisse vous donner est de les évaluer tous brièvement et de choisir celui qui correspond le mieux à votre scénario/ style de travail en équipe. Notez qu'il s'agit principalement d'outils de déploiement - les constructions en python n'ont pas vraiment de sens, puisque vous ne compilez pas de code python.
En ce qui concerne les éléments liés à l'infrastructure de communication, il existe trois commandes de django que vous devez connaître :
-
./manage.py test
exécute vos tests à partir de tous les tests.py
des fichiers. Il s'agit essentiellement d'améliorations spécifiques à django pour unittest
un paquet python.
-
./manage.py collectstatic
rassemble les fichiers statiques dans un répertoire de votre choix ; très utile pour rassembler tous les éléments nécessaires à l'existence d'un serveur de médias statiques. Jetez un coup d'œil à le guide des fichiers statiques pour savoir comment cela fonctionne.
- Vous devez Sud pour celui-ci,
./manage.py schemamigration app --auto && ./manage.py migrate app
- cela applique les modifications du modèle au schéma sql sous-jacent. En gros, si vous vous contentez de modifier un modèle sans utiliser south, Django sera très contrarié car le nouveau champ ne correspondra pas à l'ancien schéma sql et il ne pourra pas faire persister votre modèle. Les migrations de schémas, que South prend en charge, vous permettent de mettre à niveau une base de données existante et peuplée. Cela vaut la peine de les faire à la main avant de les automatiser.
- Je dois également souligner que vous pouvez écrire commandes de gestion personnalisées d'exécuter
./manage.py whatever you like
. Cela a un bon potentiel - j'ai utilisé les commandes de gestion comme commande à exécuter dans une tâche cron, par exemple. Vous pourriez également créer des commandes interactives pour les administrateurs de votre application et, bien sûr, pour le déploiement et les tests.
La manière de les gérer dépend vraiment de la configuration dont vous disposez et des outils que vous choisissez.
Sur la compilation : Ce qui se rapproche le plus de la compilation avec python est freeze, alias py2exe ou cxfreeze qui produisent des binaires. Sachez cependant que tout ce qu'ils font est de stocker le bytecode de python dans un exe et de le faire passer par l'interpréteur, qui est de toute façon un objet partagé. En outre, vous ne pouvez pas cxfreeze une application django, puisque django lui-même utilise des importations dynamiques qui se produisent au moment de l'exécution et ne peuvent donc pas être évaluées par cxfreeze, qui est essentiellement un outil de compilation. Ne considérez donc pas la construction comme une tâche à accomplir. Vous pourriez voir .pyc
fichiers apparaissant dans votre répertoire - python convertit votre script en bytecode python si des changements y ont été apportés depuis le dernier pyc. Si aucune modification n'a été apportée, il charge le fichier pyc
de la dernière fois. Le bytecode Python est ce qui est exécuté, donc ce n'est pas vraiment une accélération en termes de performance, juste un temps de chargement.