Python:gaeproject:django

De Les Tutoriaux du WebMestre
Aller à : navigation, rechercher

Bibliographie

Utilisation du Django fourni par Python SDK du GAE

Création d'un environnement virtuel pour Django (Python 2.7) avec le GAE

  • Je nomme gaedjango cet environnement virtuel!
    • La commande est maintenant connue, on la lance:
jpmena@jpmena-P34:~$ mkvirtualenv gaedjango -p python2.7
Running virtualenv with interpreter /usr/bin/python2.7
New python executable in gaedjango/bin/python2.7
Also creating executable in gaedjango/bin/python
Installing setuptools, pip, wheel...done.
virtualenvwrapper.user_scripts creating /home/jpmena/Python/.virtualenvs/gaedjango/bin/predeactivate
virtualenvwrapper.user_scripts creating /home/jpmena/Python/.virtualenvs/gaedjango/bin/postdeactivate
virtualenvwrapper.user_scripts creating /home/jpmena/Python/.virtualenvs/gaedjango/bin/preactivate
virtualenvwrapper.user_scripts creating /home/jpmena/Python/.virtualenvs/gaedjango/bin/postactivate
virtualenvwrapper.user_scripts creating /home/jpmena/Python/.virtualenvs/gaedjango/bin/get_env_details

Ajout de Django dans le PATH de l'environnement virtuel

L'existant

jpmena@jpmena-P34:~/RSM/appenginegps$ cd ~/Ateliers/google-cloud-sdk/platform/google_appengine/lib/
jpmena@jpmena-P34:~/Ateliers/google-cloud-sdk/platform/google_appengine/lib$ ll | grep -i django
drwxr-xr-x  4 jpmena jpmena 4096 nov.  18 10:19 django-0.96/
drwxr-xr-x  5 jpmena jpmena 4096 nov.  18 10:19 django-1.2/
drwxr-xr-x  5 jpmena jpmena 4096 nov.  18 10:19 django-1.3/
drwxr-xr-x  5 jpmena jpmena 4096 nov.  18 10:19 django-1.4/
drwxr-xr-x  5 jpmena jpmena 4096 nov.  18 10:19 django-1.5/
  • On choisit la version la plus récente fournie (django-1.5)

Ajout dans le PATH via virtualenvwrappper

  • je demande au script de postactivation de passer la commande add2virtualenv $DJANGO_DIR
  • J'adapte donc les scripts postacctive et postdeactivate de mon environnement virtuel gaedjango ce qui donne:
 1 #postactivate est appelée suite au passage dans l'environnement virtuel, elle doit:
 2 ##setter des variables d'environnements qui me seront utiles 
 3 ##et demander à virtualenvwrapper d'ajouter au PYTHONPATH la librairie Django-1.5 livrée par le SDK-Python du GAE
 4 jpmena@jpmena-P34:~/Python/.virtualenvs/gaedjango/bin$ diff -u postactivate.ori23012016 postactivate
 5 --- postactivate.ori23012016	2016-01-23 10:00:12.091365203 +0100
 6 +++ postactivate	2016-01-24 16:03:15.190186339 +0100
 7 @@ -1,3 +1,7 @@
 8  #!/bin/bash
 9  # This hook is sourced after this virtualenv is activated.
10 -
11 +export GOOGLE_SDK=$HOME/Ateliers/google-cloud-sdk
12 +export GAE_PYTHON=$GOOGLE_SDK/platform/google_appengine
13 +export DJANGO_DIR=$GAE_PYTHON/lib/django-1.5
14 +#see 55 on http://stackoverflow.com/questions/10738919/how-do-i-add-a-path-to-pythonpath-in-virtualenv
15 +add2virtualenv $DJANGO_DIR
16 
17 #postdeactivate est appelée suite au retour dans l'environnement système, elle doit:
18 ##virtualenvwrapper se charge tout seul de revenir au PYTHONPATH système, rien à faire de notre côté 
19 ##de-setter les variables précédemmment settées
20 jpmena@jpmena-P34:~/Python/.virtualenvs/gaedjango/bin$ diff -u postdeactivate.ori23012016 postdeactivate
21 --- postdeactivate.ori23012016	2016-01-24 16:19:16.329245701 +0100
22 +++ postdeactivate	2016-01-24 16:14:52.150320876 +0100
23 @@ -1,2 +1,5 @@
24  #!/bin/bash
25  # This hook is sourced after this virtualenv is deactivated.
26 +unset GOOGLE_SDK
27 +unset GAE_PYTHON
28 +unset DJANGO_DIR

