Par moment, avec une application django tu voudrai créer des scripts en dehors de l’environnement d’exécution django pour automatiser certaines tâches … La mienne étant de générer des données faussement bidons…

S’en suit une recherche sur internet et quelques éléments de réponse :

  1. Un script :
    import os
    import sys

    sys.path.append("/Users/said/path/monprojet_web/")
    os.environ['DJANGO_SETTINGS_MODULE'] = 'monprojet_web.settings'

Qui fonctionnera si ta structure du projet n’a pas changé d’un ioata, ou qui plantera à coup sûr si tu as suivi ce tuto. (apps/monapp)

Pour remerdier à ce problème, ajoute cette ligne pour que le script finale ressemble à ça :

    import os
    import sys

    sys.path.append("/Users/said/path/monprojet_web/")
    sys.path.append("/Users/said/path/monprojet_web/apps/")

    os.environ['DJANGO_SETTINGS_MODULE'] = 'monprojet_web.settings'

Ensuite pour éviter de réécrire toutes ces lignes, tu peux les incorporer dans un module et faire un import de celui-ci.

A la fin, tu pourra importer tes modèles comme ceci :

    import Standalone_django_script

    from monapp.models import MaClasse

    # Anything you want:
    print MaClasse.objects.all()

Sinon une des solutions les plus sympa, c’est d’utiliser django-extensions, avec sa commande runscript. Allez c’est par ici …

Pour résumer :

  • Installer l’extension et ajouter l’application au fichier settings.py
  • Créer un repertoire “scripts” et un fichier “init.py” dans ce répertoire
  • Crée ton script dans le répertoire “scripts”. Sache que chaque fichier doit posséder une méthode “run” qui est le point d’entrée.
  • “python manage.py runscript monscript” sans l’extension “py”

Et j’oubliais, pour générer mes données, j’utilise model-mommy

Enjoy !