PROJET AUTOBLOG


Sam et Max

source: Sam et Max

⇐ retour index

En Django, le fichier settings.py, c’est juste du Python

lundi 24 septembre 2012 à 14:42

On a beau répêter dans la doc, “Django is just Python”, c’est difficile de s’y faire. Surtout dans le fichier settigns.py: c’est vrai que le paramétrage, c’est quelque chose qu’on a l’habitude d’être typiquement déclaratif.

Rappel donc, le fichier settings.py, c’est juste du Python.

Ça veut dire qu’on peut faire ça en début de fichier:

import os
# répérer le dossier du projet
ROOT_DIR = os.path.dirname(os.path.realpath(__file__))
 
Et ça un peut partout dans le projet pour éviter les d'avoir des chemins absolus en dur:
 
STATIC_ROOT = os.path.join(ROOT_DIR, 'static')

On peut aussi faire des choses comme celle-ci, pour avoir un comportement spécial en mode debug:

if DEBUG:
 
    # on retire le dernier middleware
    MIDDLEWARE_CLASSES = [:-1]
    #et on en rajoute un au début
    MIDDLEWARE_CLASSES = (
        'libs.middlewares.MonMiddlewareKilebo',
    ) + MIDDLEWARE_CLASSES

Et si un settings n’existe pas, on peut l’inventer pour le réutiliser partout dans son code ailleurs:

SERVER_POOL = (
    ('8.8.8.8', "sametmax.com"),
    ('8.8.4.4', "cnd.sametmax.com"),
    ('208.67.222.222', 'staging.sametmax.com'),
    ('208.67.220.220', "dev.sametmax.com")
)

Et même se faciliter la vie:

SERVER_POOL_DICT = dict(SERVER_POOL)

Dans le même genre on peut faire des calculs:

CINQ_MINUTES = 60 * 5
...
CACHE_MIDDLEWARE_SECONDS = CINQ_MINUTES * 2

Et bien entendu, on peut splitter son fichier de settings en plusieurs fichiers. Il y a le maintenant classique fichier de settings local qui est différent sur chaque marchine, et qu’on importe en fin de fichier:

try:
    from settings_local import *
except ImportError:
    pass

Ca permet de mettre les paramètres de la base de données dans settings_local.py.

Mais on oublie souvent que peut tout à fait récupérer les paramètres depuis un fichier non Python.

Récupérer des valeurs dans un fichiers ini ? Fastoche !

import ConfigParser
config = ConfigParser.RawConfigParser()
config.readfp('/chemin/vers/fichier.ini')
locals().update(config.items('section'))