Vérification via le PYTHONPATH

  • Quand je suis dans l'environnement Python 2.7 du système le PYTHONPATH est:
jpmena@jpmena-P34:~/RSM/appenginegps$ python
Python 2.7.10 (default, Oct 14 2015, 16:09:02) 
[GCC 5.2.1 20151010] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print '\n'.join(sys.path)

/usr/lib/python2.7
/usr/lib/python2.7/plat-x86_64-linux-gnu
/usr/lib/python2.7/lib-tk
/usr/lib/python2.7/lib-old
/usr/lib/python2.7/lib-dynload
/usr/local/lib/python2.7/dist-packages
/usr/lib/python2.7/dist-packages
/usr/lib/python2.7/dist-packages/gtk-2.0
/usr/lib/python2.7/dist-packages/ubuntu-sso-client
>>> exit()
  • quand je passe dans l'environnement virtuel gaedjango le PYTHONPATH deveint:
 1 jpmena@jpmena-P34:~/RSM/appenginegps$ workon gaedjango
 2 (gaedjango)jpmena@jpmena-P34:~/RSM/appenginegps$ python
 3 Python 2.7.10 (default, Oct 14 2015, 16:09:02) 
 4 [GCC 5.2.1 20151010] on linux2
 5 Type "help", "copyright", "credits" or "license" for more information.
 6 >>> import sys
 7 >>> print '\n'.join(sys.path)
 8 
 9 /home/jpmena/Ateliers/google-cloud-sdk/platform/google_appengine/lib/django-1.5
10 /home/jpmena/Ateliers/google-cloud-sdk/platform/google_appengine
11 /home/jpmena/Ateliers/google-cloud-sdk/platform/google_appengine/lib
12 /home/jpmena/RSM/appenginegps/lib/django
13 /home/jpmena/Python/.virtualenvs/gaedjango/lib/python2.7
14 /home/jpmena/Python/.virtualenvs/gaedjango/lib/python2.7/plat-x86_64-linux-gnu
15 /home/jpmena/Python/.virtualenvs/gaedjango/lib/python2.7/lib-tk
16 /home/jpmena/Python/.virtualenvs/gaedjango/lib/python2.7/lib-old
17 /home/jpmena/Python/.virtualenvs/gaedjango/lib/python2.7/lib-dynload
18 /usr/lib/python2.7
19 /usr/lib/python2.7/plat-x86_64-linux-gnu
20 /usr/lib/python2.7/lib-tk
21 /home/jpmena/Python/.virtualenvs/gaedjango/local/lib/python2.7/site-packages
22 /home/jpmena/Python/.virtualenvs/gaedjango/lib/python2.7/site-packages
23 >>> import django
24 >>> exit()
25 (gaedjango)jpmena@jpmena-P34:~/RSM/appenginegps$ deactivate 
26 jpmena@jpmena-P34:~/RSM/appenginegps$ python
27 Python 2.7.10 (default, Oct 14 2015, 16:09:02) 
28 [GCC 5.2.1 20151010] on linux2
29 Type "help", "copyright", "credits" or "license" for more information.
30 >>> import sys
31 >>> print '\n'.join(sys.path)
32 
33 /usr/lib/python2.7
34 /usr/lib/python2.7/plat-x86_64-linux-gnu
35 /usr/lib/python2.7/lib-tk
36 /usr/lib/python2.7/lib-old
37 /usr/lib/python2.7/lib-dynload
38 /usr/local/lib/python2.7/dist-packages
39 /usr/lib/python2.7/dist-packages
40 /usr/lib/python2.7/dist-packages/gtk-2.0
41 /usr/lib/python2.7/dist-packages/ubuntu-sso-client
42 >>> exit()
  • analyse de la sortie console ci dessus:
    • ligne 1: je passe dans l'environnement virtuel gaedjango
    • ligne 9: je trouve bien maa librairie django1.5 du Python SDK dans la PYTHONPATH de l'environnement virtuel
    • ligne 23: je vérifie via un import django que le framework est bien dans la PYTHONPATH, en effet la commande ne lance pas d'exception
    • ligne 25 au delà: je quitte l'environnement virtuel et je vérifie que je retrouve bien le PYTHONPATH système !!!

