Cette page a pour but de donner des conseils et bonnes pratiques aux développeurs pour améliorer la qualité des productions.

Orientation industrialisation

Cette partie reflète les idées pour monter en compétences en terme de développement et de déploiement.

Ce sont juste des idées à ce stade, elles ne sont pas forcément bonnes à prendre, mais il bon d'en garder la trace de ces réflexions

Trousse à outils du développeur

PDB

Le debuggeur Python pdb avec sa version amélioré ipdb reposant sur ipython

Installation de ipython

Avant de l'installer, s'assurer que vous êtes bien dans un environnement virtuel virtualenv

easy_install ipython

Pour invoquer le déboggeur, mettre un point d'arrêt dans le code :

import pdb; pdb.set_trace()

Lorsque que le serveur est lancé en mode standalone, le debugger vous invite à taper une commande help est un bon début ;)

Django Debug ToolBar

La Django Debug toolbar greffe un outil web visuel au projet pour explorer les templates, requêtes SQL utilisées pour construire la page.

Je vous donne ici ma façon de l'incorporer à un projet, pour qu'il soit automatiquement disponible en développement sans pour autant polluer la version déployée

buildout.cfg

[buildout]
...
eggs =
...

[django]
...
eggs = ${buildout:eggs}
...

devel.cfg

[buildout]
extends=buildout.cfg

[django]
wsgi=false
settings=development
eggs = ${buildout:eggs}
    django-debug-toolbar

development.py

Ajout de ces 3 lignes au fichier :

INTERNAL_IPS = ('127.0.0.1',)
MIDDLEWARE_CLASSES += ('debug_toolbar.middleware.DebugToolbarMiddleware',)
INSTALLED_APPS += ('debug_toolbar',)

Framework de migration

L'avantage consiste à maitriser et à historiser les migrations de structures de données, et de données elles-mêmes.

Le framework propose des outils intégrer à Django pour gérér les migrations, mais aussi des outils pour générer certaines migrations constatées sur les modèles de données.

Environnement de Tests

La phase de développement se fait généralement en mode devel.cfg soit avec les flags debugs activés et le serveur web statique de django de démarré.

Pour déployer en test (ou en prod), le buildout génère un WSGI en vue de pouvoir câbler notre application avec le serveur Web Apache2.

Il peut être bon de tester et valider l'application dans ce mode de fonctionnement.

sudo apt-get install apache2

Si vous souhaitez câbler une application déployée sous votre home, vous devez définir le user qui doit lancer Apache, autrement, le montage NFS interdira à Apache d'accéder à cette partie du système de fichier.

Editer le fichier /etc/apache2/apache2.conf

# These need to be set in /etc/apache2/envvars
User olivier.larcheveque
Group ${APACHE_RUN_GROUP}

sudo apt-get install libapache2-mod-wsgi

sudo a2enmod wsgi

Ajouter un fichier avec en le nommant avec le nom de domaine souhaité (dans cet exemple projets-p4)

sudo touch /etc/apache2/sites-available/projets-p4

Contenu de ce fichier

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName projets-p4

    Alias /media/ /net/nfs-authnss.b.ca.auf/home/olivier.larcheveque/Projets/auf_projets/auf_projets/media/
    Alias /admin_media/ /net/nfs-authnss.b.ca.auf/home/olivier.larcheveque/Projets/auf_projets/parts/django/django/contrib/admin/media/

    <Directory /net/nfs-authnss.b.ca.auf/home/olivier.larcheveque/Projets/auf_projets/auf_projets/media>
    Order deny,allow
    Allow from all
    </Directory>

    WSGIScriptAlias / /net/nfs-authnss.b.ca.auf/home/olivier.larcheveque/Projets/auf_projets/bin/django.wsgi

    <Directory /net/nfs-authnss.b.ca.auf/home/olivier.larcheveque/Projets/auf_projets/auf_projets>
    Order deny,allow
    Allow from all
    </Directory>

    ErrorLog /var/log/apache2/projets-p4.log

</VirtualHost>

Pour qu'apache soit en mesure d'asocier ce vhost (avec le serverName définit, ici projets-p4), à une url http://projets-p4, il déclarer notre machine locale comme étant projets-p4.

Exemple de contenu de mon fichier hosts

127.0.0.1   localhost
127.0.1.1   u-ol
127.0.0.1   db.local
127.0.0.1   projets-p4

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

sudo a2ensite projets-p4

sudo /eic/init.d/apache2 restart

DjangoDeveloppeur (dernière édition le 2010-11-05 21:02:53 par OlivierLarchevêque)