Automatiser le déploiement d’un projet Django passe par un syncdb
sans prompt, et donc pas de création de superutilisateur :
./manage.py syncdb --noinput |
Vous pouvez bien entendu toujours en créer un plus tard, avec :
./manage.py createsuperuser --username=vous --email=votre_mail |
Mais il va vous prompter pour saisir le mot de passe ou alors mettre un mot de passe inutilisable automatiquement, ça ne résout pas votre problème. Une astuce consiste à le créer avec un code Python et à piper ce code dans un shell :
echo "from django.contrib.auth.models import User; User.objects.filter(username='vous').count() or User.objects.create_superuser('vous', votre_email', 'mot_de_passe')" | ./manage.py shell |
Personnellement je colle ça dans une tache fabric. Parfois on peut même générer le mot de passe aléatoirement avec un uuid qui est printé localement.
Personnellement j’utilise la commande runscript de django-extensions pour faire le sale boulot:
Dans un répertoire scripts/ (à coté de manage.py) je mets un fichier create_admin.py comme ceci:
Ensuite, ./manage.py runscript create_admin
C’est trés pratique d’ailleurs d’avoir des scripts sous la main de cette manière.
A mélanger avec ./manage.py syncdb –noinput
(ah oui, il faut aussi un __init__.py vide dans le répertoire scripts/ )
Dans ce cas autant faire une commande django non ?
Oui tu as raison: une commande django permet de faire plus de choses, comme le parsing d’argument, ne demande pas d’installer de module supplémentaire, et c’est mieux documenté: 3-0 !
Merci pour l’idée, j’en ferai à l’occasion.
Génial!!!
Merci Sam!
Chouette!
J’avais bidouillé un truc simillaire en fourrant un signal (de mémoire) dans le models.py d’une app fourre tout, ca dépannait mais j’trouvais ca crado.
J’suis en train d’mettre en place des templates de projets pour le boulot, en jouant avec fabric et cookiecutter, ca marche au poil.
Après le coup d’la commande django, j’y avais vaguement pensé, ca m’paraissait un peu overkill mais en y réflechissant pourquoi pas, ca peut rendre le fabfile un peu moins crade et s’réutiliser pour des tests à l’arrache… A creuser ^^