- Liste de commandes non-exhaustive bien sûr, et surtout propre à mon usage personnel (sous Windows). Ce mémo est lié à l'article À la découverte de Django et GeoDjango.
Créer un projet Django (un site)
Sous Windows :
python -m django startproject mon_projet
Sous Linux :
django-admin startproject mon_projet
Sous Linux mais avec des versions anciennes, parfois :
django-admin.py startproject mon_projet
Créer une app Django (une fonctionnalité du site)
Placez-vous dans votre projet, changez le nom d'app souhaité, puis :
python manage.py startapp mon_appli
À chaque fois qu'il faut se placer dans le répertoire de votre projet Django, c'est pour utiliser le fichier manage.py, qui permet d'appeler Python directement à partir de votre projet personnel, pourtant situé hors de l'environnement virtuel.
Créer un super-utilisateur Django
Une fois que l'accès à votre base de données est correctement configuré, placez -vous dans votre projet puis :
python manage.py createsuperuser
Suivez les instructions de création d'un nom d'utilisateur,email et mot de passe.
Collecter les fichiers statiques
python manage.py collectstatic
Connaître la locale de Django
Dans votre projet Django :
locale
Il y a aussi :
locale -a
Connaître la version de Django
python -m django --version
Mettre à jour Django
pip install -U Django
Lister les packages obsolètes avec pip
pip list -o
Connaître la version de Python
python --version
Ou alors, rentrez dans Python (python
à la racine) puis :
import django; print(django.get_version())
Connaître l'emplacement du répertoire Python
Pratique quand on utilise un IDE ou un environnement virtuel :
>>> import os
>>> import sys
>>> os.path.dirname(sys.executable)
Déclarer Postgres dans settings.py
Si GDAL et les autres packages nécessaires à PostGIS sont installés :
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.postgis',
'NAME': 'nom_de_bdd',
'USER': 'votre_user_bdd',
'PASSWORD': 'votre_mot_de_passe_de_user_bdd',
'HOST': 'votre_host_distant_ou_localhost',
}
}
Ou alors plus simplement (sans PostGIS, Postgres uniquement) :
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mysite',
'USER': 'postgres',
'PASSWORD': 'admin',
'HOST': 'localhost',
}
}
L'utilisation de Psycopg est parfois requise (pour PostGIS uniquement je crois, voir plus bas).
Déclarer les INSTALLED_APPS
Dans les anciennes version de Django (<=1.6), la dernière ligne :
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
...
'carto',
]
Dans les versions plus récentes (1.9 notamment) :
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
...
'carto.apps.CartoConfig',
]
Déclarer GeoDjango
Il s'agit d'une INSTALLED_APPS :
'django.contrib.gis',
Démarrer le serveur de développement
Placez-vous dans le répertoire d'un projet Django puis exécutez :
python manage.py runserver
Votre serveur sera accessible à l'adresse http://127.0.0.1:8000.
Démarrer le serveur de développement chez Alwaysdata
Placez-vous dans le répertoire d'un projet Django puis exécutez par exemple (changez le nom de compte bien sûr, ainsi que le port) :
./manage.py runserver ssh-hinot.alwaysdata.net:14380
Votre serveur sera par exemple accessible à l'adresse http://ssh-hinot.alwaysdata.net:14380/.
Éteindre le serveur de développement/Sortir du serveur de développement
Ctrl+c
Générer les tables des INSTALLED_APPS
Dernière version de Django/Python :
python manage.py makemigrations
Puis :
python manage.py migrate
Réinitialiser les migration d'une app
python manage.py reset_migration myApp
Installer Psycopg
Sous Windows :
python -m pip install psycopg2
Et dans settings.py, pour utiliser Postgres, toujours sous Windows :
'ENGINE': 'django.db.backends.postgresql',
Modèle de points géométriques
Exemple d'un modèle de points géométriques dans le fichier models.py d'une application d'un projet Django :
from django.contrib.gis.db import models
class Sample(models.Model):
# Champs classiques
name = models.CharField("Name", max_length=100)
author = models.CharField("Author", max_length=100)
# Champ geometrique
geom = models.PointField("Location")
# Chaine du modele
def __str__(self):
return self.name
Ouvrir la console Python
Sous Linux ou Windows, pour ouvrir la console Python directement dans le shell Linux ou Windows, tapez python
, la console affiche maintenant >>>
, vous être dans la console Python.
Sortir de la console Python
Sous Linux, faites Ctrl+d
Sous Windows, Ctrl+Pause. Sur certains PC, la combinaison Ctrl+c marche aussi.
Optimiser le temps de chargement de formulaires admin un peu lents...
En cas de jointure de type ForeignKey par exemple, pointant sur des tables un peu grosses, les listes déroulantes affichées peuvent parfois être longues à charger.
Il est alors possible de remplacer le widget de type Dropdown par un widget de type Glass Magnifying. Ceci aura l'avantage de ne pas charger chaque objet, sauf après clic sur l'icône, qui lui ouvrira un popup sur la table concernée.
Mentionnez simplement un ou des raw_id_field
dans les fichiers admin.py, exemple :
class ProspectAdmin(admin.ModelAdmin): raw_id_fields = ('user',) admin.site.register(Prospect, ProspectAdmin)
Ou dans un formulaire inline
:
class OrganizationInLine(admin.StackedInline): model = OrganizationProspect verbose_name_plural = 'Organizations related' extra = 0 raw_id_fields = ('organization',)
J'ai personnellement vérifié le gain en temps de chargement avant/après: rien à voir !
Et encore plus efficace : autocomplete_fields
Réinitialiser les index des tables Postgres
Quand vous développez un projet, et chargez régulièrement des tables de tests, on finit parfois sur ce type d'erreur :
ERROR: duplicate key value violates unique constraint
Rien de bien méchant, allez voir cette astuce !
Environnement virtuel
pip install virtualenv
pip install virtualenvwrapper-win
mkvirtualenv HelloWold
setprojectdir .
HTTPIE (pour communiquer avec une API)
Installer httpie
pip install httpie
Lister les user d'un point d'accès
http http://127.0.0.1:8000/users/ -a User:PWD
Supprimer un user d'un point d'accès users
http DELETE http://127.0.0.1:8000/users/3/ -a User:PWD
Modifier un user d'un point d'accès users
http -a User:PWD PUT http://127.0.0.1:8000/users/4/ username="XXX" email="Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser."