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 ..