Django est un framework qui permet de créer rapidement des applications Python. Par défaut ces applications sont configurées pour stocker leur données dans des bases SQLite.

Ce type de configuration fonctionne parfaitement pour des applications peu gourmandes, mais utiliser un autre système de stockage peut aider à augmenter les performances en production.

Dans cet article nous verrons comment installer et configurer PostgreSQL et l’utiliser avec vos applications Django.

Installez les composants depuis les dépôts Ubuntuubuntu

Pour commencer nous avons besoin d’une distribution Ubuntu 16.04 fraîchement installée.
Ensuite, nous installons les prérequis :

Si vous utilisez Python 2 :

apt-get update
apt-get install python-pip python-dev libpq-dev postgresql postgresql-contrib

Si vous utilisez Python 3 :

apt-get update
apt-get install python3-pip python3-dev libpq-dev postgresql postgresql-contrib

Créez une base de données et un utilisateur

Par défaut PostgreSQL va créer un utilisateur nommé « postgres« . Nous allons nous servir de celui-ci pour créer nos bases et nos utilisateurs.

pour se connecter :

sudo -u postgres psql

Nous créons une base pour notre projet Django. Chaque projet devra avoir sa propre base pour des raisons de sécurité.
Ici nous utiliserons la base « projet » :

postgres=# CREATE DATABASE projet;

Nous créons ensuite l’utilisateur qui se connectera à la base depuis votre projet Django. Ici « utilisateur » :

postgres=# CREATE USER utilisateur WITH PASSWORD 'pass';

Nous ajustons ensuite quelques paramètres, comme l’encodage ou le le ‘timezone‘ :

postgres=# ALTER ROLE utilisateur SET client_encoding To 'utf8';
postgres=# ALTER ROLE utilisateur SET default_transaction_isolation TO 'read committed';
postgres=# ALTER ROLE utilisateur SET timezone TO 'UTC';

Il s’agit de recommandations demandées pour créer un projet Django.

Nous denons des droits à notre utilisateur sur notre base :

postgres=# GRANT ALL PRIVILEGES ON DATABASE projet  TO utilisateur;

On quitte PostgreSQL :

postgres=# \q

Installez Djangodjango

Pour plus de flexibilité nous allons installer Django à l’intérieur d’un environnement virtuel Python. Le paquet ‘virtualenv‘ permet de faire cela.

Si vous utilisez Python 2 :

# pip install virtualenv

Si vous utilisez Python 3 :

# pip3 install virtualenv

On créer un répertoire qui va contenir notre projet :

# mkdir /home/projet
# cd /home/projet

On créer l’environnement virtuel :

# virtualenv projetenv

On l’active :

# source projetenv/bin/activate

Nous installons localement une copie de Python et de psycopg2 qui nous permettra d’utiliser notre base PostgreSQL :

(projetenv) $ pip install django psycopg2

On démarre le projet Django :

(projetenv) $ django-admin.py startproject projet

Configurez Django pour accéder à la base PostgreSQL

postgresql

 

On ouvre le fichier de configuration principal du projet :

(projetenv) $ nano /home/projet/projet/settings.py

Vers la fin du fichier,  vous trouvez une section « DATABASES » qui ressemble à cela :

[...]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
[...]

Il faut modifier cette partie pour configurer l’accès à notre base PostgreSQL :

[...]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'projet',
'USER': 'utilisateur',
'PASSWORD': 'pass',
'HOST': 'localhost',
'PORT': '',
}
}
[...]

Migrez vers la base PostgreSQL et testez le projet

Nous pouvons désormais migrer notre projet vers PostgreSQL :

(projetenv) $ cd /home/projet
(projetenv) $ python manage.py  makemigrations
(projetenv) $ python manage.py migrate

Nous créons un compte d’administration :

(projetenv) $ python manage.py createsuperuser

Donnez un nom d’utilisateur, un e-mail et un mot passe.
Nous démarrons notre serveur de développement :

(projetenv) $ python manage.py runserver 0.0.0.0:8000

Notre application écoutera sur le port TCP 8000, il est donc indispensable d’ouvrir celui-ci dans le pare-feu de votre VPS.
Finalement nous nous connectons sur la page d’accueil de notre projet Django :
http://IP_de_votre_VPS:8000