Initialiser un projet django

Un projet pour des applications

Un projet Django est composé d'applications (ou apps). Ces applications peuvent être d'ailleurs déplacées dans d'autres projets. C'est une des forces de Django: les développeurs peuvent s'échanger des applications compatibles très facilement. Un exemple de projet serait une eboutique (shop online) et un exemple d'application (une sorte de composant) serait une application qui permet de payer par carte bancaire.

Django reprend une philosophie informatique : DRY pour "don't repeat yourself". L'idée étant d'éviter la redondance de code afin de faciliter la maintenance, le test, le débogage et les évolutions si nécessaire. Le jour où vous développerez un module qui n'existe pas dans la communauté Django, pensez à le partager!

Créer un projet

Pour créer un projet Django, ouvrez votre terminal et lancez la commande suivante:

django-admin startproject eboutique

Lancez cette commande dans le contexte qui vous intéresse, nous avons choisi notre dossier home. Le projet se nomme dans notre cas "eboutique"

Comprendre structure d'un projet Django

Suite à la demande de création d'un projet Django, un dossier eboutique a été crée dans notre dossier home.

Voici l'arboresence du projet

/home/olivier/eboutique
├── eboutique
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py

Comme nous l'avons vu dans un chapitre précédent, la présence d'un fichier __init__.py permet au dossier qui le contient de pouvoir être traité comme un packet python.

Le fichier manage.py est le point d'entrée de commande de management du projet. Il permet de créer des applications (voir le prochain chapitre) et d'autres actions que nous verrons plus tard. Vous pouvez d'ores et déjà consulter la liste des options en l'éxecutant sans argument.

Le fichier urls.py est ue sorte de table de routage. Pour chaque URL définie on peut l'envoyer vers une fonction choisie.

Et enfin le fichier settings.py qui est comme son nom l'indique un fichier de configuration. Comme souvent en python le fichier de configuration n'est pas un simple fichier texte mais un script qui déclare des variables d'environnement. C'est ici que vous pourrez indiquer quelle base de données utiliser ou quelles applications ajouter au projet, où se situent les fichier statiques, etc.

Au passage je vous invite à installer le packet tree pour voir ce type d'arboresence sur votre machine.

sudo apt-get install tree
tree /home/olivier/eboutique

Lancer le serveur de développement

Il est déjà possible à ce stade de consulter votre projet sur votre navigateur:

python /home/olivier/eboutique/manage.py runserver

Ce qui devrait afficher:

Validating models...

0 errors found
August 22, 2014 - 15:07:20
Django version 1.6.6, using settings 'eboutique.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

J'ai exprès pris le chemin absolu du manager du projet pour vous montrer son emplacement, mais vous pouvez évidement utiliser un chemin relatif.

Voici le rendu sur la navigateur:

Pensez à indiquer le port par défaut (8000) sur votre barre d'adresse comme dans l'exemple ci-dessus. Il est d'ailleurs possible de changer le port:

python /home/olivier/eboutique/manage.py runserver 5555

Rendre disponible son serveur sur tout le réseau

Si vous voulez partager votre projet sur le réseau local avec d'autres utilisateurs, vous pouvez choisir l'adresse IP 0.0.0.0

python manage.py runserver 0.0.0.0:8000

Mode debug

La première chose à connaitre c'est qu'il existe une variable qui gère le rendu votre projet, c'est à dire si votre projet se trouve dans un environnement de développement ou de production le rendu ne sera pas le même: dans un environnement de développement on affiche les erreurs / debug, ce qui est fortement déconseillé dans un environnement de production.

Voici la variable (dans le fichier settings.py):

DEBUG = True

Configurer l'accès à sa base de données

Le choix de la base de données dépendant de l'envergure de votre projet, si vous avez des doutes pour le choix d'un SGBD je vous invite à lire le chapitre consacré au sujet: choisir son gestionnaire de base de données. Dans notre exemple (création d'une eboutique) nous utiliserons MySQL pour des raisons totalement arbitraires.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', 
        'OPTIONS' : { "init_command": "SET foreign_key_checks = 0;" },
        'NAME': 'eboutique',
        'USER': 'root',
        'PASSWORD': 'MOTDEPASSE',
        'HOST': '127.0.0.1',                     
        'PORT': '',
    }
}

J'ai ajouté une option histoire de montrer comment cette option fonctionne, elle n'est évidemment pas obligatoire.

Configuration du fuseau horaire

Remplacez la valeur de la variable TIME_ZONE par le lieu géographique de votre serveur:

TIME_ZONE = "Europe/Paris"

Changer la langue

Pour modifier les paramètres de la langue:

LANGUAGE_CODE = "fr-fr"

Paramétrer les fichiers statiques

Nous indiquons ici où sont stockés les fichiers statiques et comment les atteindre

STATIC_URL = '/static/'
STATICFILES_DIRS = (
    BASE_DIR + '/static/',
)

Indiquer les dossiers templates

Indiquez vos dossiers de templates dans le dossier DIRS

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [ '', 'test'],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

Indiquer les dossiers média

MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR + '/media/'