davin.baragiotta 30/08/2012 02:20:41


DÉBUT ATELIER DJANGO : Architecture d'un projet + Backend


   1 Bonjour 30/08/2012 02:20:45
   2 le contenu de l'atelier est ici : 30/08/2012 02:20:50
   3 https://wiki.auf.org/wikiteki/Ateliers/Django/Backend/Support 30/08/2012 02:20:56
   4 INTRODUCTION 30/08/2012 02:21:01
   5 Aujourd'hui on se fait plaisir.... on monte en puissance en Python 30/08/2012 02:21:18
   6 et on va utiliser un framework de développement web 30/08/2012 02:21:32
   7 Django 30/08/2012 02:21:34
   8 notre objectif est de comprendre à quoi ressemble un projet Django (architecture des fichiers) 30/08/2012 02:21:52
   9 mais aussi de gérer les données 30/08/2012 02:22:00
  10 dans une interface d'administration 30/08/2012 02:22:06
  11 Documentation : 30/08/2012 02:22:10
  12 sur la page web de l,atelier 30/08/2012 02:22:17
  13 des liens vers la doc officielle 30/08/2012 02:22:22
  14 attention, la doc officielle vient en plusieurs versions 30/08/2012 02:22:42
  15 choisir la bonne en bas à droite de la doc Django... 30/08/2012 02:22:59
  16 (je viens de mettre à jour lien vers doc 1.4) 30/08/2012 02:23:19
  17 sur la page de la documentation Django 30/08/2012 02:23:33
  18 (allons-y tous) 30/08/2012 02:23:37
  19 https://docs.djangoproject.com/en/1.4/ 30/08/2012 02:23:44
  20 En plein milieu (sous First steps) y'a Tutorial 30/08/2012 02:24:03
  21 aujourd'hui, on va couvrir une partie du tutoriel 30/08/2012 02:24:16
  22 si vous assitez à l,atelier de demain, on couvrir presque tout le tutoriel, au total... 30/08/2012 02:24:35
  23 gardez la page de doc ouverte, on va y revenir 30/08/2012 02:24:52
  24 Environnement technique 30/08/2012 02:25:15
  25 je suppose que tout le monde a Django d'installé 30/08/2012 02:25:25
  26 l'atelier est monté pour Django 1.4 30/08/2012 02:25:31
  27 mais 30/08/2012 02:25:33
  28 y'a pas grand différence (en tout cas pour le contenu couvert dans l,atelier) 30/08/2012 02:25:51
  29 entre 1.1.1 et 1.4 30/08/2012 02:25:54
  30 doc je dirai où y,a des différences 30/08/2012 02:26:01
  31 pour ceux qui ont 1.1.1 (je suis qu'il y en a  ) 30/08/2012 02:26:11
  32 aussi 30/08/2012 02:26:17
  33 South est optionnel... mais c'est vraaaaaaaaaaaaiment mieux avec South 30/08/2012 02:26:30
  34 pour tester vos installations : 30/08/2012 02:26:38
  35 ipython 30/08/2012 02:26:43
  36 import django 30/08/2012 02:26:48
  37 django.get_version() 30/08/2012 02:26:53
  38 moi j'ai 1.4 30/08/2012 02:26:56
  39 import south 30/08/2012 02:26:59
  40 moi j'ai 0.7.4 30/08/2012 02:27:05
  41 (mais peut importe version de South pour l,atelier) 30/08/2012 02:27:23
  42 ok, dernier point avant de commencer pour vrai 30/08/2012 02:27:33
  43 Django à l'AUF 30/08/2012 02:27:38
  44 l'idée = de coder des applications web 30/08/2012 02:27:45
  45 les apps web seront déployées sur des serveurs 30/08/2012 02:27:54
  46 on veut donc des apps montées avec une version de Django que debian suit 30/08/2012 02:28:08
  47 afin de bénéficier du suivi de debian, notamment au niveau de sécurité 30/08/2012 02:28:23
  48 squeeze = django 1.2 sauf erreur 30/08/2012 02:28:35
  49 et ubuntu = 1.1.1 (version 10.04 officielle de l'AUF) 30/08/2012 02:28:51
  50 pour l'équipe SI... on utilise les dernières versions, car on les suit manuellement pour les mises à jour (on s'écarte de debian) 30/08/2012 02:29:17
  51 voilà donc pour l'intro 30/08/2012 02:29:22
  52 PARTIE 1 : DÉVELOPPEMENT WEB AVEC DJANGO : ARCHITECTURE D'UN PROJET 30/08/2012 02:29:30
  53 Juste un petit topo sur le développement web 30/08/2012 02:29:42
  54 ça peut paraître inutile pour certains... mais ça fait pas de mal : rappel : 30/08/2012 02:29:58
  55 j'ai fait un schéma sur le développement web 30/08/2012 02:30:09
  56 http://montrealpython.org/r/attachments/13/web-development.jpg 30/08/2012 02:30:14
  57 notre but, est de coder une application qui va : 30/08/2012 02:30:37
  58 créer une réponse 30/08/2012 02:30:41
  59 à une requête 30/08/2012 02:30:44
  60 tout simplement 30/08/2012 02:30:49
  61 la requête est acheminée via protocole HTTP... 30/08/2012 02:31:06
  62 ... passse par le serveur Apache qui va déléguer le travail à l'application Django via WSGI (web service gateway interface) 30/08/2012 02:31:41
  63 le plus important pour notre atelier = partie de droite 30/08/2012 02:31:57
  64 le "projet" django qu'on va créer 30/08/2012 02:32:06
  65 suit le modèle MVC : models, view, controller 30/08/2012 02:32:20
  66 un pattern de développement logiciel 30/08/2012 02:32:31
  67 à droite complètement 30/08/2012 02:32:38
  68 je vous montre le flux d'info à travers les fichiers de Django.... 30/08/2012 02:32:54
  69 d'abord la requête entre dans urls.py (grosso modo) 30/08/2012 02:33:05
  70 et finalement, Django répond en ayant fait le "rendering" d'un template... 30/08/2012 02:33:27
  71 on verra tout ça en détail dans atelier frontend 30/08/2012 02:33:46
  72 aujourd'hui, on va se concentré sur l'admin... qui fait le boulot (automatiquement) pour répondre aux requêtes 30/08/2012 02:34:21
  73 finalement 30/08/2012 02:34:24
  74 la réponse, dans notre cas, sera du HTML + CSS envoyé en HTTP 30/08/2012 02:34:43
  75 mais 30/08/2012 02:34:44
  76 ça pourrait être n'importe quoi (XML, json, etc....) 30/08/2012 02:34:59
  77 RSS, par exemple 30/08/2012 02:35:06
  78 donc... on va coder "côté serveur" une application web 30/08/2012 02:35:23
  79 c'est parti! 30/08/2012 02:35:27
  80 (gardez le schéma sous le coude, au besoin) 30/08/2012 02:35:35
  81 https://wiki.auf.org/wikiteki/Ateliers/Django/Backend/Support 30/08/2012 02:35:42
  82 ah oui... 30/08/2012 02:35:50
  83 les environnements 30/08/2012 02:35:54
  84 on ne codera pas directement sur le serveur! 30/08/2012 02:36:03
  85 on travail en local pour faire notre développement 30/08/2012 02:36:11
  86 (idéalement avec un suivi sur git  ) 30/08/2012 02:36:19
  87 après, on déploie sur les serveurs... dans des environnements de TEST (pour faire tester les users) 30/08/2012 02:36:41
  88 puis sur PROD quand tout est ok 30/08/2012 02:36:47
  89 voilà pour notre processus de travail réel dans l'équipe SI à l'AUF 30/08/2012 02:36:59
  90 ok 30/08/2012 02:37:02
  91 Django 30/08/2012 02:37:04
  92 Pourquoi Django et pas un autre... 30/08/2012 02:37:10
  93 je vous laisse lire rapido sur la page web 30/08/2012 02:37:18
  94 mais en gros... car Django est bien intégré, bien documenté et l'admin est cool 30/08/2012 02:37:44
  95 Principaux fichiers : on vient d'en parler avec le schéma... on les verra un à un dans un instant 30/08/2012 02:38:10
  96 ok, pour travailler sur un projet vraisemblable 30/08/2012 02:38:29
  97 je vous ai donné un petit scénario 30/08/2012 02:38:37
  98 Projet : définition du besoin 30/08/2012 02:38:45
  99 je vous laisse lire ça 30/08/2012 02:38:53
 100 oui... ça ressemble à du réel... 30/08/2012 02:39:00
 101 lister les établissements, lister leurs formations... 30/08/2012 02:39:12
 102 donc si on essaie de modéliser un peut ce qui est écrit... en ciblant les mots-clés 30/08/2012 02:39:28
 103 (modélisation : on fait ça dans le cycle de nos projets informatiques... avant de coder) 30/08/2012 02:39:42
 104 on se rend compte qu'on veut gérer des Personnes, des Etablissements, des Formations et des Laboratoires 30/08/2012 02:40:04
 105 allons-y... codons! 30/08/2012 02:40:15
 106 PARTIE 2 : PROJET ET APPLICATIONS 30/08/2012 02:40:21
 107 lancez un terminal 30/08/2012 02:40:29
 108 on va créer le projet django 30/08/2012 02:40:34
 109 dans un répertoire où vous voulez stocker vos projets 30/08/2012 02:40:47
 110 lancez cette commande dans le terminal :
 111 django-admin.py startproject carto 30/08/2012 02:41:00
 112 notre projet s'appelle "carto"... pour cartographie 30/08/2012 02:41:16
 113 pas de problème? pas de question? 30/08/2012 02:41:28
 114 (je code en même temps que vous) 30/08/2012 02:41:34
 115  
 116 Tri 30/08/2012 02:41:41
 117 pas encore!     
 118 
 119 davin.baragiotta 30/08/2012 02:41:54
 120 (je réorganise mes fenêtres  )
 121 ok super 30/08/2012 02:42:39
 122 ensuite allez dans le projet 30/08/2012 02:42:44
 123 la première commande appelle un fichier dans vos sources Django sur votre machine... car ce script python "django-admin.py" est dans votre PATH python 30/08/2012 02:43:24
 124 maintenant... on va juste travailler dans le répertoire courant... 30/08/2012 02:43:36
 125 cd carto 30/08/2012 02:43:39
 126 on a créé un projet... en fait django a juste créé des fichiers pour vous... que vous auriez pu coder 30/08/2012 02:44:04
 127 mais on veut pas les coder 30/08/2012 02:44:08
 128 on va regarder ces fichiers 30/08/2012 02:44:14
 129 truong.tung.lam a rejoint le salon 02:44        
 130 
 131 Tri 30/08/2012 02:44:28
 132 [09:44:26] tran.xuan.huy: j'ai probleme: django-admin.py : commande introuvable 
 133 
 134 davin.baragiotta 30/08/2012 02:44:48
 135 il est sur Ubuntu ou Mac?       
 136 
 137 Tri 30/08/2012 02:44:59
 138 ubuntu  
 139 
 140 davin.baragiotta 30/08/2012 02:45:04
 141 essaie avec sudo        
 142 
 143 Tri 30/08/2012 02:45:12
 144 django-admin startproject carto ?       
 145 
 146 davin.baragiotta 30/08/2012 02:45:18
 147 ou donner fullpath du script
 148 ah oui exact 30/08/2012 02:45:22
 149 ".py" pas nécessaire toujours (vieilles versions?) 30/08/2012 02:45:40
 150 problème réglé? 30/08/2012 02:45:47
 151  
 152 Tri 30/08/2012 02:45:56
 153 oui, je pense   
 154 
 155 davin.baragiotta 30/08/2012 02:46:00
 156 super
 157 donc 30/08/2012 02:46:02
 158 en django 1.4... django crée un autre répertoire carto dans carto.... bon 30/08/2012 02:46:22
 159 à la racine.... on voit manage.py 30/08/2012 02:46:33
 160 manage.py est le cerveau de Django... on va lui passer les commandes 30/08/2012 02:46:49
 161 donc on fait plus de django-admin.... 30/08/2012 02:46:55
 162 on va faire python manage.py.... 30/08/2012 02:47:02
 163 donc en gros : on touche pas à ce fichier 30/08/2012 02:47:12
 164 allons dans carto 30/08/2012 02:47:15
 165 shafeek.sumser a rejoint le salon 02:47 
 166 
 167 davin.baragiotta 30/08/2012 02:47:25
 168 __init__.py
 169 ça c,est juste pour dire qu'on est dans un module python (on en a parlé dans atelier python) 30/08/2012 02:47:40
 170 on fait rien avec ça 30/08/2012 02:47:46
 171 30/08/2012 02:47:47
 172 wsgi.py : ça ça sert juste pour servir l'application.... 30/08/2012 02:48:07
 173 dans les vieilles versions, il n'est pas là... 30/08/2012 02:48:15
 174 on fait rien avec 30/08/2012 02:48:18
 175 30/08/2012 02:48:19
 176 finalement... y,a settings.py.... ben c'est la config 30/08/2012 02:48:32
 177 ça on va travailler avec! 30/08/2012 02:48:37
 178 et puis y'a urls.py : 30/08/2012 02:48:44
 179 rappelez-vous du schéma... c'est notre point d'entrée... on va y revenir 30/08/2012 02:48:59
 180 ok, fin du survol 30/08/2012 02:49:06
 181 lançons le serveur de développement local 30/08/2012 02:49:20
 182 on demande au script manage.py de servir notre application web sur le localhost 30/08/2012 02:49:37
 183 tapez dans terminal :
 184 python manage.py runserver 30/08/2012 02:49:49
 185 (avec le .py  ) 30/08/2012 02:49:53
 186 allons sur l'URL fournie : 30/08/2012 02:50:18
 187 http://127.0.0.1:8000/ 30/08/2012 02:50:26
 188 (avec navigateur web, of course) 30/08/2012 02:50:40
 189 Tadaaaaaaaaaaam! 30/08/2012 02:50:44
 190 on a un application web qui marche... ou presque 30/08/2012 02:50:56
 191 doan.manh.ha a quitté la salle 02:51    
 192 
 193 davin.baragiotta 30/08/2012 02:51:23
 194 si vous lisez l'anglais... Django nous donne des instructions après nous avoir dit qu'on avait rien fait!
 195 travaillons, donc! 30/08/2012 02:51:29
 196 oui, nous voulons utiliser une base de données... 30/08/2012 02:51:48
 197 pour stocker nos data sur les Personnes, Etablissements... 30/08/2012 02:52:01
 198 mais 30/08/2012 02:52:03
 199 on va pas se casser la tête avec une MySQL ou autre 30/08/2012 02:52:13
 200 on va utiliser sqlite 30/08/2012 02:52:22
 201 mais dans tout les cas... faut configurer l,accès aux DB : 30/08/2012 02:52:36
 202 ouvrez settings.py dans éditeur 30/08/2012 02:52:47
 203 vous voyez un dictionnaire python 30/08/2012 02:53:00
 204 appelé DATABASES 30/08/2012 02:53:06
 205 pour vieilles versions... les clés du dictionnaire sont autant de variable ; DATABASE_* 30/08/2012 02:53:32
 206 comme sur la page de l,atelier 30/08/2012 02:53:45
 207 https://wiki.auf.org/wikiteki/Ateliers/Django/Backend/Support 30/08/2012 02:53:45
 208 on va configurer en disant que le ENGINE est sqlite3 30/08/2012 02:53:58
 209 et que le NAME de la DATABASE sera carto.db 30/08/2012 02:54:08
 210 questions? 30/08/2012 02:54:33
 211  
 212 Tri 30/08/2012 02:54:43
 213 pas encore...   
 214 
 215 davin.baragiotta 30/08/2012 02:54:50
 216 cool
 217 ok super... on a donc fait un premier truc demandé sur : http://127.0.0.1:8000/ 30/08/2012 02:55:07
 218 30/08/2012 02:55:09
 219 ensuite on nous dit de créer notre première application... 30/08/2012 02:55:22
 220 il nous donne même la commande! 30/08/2012 02:55:28
 221 ahaha 30/08/2012 02:55:29
 222 on va réfléchir un peu quand même : 30/08/2012 02:55:37
 223 c'est quoi une application? 30/08/2012 02:55:44
 224 bon... simplement... c'est du regroupement de code 30/08/2012 02:55:53
 225 qui "fait un truc" 30/08/2012 02:55:59
 226 on pourrait regrouper un peu n'importe comment... 30/08/2012 02:56:10
 227 ... les choix de découpage relève du "génie logiciel"... 30/08/2012 02:56:24
 228 ou du gros bon sens 30/08/2012 02:56:28
 229 mais on s'obstine souvent dans l'équipe sur : quoi va où? 30/08/2012 02:56:45
 230 et sur : comment nommer quoi? 30/08/2012 02:56:53
 231 ici, je vais vous simplifier la vie : je décide 30/08/2012 02:57:01
 232 on va créer une application nommée "annuaire" 30/08/2012 02:57:10
 233 sont but, c'est de stocker nos infos de base sur les Personnes et les Etablissements... 30/08/2012 02:57:27
 234 un annuaire des personnes et établissements quoi 30/08/2012 02:57:34
 235 après, on fera des apps pour gérer les formations et la recherche... 30/08/2012 02:57:49
 236 on pourrait tout mettre au même endroit... 30/08/2012 02:57:58
 237 génie logiciel 30/08/2012 02:58:03
 238 bon 30/08/2012 02:58:05
 239 go :
 240 python manage.py startapp annuaire 30/08/2012 02:58:16
 241 ah... 30/08/2012 02:58:28
 242 pas besoin de toujours fermer le serveur 30/08/2012 02:58:35
 243 lancez un autre terminal à côté 30/08/2012 02:58:40
 244 ok on voit quoi? 30/08/2012 02:59:03
 245 
 246 giotta@machina:~/projets/carto$ ls
 247 annuaire carto manage.py
 248 giotta@machina:~/projets/carto$ cd annuaire
 249 giotta@machina:~/projets/carto/annuaire$ ls
 250 __init__.py models.py tests.py views.py
 251 30/08/2012 02:59:19
 252 __init__.py : on connait, pas intéressant... 30/08/2012 02:59:41
 253 tests.py ; là on va coder tests unitaires (on le fait pas dans atelier) 30/08/2012 02:59:55
 254 models.py et views.py sont dans le schéma que je vous ai montré 30/08/2012 03:00:08
 255 views.py sera vu dans atelier sur Frontend 30/08/2012 03:00:28
 256 models.py... on va y mettre le résultat de notre "modélisation"... 30/08/2012 03:00:42
 257 nos modèles... nos classes python... 30/08/2012 03:00:54
 258 ok, retournons au plan de match... 30/08/2012 03:01:10
 259 https://wiki.auf.org/wikiteki/Ateliers/Django/Backend/Support 30/08/2012 03:01:18
 260 on vient de créer l'application 30/08/2012 03:01:30
 261 si on fait refresh de notre : http://127.0.0.1:8000/ 30/08/2012 03:01:41
 262 ben il se passe rien de plus... 30/08/2012 03:01:51
 263 ... c'est qu'il faut maintenant coder nos modèles! 30/08/2012 03:01:59
 264 alors... codons! 30/08/2012 03:02:02
 265 là... on va sérieusement avoir besoin de la doc! 30/08/2012 03:02:11
 266 ouvrez models.py 30/08/2012 03:02:20
 267 ouvrez doc django dans navigateur 30/08/2012 03:02:33
 268 la doc django est très bien faite 30/08/2012 03:02:42
 269 à gauche, vous voyez les grands blocs de la doc : 30/08/2012 03:02:55
 270 model layer 30/08/2012 03:03:00
 271 template layer 30/08/2012 03:03:05
 272 view layer 30/08/2012 03:03:08
 273 forms 30/08/2012 03:03:13
 274 template et views = atelier Frontend 30/08/2012 03:03:24
 275 forms = pas couvert dans ateliers 30/08/2012 03:03:32
 276 model layer : on va y aller tout de suite 30/08/2012 03:03:40
 277 le lien Model syntax :
 278 https://docs.djangoproject.com/en/1.4/topics/db/models/ 30/08/2012 03:03:56
 279 c'est l'info pour comprendre comment coder les modèles... 30/08/2012 03:04:12
 280 doan.manh.ha a rejoint le salon 03:04   
 281 
 282 davin.baragiotta 30/08/2012 03:04:19
 283 ça fait environ 20 pages imprimées
 284 important de le lire un jour... 30/08/2012 03:04:27
 285 pas maintenant 30/08/2012 03:04:30
 286 à côté 30/08/2012 03:04:33
 287 Field types... 30/08/2012 03:04:38
 288 ça c'est les champs possible qu'on peut créer dans un modèle 30/08/2012 03:04:54
 289 allons y!!!! 30/08/2012 03:04:56
 290 https://docs.djangoproject.com/en/1.4/ref/models/fields/ 30/08/2012 03:05:03
 291 ok dans vos sources... vous allez copier le contenu qu'il y a sur page atelier : 30/08/2012 03:05:22
 292 
 293 from django.db import models class Etablissement(models.Model): pass # coder les champs ici class Personne(models.Model): pass # coder les champs ici 30/08/2012 03:05:46
 294 ach... avec bonne indentation 30/08/2012 03:05:54
 295 (4 espaces pour chaque indentation) 30/08/2012 03:06:20
 296 lisons ce code 30/08/2012 03:06:24
 297 en haut... l'import 30/08/2012 03:06:29
 298 ça se lit : 30/08/2012 03:06:33
 299 à partir du module "django.db"... importe moi les "models" 30/08/2012 03:06:50
 300 donc le nom "models" est maintenant accessible partout dans le script models.py 30/08/2012 03:07:05
 301 on peut donc l'utiliser 30/08/2012 03:07:10
 302 ensuite... on crée des classe Python 30/08/2012 03:07:25
 303 entre les parenthèse : models.Model 30/08/2012 03:07:34
 304 c'est la syntaxe pour l'héritage en Python 30/08/2012 03:07:48
 305 Etablissement hérite de models.Model... 30/08/2012 03:08:00
 306 doan.manh.ha a quitté la salle 03:08    
 307 
 308 davin.baragiotta 30/08/2012 03:08:25
 309 ce sera très important pour l'atelier frontend quand on parlera de l'ORM (le lien Python avec la base de données)
 310 ok 30/08/2012 03:08:27
 311 pass : en python ça veut juste rien dire... 30/08/2012 03:08:36
 312 notre boulot : 30/08/2012 03:08:43
 313 remplacer pass par du vrai code... 30/08/2012 03:08:49
 314 mais on veut coder quoi?!?!?! 30/08/2012 03:08:54
 315 et bien notre classe "représente" un Etablissement... ou une Personne 30/08/2012 03:09:14
 316 on aura une table dans notre DB pour chaque classe 30/08/2012 03:09:30
 317 là... faut définir nos colonnes de DB 30/08/2012 03:09:37
 318 nos "champs" de formulaire pour saisir un Etablissement ou une Personne... 30/08/2012 03:09:53
 319 les attributs de l'objet quoi! 30/08/2012 03:10:01
 320 ok... alors... qu'est-ce qu'on peut bien vouloir savoir d'un établissement ou d'une personne... 30/08/2012 03:10:19
 321 disons, pour commencer : leur nom! 30/08/2012 03:10:25
 322 maitenant... quel type de champ (Field type) vous utiliseriez 30/08/2012 03:10:47
 323 pour capter un nom? 30/08/2012 03:10:52
 324 allons voir la doc... 30/08/2012 03:10:56
 325 https://docs.djangoproject.com/en/1.4/ref/models/fields/ 30/08/2012 03:11:05
 326 à droite... c'est super... on voit tous les Field types possible 30/08/2012 03:11:22
 327 lisons et réfléchissons 30/08/2012 03:11:28
 328 AutoField : champ automatique... non 30/08/2012 03:11:39
 329 Integer : entier... nom 30/08/2012 03:11:45
 330 Boolean : non 30/08/2012 03:11:50
 331 CharField... ah? 30/08/2012 03:11:55
 332 lisons 30/08/2012 03:11:56
 333 https://docs.djangoproject.com/en/1.4/ref/models/fields/#charfield 30/08/2012 03:12:03
 334 a string field... excellent! 30/08/2012 03:12:14
 335 on voit que "max_lenght" est obligatoire (car pas [entre crochets] dans la signature de la classe.... mais c'est aussi écrit) 30/08/2012 03:13:01
 336 CharField <https://docs.djangoproject.com/en/1.4/ref/models/fields/#django.db.models.CharField> has one extra required argument: 30/08/2012 03:13:14
 337 required 30/08/2012 03:13:16
 338 ok... codons ça 30/08/2012 03:13:22
 339  
 340 Tri 30/08/2012 03:13:34
 341 [10:13:21] Khone: Question: dans la classe Etablissement, on va mètre seulemnt le nom et rien d'autre ? 
 342  
 343 davin.baragiotta 30/08/2012 03:13:42
 344 pour tout de suite oui...
 345 tu peux ajouter adresse si tu veux... pays... ce que tu veux 30/08/2012 03:14:03
 346 mais faut juste trouver les bons FieldTypes... 30/08/2012 03:14:12
 347 plus loin, on va lier les Etablissements et les Personnes! 30/08/2012 03:14:24
 348 30/08/2012 03:14:25
 349 foreignkey 30/08/2012 03:14:35
 350 
 351 class Etablissement(models.Model):
 352 nom = models.CharField(max_lenght=255) 30/08/2012 03:14:59
 353 ça devrait ressembler à ça, votre code... 30/08/2012 03:15:10
 354 on peut faire pareil pour Personne 30/08/2012 03:15:19
 355 (copier-coller) 30/08/2012 03:15:24
 356 wow on a 2 modèles... simples, mais quand même 30/08/2012 03:15:45
 357 
 358 from django.db import models
 359 
 360 class Etablissement(models.Model):
 361 nom = models.CharField(max_lenght=255)
 362 
 363 class Personne(models.Model):
 364 nom = models.CharField(max_lenght=255) 30/08/2012 03:15:50
 365 super... ensuite l'idée c'est qu'on veut pouvoir gérer (ajouter, modifier, supprimer) ces objets 30/08/2012 03:16:16
 366 dans l'admin! 30/08/2012 03:16:19
 367 on veut PAS coder les interfaces de gestion 30/08/2012 03:16:31
 368 et l,admin de django génère justement automatiquement les interfaces 30/08/2012 03:16:47
 369 plan de match : 30/08/2012 03:16:53
 370 https://wiki.auf.org/wikiteki/Ateliers/Django/Backend/Support 30/08/2012 03:17:05
 371 on a créé l'application 30/08/2012 03:17:09
 372 on a créé 2 modèles... 30/08/2012 03:17:14
 373 mais... 30/08/2012 03:17:15
 374 django n'est pas au courant que cette application existe... 30/08/2012 03:17:26
 375 ... faut la déclarer dans nos settings... 30/08/2012 03:17:33
 376 ouvrez settings.py 30/08/2012 03:17:40
 377 quelque part vers la fin 30/08/2012 03:18:05
 378 on a le paramètre : 30/08/2012 03:18:09
 379 INSTALLED_APPS 30/08/2012 03:18:09
 380 c'est un tuple python 30/08/2012 03:18:16
 381 on va rajouter un élément à ce tuple 30/08/2012 03:18:29
 382 'annuaire', 30/08/2012 03:18:42
 383 on ajoute, bien indenté, le nom de notre app... 30/08/2012 03:18:57
 384 
 385 INSTALLED_APPS = (
 386 'django.contrib.auth',
 387 'django.contrib.contenttypes',
 388 'django.contrib.sessions',
 389 'django.contrib.sites',
 390 'django.contrib.messages',
 391 'django.contrib.staticfiles',
 392 'annuaire',
 393 # Uncomment the next line to enable the admin:
 394 # 'django.contrib.admin',
 395 # Uncomment the next line to enable admin documentation:
 396 # 'django.contrib.admindocs',
 397 ) 30/08/2012 03:19:06
 398 ok finalement.... on y est presque... 30/08/2012 03:19:40
 399 des questions jusqu'à maintenant? 30/08/2012 03:19:46
 400  
 401 Tri 30/08/2012 03:20:07
 402 non     
 403 
 404 davin.baragiotta 30/08/2012 03:20:13
 405 super
 406 qu'est-ce qui nous manque pour gérer nos données? 30/08/2012 03:20:23
 407 les interfaces? oui... 30/08/2012 03:20:28
 408 mais aussi... la base de données... 30/08/2012 03:20:35
 409 on a juste déclaré où on la voulait... avec quelle techno 30/08/2012 03:20:47
 410 mais on l'a pas créé 30/08/2012 03:20:51
 411 or nos "objets" (instances de nos classes) vont être stockés là 30/08/2012 03:21:12
 412 là je vais parler de South 30/08/2012 03:21:28
 413 et vous dire pourquoi il nous sauve la vie... 30/08/2012 03:21:35
 414 on pourrait créer tout de suite la DB 30/08/2012 03:21:47
 415 mais 30/08/2012 03:22:01
 416 les tables de la DB doivent *suivre* les champs de models.py 30/08/2012 03:22:30
 417 quand on développe : on ajouter des trucs... on supprime notre code... 30/08/2012 03:22:44
 418 mais faut faire pareil avec la DB 30/08/2012 03:22:51
 419 oui, on pourrait faire du SQL 30/08/2012 03:22:57
 420 mais on veut pas... 30/08/2012 03:23:01
 421 on veut juste faire du Python 30/08/2012 03:23:05
 422 on pourrait faire ALTER TABLE 30/08/2012 03:23:14
 423 CREATE TABLE 30/08/2012 03:23:18
 424 etc. 30/08/2012 03:23:19
 425 mais c'est pas cool pour nous qui utilisons Python et Dajngo pour du RAD : rapid application developement 30/08/2012 03:23:40
 426 donc 30/08/2012 03:23:41
 427 il nous faut un outil 30/08/2012 03:23:45
 428 qui applique les modifications faites à nos modèles (classes)... sur les tables de la DB 30/08/2012 03:24:04
 429 du versionnage de DB, en quelque sorte! 30/08/2012 03:24:12
 430 ça s'appelle de la migration de données 30/08/2012 03:24:22
 431 South est un outil de migration de données 30/08/2012 03:24:33
 432 South est installé sur vos machines... le software est prêt à être utilisé 30/08/2012 03:25:07
 433 on va donc dire que notre projet Django veut l'utiliser.... 30/08/2012 03:25:17
 434 allons dans settings.py : 30/08/2012 03:25:23
 435 ajoutons simplement :
 436 'south', 30/08/2012 03:25:31
 437 
 438 INSTALLED_APPS = (
 439 'django.contrib.auth',
 440 'django.contrib.contenttypes',
 441 'django.contrib.sessions',
 442 'django.contrib.sites',
 443 'django.contrib.messages',
 444 'django.contrib.staticfiles',
 445 'annuaire',
 446 'south',
 447 # Uncomment the next line to enable the admin:
 448 # 'django.contrib.admin',
 449 # Uncomment the next line to enable admin documentation:
 450 # 'django.contrib.admindocs',
 451 )
 452 30/08/2012 03:26:00
 453 voilà c'est fait 30/08/2012 03:26:07
 454 ok... on va maintenant utiliser south 30/08/2012 03:26:15
 455 go :
 456 python manage.py schemamigration annuaire --initial 30/08/2012 03:26:38
 457  
 458 bosco.boukone 30/08/2012 03:27:13
 459 exit    
 460 
 461 davin.baragiotta 30/08/2012 03:27:40
 462 ok j'ai eu 2 probl :
 463 1. j'étais pas dans le répertoire racine du projet (à côté de manage.py) 30/08/2012 03:27:58
 464 2. j'ai fait erreur de syntaxe dans modèles 30/08/2012 03:28:07
 465 lenght 30/08/2012 03:28:12
 466 c'est compliqué l'anglais 30/08/2012 03:28:25
 467 
 468 from django.db import models
 469 
 470 class Etablissement(models.Model):
 471 nom = models.CharField(max_length=255)
 472 
 473 class Personne(models.Model):
 474 nom = models.CharField(max_length=255) 30/08/2012 03:28:47
 475 
 476 giotta@machina:~/projets/carto$ python manage.py schemamigration annuaire --initial
 477 Creating migrations directory at '/home/giotta/projets/carto/annuaire/migrations'...
 478 Creating __init__.py in '/home/giotta/projets/carto/annuaire/migrations'...
 479 + Added model annuaire.Etablissement
 480 + Added model annuaire.Personne
 481 Created 0001_initial.py. You can now apply this migration with: ./manage.py migrate annuaire
 482 30/08/2012 03:29:02
 483 tout le monde a ça? 30/08/2012 03:29:07
 484  
 485 Tri 30/08/2012 03:29:18
 486 [10:28:21] Khone: Question: J'ai un pb:
 487 $ python manage.py schemamigration annuaire --initial
 488 Unknown command: 'schemamigration'
 489 Type 'manage.py help' for usage.        
 490 
 491 davin.baragiotta 30/08/2012 03:29:39
 492 ajoute south dans installed_apps de settings    
 493 
 494 Tri 30/08/2012 03:29:40
 495 [10:30:09] tran.xuan.huy: non, j'ai pb
 496  
 497 davin.baragiotta 30/08/2012 03:29:43
 498 et sauvegade    
 499 
 500 Tri 30/08/2012 03:29:48
 501 [10:30:29] nguyen.le.duc.huy: meme problem de Khone     
 502 
 503 davin.baragiotta 30/08/2012 03:30:07
 504 quel est le probl de : tran.xuan.huy?   
 505 
 506 Tri 30/08/2012 03:30:25
 507 tran.xuan.huy: python manage.py schemamigration annuaire --initial
 508 Traceback (most recent call last):
 509 File "manage.py", line 4, in <module>
 510 import settings # Assumed to be in the same directory.
 511 File "/net/nfs/home/server/txhuy/carto/settings.py", line 1
 512 *# Django settings for carto project.
 513 ^
 514 SyntaxError: invalid syntax     
 515 
 516 davin.baragiotta 30/08/2012 03:31:20
 517 enlever '*' sur première ligne de settings.py
 518 ok lisons ce qu'on a fait... 30/08/2012 03:32:25
 519 la commande se lit ainsi :
 520 "fait la migration initiale du schéma des données de l'application annuaire" 30/08/2012 03:32:52
 521 la migration... c'est du code Python qui va manipuler les tables 30/08/2012 03:33:03
 522 voyons pour le fun où est la migration : 30/08/2012 03:33:12
 523 cd annuaire 30/08/2012 03:33:15
 524 ls 30/08/2012 03:33:17
 525 on a un répertoire annuaire/migrations... 30/08/2012 03:33:37
 526 avec un fichier : 001_initial.py 30/08/2012 03:33:48
 527 ok 30/08/2012 03:33:51
 528 maintenant... le code est "armé"... on va l'utiliser 30/08/2012 03:34:01
 529 on va appliquer la migration 30/08/2012 03:34:07
 530 avant... pour que south fonctionne bien (il note ce qu'il a fait dans des tables à lui) 30/08/2012 03:34:32
 531 il faut créer les tables de south 30/08/2012 03:34:37
 532 on fait de migration pour south... 30/08/2012 03:34:43
 533 on crée directement les tables... 30/08/2012 03:34:48
 534 (pas de migration car on versionne pas les tables de south : elles restent stables) 30/08/2012 03:35:03
 535 ok :
 536 python manage.py syncdb 30/08/2012 03:35:09
 537 oui 30/08/2012 03:35:25
 538 créez un admin 30/08/2012 03:35:28
 539 username : admin, pass : admin 30/08/2012 03:35:37
 540 
 541 giotta@machina:~/projets/carto$ python manage.py syncdb
 542 Syncing...
 543 Creating tables ...
 544 Creating table auth_permission
 545 Creating table auth_group_permissions
 546 Creating table auth_group
 547 Creating table auth_user_user_permissions
 548 Creating table auth_user_groups
 549 Creating table auth_user
 550 Creating table django_content_type
 551 Creating table django_session
 552 Creating table django_site
 553 Creating table south_migrationhistory
 554 
 555 You just installed Django's auth system, which means you don't have any superusers defined.
 556 Would you like to create one now? (yes/no): yes
 557 Username (leave blank to use 'giotta'): admin
 558 E-mail address: admin@admin.org
 559 Password: 
 560 Password (again): 
 561 Superuser created successfully.
 562 Installing custom SQL ...
 563 Installing indexes ...
 564 Installed 0 object(s) from 0 fixture(s)
 565 
 566 Synced:
 567 > django.contrib.auth
 568 > django.contrib.contenttypes
 569 > django.contrib.sessions
 570 > django.contrib.sites
 571 > django.contrib.messages
 572 > django.contrib.staticfiles
 573 > south
 574 
 575 Not synced (use migrations):
 576 - annuaire
 577 (use ./manage.py migrate to migrate these)
 578 30/08/2012 03:36:07
 579 syncdb = commande normale de django pour créer tables... 30/08/2012 03:36:27
 580 si on a pas south, dès qu'on modifie un modèle... faut supprimer table et recréer avec syncdb... c'est nul 30/08/2012 03:36:49
 581 syncdb crée toutes les tables nécessaires sauf celles suivies par south : d'où le message à la fin 30/08/2012 03:37:12
 582 Not synced (use migrations) 30/08/2012 03:37:23
 583 maintenant que South a ses tables pour travaille,... utilisons la migration pour annuaire... 30/08/2012 03:37:41
 584 go :
 585 python manage.py migrate annuaire 30/08/2012 03:37:56
 586 en fait... le nom de l'app est facultatif 30/08/2012 03:38:04
 587 
 588 giotta@machina:~/projets/carto$ python manage.py migrate annuaire
 589 Running migrations for annuaire:
 590 - Migrating forwards to 0001_initial.
 591 > annuaire:0001_initial
 592 - Loading initial data for annuaire.
 593 Installed 0 object(s) from 0 fixture(s)
 594 30/08/2012 03:38:25
 595 ahahaah! il a appliqué la migration codée dans 0001_initial : et elle reflète notre code actuel dans models.py! 30/08/2012 03:38:50
 596  
 597 Tri 30/08/2012 03:38:58
 598 [10:39:23] khuon.tiv: Q: Pourqoui migration pour south ?        
 599 
 600 davin.baragiotta 30/08/2012 03:38:58
 601 des questions aveant qu'on active l'admin?      
 602 davin.baragiotta j'aide dans tech... pour les autres, vous pouvez relire le plan : 03:42        
 603 
 604 davin.baragiotta 30/08/2012 03:42:48
 605 https://wiki.auf.org/wikiteki/Ateliers/Django/Backend/Support
 606 on est rendu à la partie 3 ; BACKEND 30/08/2012 03:43:00
 607 thierry.tsitoara a quitté la salle 03:46        
 608 
 609 davin.baragiotta 30/08/2012 03:46:46
 610 ok continuons...
 611 on veut maintenant gérer les données de nos modèles dans des interfaces web 30/08/2012 03:47:00
 612 on va activer l,admin de Django 30/08/2012 03:47:05
 613 c'est un plugin django 30/08/2012 03:47:43
 614 sa doc : 30/08/2012 03:47:45
 615 https://docs.djangoproject.com/en/1.4/ref/contrib/admin/ 30/08/2012 03:47:46
 616 c'est LE plus gros vendeur de django 30/08/2012 03:47:56
 617 s'agit de l,activé dans les settings.py : 30/08/2012 03:48:06
 618 INSTALLED_APPS 30/08/2012 03:48:16
 619 une ligne à décommenter 30/08/2012 03:48:35
 620 
 621 INSTALLED_APPS = (
 622 'django.contrib.auth',
 623 'django.contrib.contenttypes',
 624 'django.contrib.sessions',
 625 'django.contrib.sites',
 626 'django.contrib.messages',
 627 'django.contrib.staticfiles',
 628 'annuaire',
 629 'south',
 630 # Uncomment the next line to enable the admin:
 631 'django.contrib.admin',
 632 # Uncomment the next line to enable admin documentation:
 633 # 'django.contrib.admindocs',
 634 ) 30/08/2012 03:48:36
 635 'django.contrib.admin', 30/08/2012 03:48:42
 636 ensuite... on va modifier les urls pour que l'admin puisse gérer les URLS (requêtes HTTP) afin de créer des réponses 30/08/2012 03:49:39
 637 urls.py : 30/08/2012 03:49:44
 638 faut lire les commentaires et décommenter les trucs pour l,admin 30/08/2012 03:49:57
 639 voir la page atelier pour les lignes décommentées 30/08/2012 03:50:09
 640 carto/urls.py :
 641 from django.conf.urls import patterns, include, url
 642 
 643 # Uncomment the next two lines to enable the admin:
 644 from django.contrib import admin
 645 admin.autodiscover()
 646 
 647 urlpatterns = patterns('',
 648 # Examples:
 649 # url(r'^$', 'carto.views.home', name='home'),
 650 # url(r'^carto/', include('carto.foo.urls')),
 651 
 652 # Uncomment the admin/doc line below to enable admin documentation:
 653 # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
 654 
 655 # Uncomment the next line to enable the admin:
 656 url(r'^admin/', include(admin.site.urls)),
 657 ) 30/08/2012 03:50:51
 658 voici mon fichier complet de urls.py 30/08/2012 03:50:59
 659 maintenant... votre serveur devrait toujours rouler 30/08/2012 03:51:36
 660 si c,est pas le cas :
 661 python manage.py runserver 30/08/2012 03:51:44
 662 allez sur l'accueil pour le fun? 30/08/2012 03:51:51
 663 erreur 404... 30/08/2012 03:52:00
 664 on l,a tous? 30/08/2012 03:52:03
 665 ok, un mot rapide sur urls.py 30/08/2012 03:52:23
 666 c'est le point d'entrée de tout le projet 30/08/2012 03:52:33
 667 TOUTES les requêtes sont dispatchées par urls.py 30/08/2012 03:52:46
 668 il regarde le pattern de l'URL... et en fonction de l'URL... il fait exécuter le code responsable de répondre à cette requête 30/08/2012 03:53:15
 669 donc 30/08/2012 03:53:17
 670 si on regarde le code dans urls.py 30/08/2012 03:53:24
 671 à part les import 30/08/2012 03:53:36
 672 on n'a qu'un pattern : admin/ 30/08/2012 03:53:51
 673 le string r'' = un string raw... en Python.... 30/08/2012 03:54:09
 674 on l'utilise notamment pour les expressions régulières 30/08/2012 03:54:28
 675 ^ = début d'un pattern de regex 30/08/2012 03:54:42
 676 $ = fin 30/08/2012 03:54:45
 677 r'^admin/' se lit 30/08/2012 03:54:55
 678 toute URL qui (après le nom de domaine) commence exactement avec 'admin/' (peu importe ce qui suit... 30/08/2012 03:55:22
 679 ... doit être traité par : 30/08/2012 03:55:27
 680 include(admin.site.urls) 30/08/2012 03:55:34
 681 les autres règles d'URLs de admin... 30/08/2012 03:55:45
 682 bref 30/08/2012 03:55:47
 683 ça commence avec admin? 30/08/2012 03:55:52
 684 on passe la main à admin 30/08/2012 03:55:56
 685 maintenant... on a fait quoi? 30/08/2012 03:56:01
 686 on a appeler la page accueil du site... pas la page de l,admin 30/08/2012 03:56:12
 687 essayez avec cette URL : 30/08/2012 03:56:17
 688 http://127.0.0.1:8000/admin/ 30/08/2012 03:56:28
 689 tadaaaaaaaaaaaaaaam!!!! 30/08/2012 03:56:32
 690 utilisez les param de connexion de tout à l'heure 30/08/2012 03:56:45
 691 admin/admin 30/08/2012 03:56:47
 692 wow, on est dans l'admin! 30/08/2012 03:57:06
 693 des erreurs? 30/08/2012 03:57:14
 694  
 695 Tri 30/08/2012 03:57:38
 696 [10:58:04] Khone: ok.   
 697 
 698 davin.baragiotta 30/08/2012 03:57:41
 699 (possible qu'il faille créer les tables de l'admin avec un syncdb :
 700 python manage.py syncdb)
 701 super 30/08/2012 03:57:44
 702  
 703 Tri 30/08/2012 03:57:51
 704 [10:58:33] khuon.tiv: Pas d'erreur pour moi     
 705 
 706 davin.baragiotta 30/08/2012 03:57:53
 707 bon... on voit des trucs dans l'admin
 708 mais 30/08/2012 03:57:54
 709 rien qui ressemble à des Personnes ou des Etablissements 30/08/2012 03:58:03
 710 et je le rappelle : c'est notre but ! 30/08/2012 03:58:13
 711 gérer Personnes et Etablissements dans admin 30/08/2012 03:58:22
 712 dernière étape : enregistrer nos modèles dans l'admin 30/08/2012 03:58:43
 713 on va créer un fichier admin.py sous annuaire 30/08/2012 03:58:56
 714  
 715 Tri 30/08/2012 03:59:07
 716 [10:59:36] khuon.tiv: Q: '^admin/' n'est pas terminé par $. Pourquoi ?  
 717 
 718 davin.baragiotta 30/08/2012 03:59:09
 719 dans ce fichier, copiez le code de la page de l,atelier
 720 car si il termine avec $... tout ce qui ressemble à :
 721 admin/annuaire/personne/1/edit 30/08/2012 03:59:35
 722 ne passera pas 30/08/2012 03:59:39
 723 il ne respectera pas le pattern qui dirait "il doit commencer... et FINIR avec admin/ 30/08/2012 04:00:00
 724 voilà 30/08/2012 04:00:05
 725 créez admin.py sous annuaire 30/08/2012 04:00:11
 726 annuaire/admin.py :
 727 from django.contrib import admin from annuaire.models import * admin.site.register(Etablissement) admin.site.register(Personne) 30/08/2012 04:00:39
 728 ach... bien indenter 30/08/2012 04:00:45
 729 
 730 from django.contrib import admin
 731 from annuaire.models import *
 732 
 733 admin.site.register(Etablissement)
 734 admin.site.register(Personne) 30/08/2012 04:01:01
 735 voilà... c'est fait? 30/08/2012 04:01:08
 736 faites seulement un refresh et on en discute 30/08/2012 04:01:18
 737 ok j'ai dû relancer mon serveur pour voir une modification 30/08/2012 04:02:11
 738 (pour que admin.py soit lu par l,admin) 30/08/2012 04:02:20
 739 ehehe... voyez-vous les Etablissements et les Personnes? 30/08/2012 04:02:34
 740 créons un Etablissement 30/08/2012 04:02:43
 741 moi je crée UQAM à Montréal 30/08/2012 04:02:51
 742 (lien Add) 30/08/2012 04:02:57
 743 bon, minute... 30/08/2012 04:03:01
 744 allons mettre cet admin en français (ou vietnamien?  ) 30/08/2012 04:03:13
 745 ou lao? 30/08/2012 04:03:20
 746 ou khmer? 30/08/2012 04:03:28
 747 settings.py 30/08/2012 04:03:31
 748 LANGUAGE_CODE = 'fr-ca' 30/08/2012 04:03:46
 749 relancer serveur 30/08/2012 04:03:56
 750 (pas besoin, fallait juste sauvegarder) 30/08/2012 04:04:29
 751 bon je suis en français 30/08/2012 04:04:33
 752 et me reste 15 minutes 30/08/2012 04:04:42
 753 Ajouter un établissement 30/08/2012 04:04:47
 754 Enregistrer 30/08/2012 04:05:06
 755 ach! 30/08/2012 04:05:08
 756 erreur! 30/08/2012 04:05:11
 757 
 758 no such table: django_admin_log 30/08/2012 04:05:16
 759 me semblait bien qu'il manquait un syncdb pour les tables de l,admin.... 30/08/2012 04:05:31
 760 go :
 761 python manage.py syncdb 30/08/2012 04:05:41
 762 on voit :
 763 Creating table django_admin_log
 764 30/08/2012 04:06:04
 765 super 30/08/2012 04:06:05
 766 refresh 30/08/2012 04:06:09
 767 enregistrer 30/08/2012 04:06:27
 768 ok... maintenant vous devriez voir un horrible 30/08/2012 04:06:35
 769 "Etablissement object" 30/08/2012 04:06:43
 770 ajoutez-en un 2e... 30/08/2012 04:06:48
 771 maintenant on en voit 2.... 30/08/2012 04:07:10
 772 pas clair de savoir quoi et quoi... 30/08/2012 04:07:19
 773 on va faire une modif dans models.py 30/08/2012 04:07:32
 774 pour mieux voir les objets... 30/08/2012 04:07:47
 775 models.py : 30/08/2012 04:07:54
 776 suivez la doc sur page atelier 30/08/2012 04:08:00
 777 
 778 def __unicode__(self): return "" # coder ici la chaîne unicode désirée que l'on veut retourner 30/08/2012 04:08:35
 779 indenter 30/08/2012 04:08:37
 780 on ajoute une méthode unicode 30/08/2012 04:08:58
 781 qui va donner une représentation en string de l'objet 30/08/2012 04:09:07
 782 un peu comme un toString en Java 30/08/2012 04:09:14
 783 
 784 def __unicode__(self):
 785 return "" 30/08/2012 04:09:24
 786 le self en paramètre 30/08/2012 04:09:30
 787 représente l'objet en question 30/08/2012 04:09:37
 788 comme le "this" dans d'autres langages 30/08/2012 04:09:48
 789 donc on n'a que le champ nom pour nos objets... 30/08/2012 04:09:59
 790 on va retourner leur nom 30/08/2012 04:10:04
 791 
 792 def __unicode__(self):
 793 return self.nom 30/08/2012 04:10:14
 794 on fait pareil pour les 2 classes 30/08/2012 04:10:21
 795 on refresh notre liste d'objets dans l,admin 30/08/2012 04:10:29
 796 http://127.0.0.1:8000/admin/annuaire/etablissement/ 30/08/2012 04:11:23
 797 aaaaaaaaaaaah! on y voit clair! 30/08/2012 04:11:29
 798 ok, l'atelier tire à sa fin... des questions? 30/08/2012 04:11:41
 799 après je fais un survol de ce qu'on n'a pas couvert 30/08/2012 04:11:50
 800 questions? 30/08/2012 04:11:52
 801  
 802 Tri 30/08/2012 04:12:14
 803 pas de question!        
 804 
 805 davin.baragiotta 30/08/2012 04:12:24
 806 ben voyons... c'est clair à ce point?
 807 vous dormez? 30/08/2012 04:12:27
 808 ok... je vous dis ce qu'on n,a pas fait dans le plan : 30/08/2012 04:12:37
 809 https://wiki.auf.org/wikiteki/Ateliers/Django/Backend/Support 30/08/2012 04:12:48
 810 en huat de page... y,a le sommaire... 30/08/2012 04:13:01
 811 on a terminé 4.1 30/08/2012 04:13:07
 812 donc nous manque que 4.2 30/08/2012 04:13:13
 813 (on peut le faire si vous voulez) 30/08/2012 04:13:21
 814 mais je vous dit d'abord de quoi ça parle 30/08/2012 04:13:30
 815 là on a atteint nos objectifs : 30/08/2012 04:13:54
 816 on connait la structure d'un projet Django (même si on n'a pas utilisé le frontend) 30/08/2012 04:14:09
 817 et surtout on sait gérer des données dans l'admin 30/08/2012 04:14:16
 818 le gros du travail... c'était de la config... 30/08/2012 04:14:26
 819 mais 30/08/2012 04:14:27
 820 tran.xuan.huy a quitté la salle 04:14   
 821 
 822 davin.baragiotta 30/08/2012 04:14:44
 823 la vrais puissance d'une app = dans ses modèles
 824 si on représente bien les Etablissements... si on les décrits bien 30/08/2012 04:14:57
 825 Tri a quitté la salle 04:15     
 826 darasy.nong a quitté la salle 04:15     
 827 
 828 davin.baragiotta 30/08/2012 04:15:08
 829 alors on pourra faire plein de trucs avec nos données...
 830 prochaines étapes prévues : c'était de mettre plus de champs utiles 30/08/2012 04:15:33
 831 comme une date de naissance aux Personnes 30/08/2012 04:15:40
 832 pour ça... faut lire la doc sur les Field types de Django 30/08/2012 04:15:57
 833 on aurait découvert des DateField 30/08/2012 04:16:05
 834 finalement... des données non reliées... c'est nul 30/08/2012 04:16:27
 835 on aurait construit des relations entre nos données : 30/08/2012 04:16:37
 836 lier des Personnes aux Etablissements pour dire que ce sont des "professeurs"... 30/08/2012 04:16:54
 837 ça aussi dans Field type : ForeignKey 30/08/2012 04:17:07
 838 tout ça... c'était pour avoir de meilleur modèles dans models.py 30/08/2012 04:17:32
 839 et finalement... dans l,admin... : admin/ 30/08/2012 04:17:43
 840 Tri a rejoint le salon 04:17    
 841 
 842 davin.baragiotta 30/08/2012 04:17:59
 843 on peut faire plus de trucs que juste lister et ajouter/modifier/supprimer
 844 on peut faire de la recherche! 30/08/2012 04:18:05
 845 on peut filtrer les résultats! 30/08/2012 04:18:14
 846 tout ça... on le fait dans le fichier admin.py 30/08/2012 04:18:23
 847 en suivant la doc de l'admin : 30/08/2012 04:18:31
 848 https://docs.djangoproject.com/en/1.4/ref/contrib/admin/ 30/08/2012 04:18:40
 849 donc 30/08/2012 04:18:41
 850 tran.xuan.huy a rejoint le salon 04:19  
 851 
 852 davin.baragiotta 30/08/2012 04:19:05
 853 avec la doc pour models.py :
 854 https://docs.djangoproject.com/en/1.4/ref/models/fields/
 855 et la doc pour admin.py :
 856 https://docs.djangoproject.com/en/1.4/ref/contrib/admin/ 30/08/2012 04:19:18
 857 vous êtes les rois du pétrole! 30/08/2012 04:19:25
 858 ou du monde universitaire 30/08/2012 04:19:32
 859 voilà ce qu'il nous restait à couvrir... les 2 heures sont écoulées (on a commencé à 02h20 GMT) 30/08/2012 04:19:52
 860 des questions, remarques? 30/08/2012 04:20:00
 861 des probl? 30/08/2012 04:20:03
 862  
 863 Tri 30/08/2012 04:20:21
 864 aucun   
 865 
 866 davin.baragiotta 30/08/2012 04:20:36
 867 ok.... si ça vous intéresse : demain on peut continuer avec Frontend
 868 je vais vous fournir un projet à jour 30/08/2012 04:20:42
 869 avec des données dans carto.db 30/08/2012 04:20:50
 870  
 871 Tri 30/08/2012 04:20:56
 872 [11:21:27] khuon.tiv: Q: Problème STP   
 873 
 874 davin.baragiotta 30/08/2012 04:20:57
 875 on pourra se monter des interfaces à nous
 876 oui? 30/08/2012 04:21:03
 877  
 878 Tri 30/08/2012 04:21:25
 879 il a montre dans tech   
 880 
 881 davin.baragiotta 30/08/2012 04:21:34
 882 j'arrive        
 883 Tri a quitté la salle 04:25     
 884 Tri a rejoint le salon 04:26    
 885 
 886 davin.baragiotta 30/08/2012 04:28:45
 887 en CONCLUSION sur la page de l,atelier
 888 vous avez de l'info additionnelle sur communauté Django 30/08/2012 04:28:57
 889 shafeek.sumser a quitté la salle 04:29  
 890 
 891 davin.baragiotta 30/08/2012 04:29:10
 892 et autres notions à couvrir
 893 manage.py inspectdb, par exemple, est votre ami 30/08/2012 04:29:31


FIN ATELIER DJANGO : Architecture d'un projet et Backend (admin)


30/08/2012 04:29:48

Tri 30/08/2012 04:30:22 merci Davin!

khone-cc 30/08/2012 04:30:58 Parfait ... j'ai compris mieux mtn ..

Projet/SemaineTech/2012/Ateliers/DjangoBackendArchive (dernière édition le 2013-02-25 08:16:26 par ArnaudAmelina)