Exemple de création d'un projet Django1.5

  • On passe dans l'environnement virtuel gaedjango
  • On passe la commande python $DJANGO_DIR/django/bin/django-admin.py startproject myproject:
  • On vérifie la présence des élements d'un projet Django 1.5:
 1 jpmena@jpmena-P34:~/RSM/appenginegps$ workon gaedjango
 2 (gaedjango)jpmena@jpmena-P34:~/RSM/appenginegps$ echo $DJANGO_DIR 
 3 /home/jpmena/Ateliers/google-cloud-sdk/platform/google_appengine/lib/django-1.5
 4 (gaedjango)jpmena@jpmena-P34:~/RSM/appenginegps$ python $DJANGO_DIR/django/bin/django-admin.py startproject myproject
 5 (gaedjango)jpmena@jpmena-P34:~/RSM/appenginegps$ ll myproject/
 6 total 16
 7 drwxrwxr-x  3 jpmena jpmena 4096 janv. 24 17:19 ./
 8 drwxrwxr-x 14 jpmena jpmena 4096 janv. 24 17:19 ../
 9 -rw-r--r--  1 jpmena jpmena  252 janv. 24 17:19 manage.py
10 drwxrwxr-x  2 jpmena jpmena 4096 janv. 24 17:19 myproject/
11 (gaedjango)jpmena@jpmena-P34:~/RSM/appenginegps$ ll myproject/myproject/
12 total 24
13 drwxrwxr-x 2 jpmena jpmena 4096 janv. 24 17:19 ./
14 drwxrwxr-x 3 jpmena jpmena 4096 janv. 24 17:19 ../
15 -rw-r--r-- 1 jpmena jpmena    0 janv. 24 17:19 __init__.py
16 -rw-r--r-- 1 jpmena jpmena 5434 janv. 24 17:19 settings.py
17 -rw-r--r-- 1 jpmena jpmena  565 janv. 24 17:19 urls.py
18 -rw-r--r-- 1 jpmena jpmena 1428 janv. 24 17:19 wsgi.py
19 (gaedjango)jpmena@jpmena-P34:~/RSM/appenginegps$ deactivate 
20 jpmena@jpmena-P34:~/RSM/appenginegps$ echo $DJANGO_DIR
  • analyse de la sortie console ci dessus:
    • ligne 1: on passe dans l'environnement virtuel gaedjango
    • ligne 2: on vérifie que suite à ce passage la variable d'environnement DJANGO_DIR a été correctement settée...
    • ligne 4: on passe la commande de création d'un projet Django 1.5 que l'on appellera myproject
    • ligne 9: à la racine du projet créé, on trouve bien le script manage.py qui nous servira à gérer les applications relatives à ce projet...
    • ligne 15 à 18: on a bien les scripts python classique d'un projet python Django!
    • ligne 19: je repasse en environnement Python système !
    • ligne 20 et 21: je vérifie que la variable d'environnement DJANGO_DIR n'est plus settée ...