Lundi
1 (15:10:38) davin.baragiotta: -------------------- DEBUT : Atelier Django --------------------
2 (15:10:50) olivier.larcheveque: Bonjour!
3 (15:11:34) olivier.larcheveque: cet atelier va présenter Django, un framework qui permet de construite des applications Web
4 (15:12:38) olivier.larcheveque: il va notemment montrer comment on peut créer rapidement des interfaces web qui permettent de manipuler une base de données
5 (15:12:52) olivier.larcheveque: normalement vous disposez d'un projet fonctionnel
6 (15:12:56) olivier.larcheveque: taper
7 (15:13:03) olivier.larcheveque: bin/django runserver
8 (15:13:41) olivier.larcheveque: on voit ceci dans le terminal
9 (15:13:43) olivier.larcheveque:
10 Development server is running at http://127.0.0.1:8000/
11 Quit the server with CONTROL-C.
12
13
14 (15:14:15) olivier.larcheveque: le serveur Web est donc prêt à recevoir des requêtes par votre navigateur
15 (15:14:40) olivier.larcheveque: aller a cette adresse
16 (15:14:41) olivier.larcheveque:
17 http://127.0.0.1:8000/media/ppp/presentation.html
18 (15:15:45) olivier.larcheveque: correct jusqu'ici?
19 (15:15:45) davin.baragiotta: a priori oui : pas de commentaires
20 (15:16:00) olivier.larcheveque: diapp plan, 1 point un peu de théorie
21 (15:16:54) olivier.larcheveque: puis les points 2 et 3 ou nous allons construire une application avec des interfaces web qui permettent de manipuler une des données provenant de la base
22 (15:18:00) olivier.larcheveque: Tout ceci va permettre de construire une application Django capable de fournir des fonctionnalités de base pour un site de support (FAQ + téléchargement de fichiers ressources)
23 (15:18:31) olivier.larcheveque: diapo framework
24 (15:18:48) olivier.larcheveque: un framework, c'est tout simplement une boite à outils de code
25 (15:20:09) olivier.larcheveque: il apporte des briques logicielles de base, qui permettent de développer pas mal tout ce qu'on veut sans avoir à tout recoder
26 (15:20:25) olivier.larcheveque: diapo suivante
27 (15:20:55) olivier.larcheveque: un framework vient avec des notions de bases
28 (15:21:07) olivier.larcheveque: des bonnes pratiques disons
29 (15:21:17) olivier.larcheveque: expliquées dans cette diapo
30 (15:21:46) olivier.larcheveque: c'est le cas de Django, il suit cette séparation logique dans son code, et le code que vous allez faire
31 (15:21:57) olivier.larcheveque: diapo traitement d'une requete
32 (15:22:26) olivier.larcheveque: on va examiner ce qui se passe pour voir une page web
33 (15:23:08) olivier.larcheveque: ouvrez un autre onglet navigateur et aller ici
34 (15:23:09) olivier.larcheveque:
35 http://127.0.0.1:8000/support/faq/
36 (15:23:31) olivier.larcheveque: ouvrez parallalement un editeur de fichier
37 (15:24:09) olivier.larcheveque: le serveur recoit une requete et la transmet a Django
38 (15:24:23) olivier.larcheveque: il doit la router
39 (15:24:50) olivier.larcheveque: c'est déclaré dans le fichier project/support/urls.py
40 (15:25:28) olivier.larcheveque: on a appelé la page faq tantot, ce qui route vers la vue "faq"
41 (15:25:58) olivier.larcheveque: ensuite regardons le fichier project/support/views.py
42 (15:26:51) olivier.larcheveque: il y a la fonction faq() qui est responsable de construire la page, et fournir une réponse HTTP, en utilisant un template HTML
43 (15:27:11) olivier.larcheveque: on retrouve les templates dans project/support/templates
44 (15:27:29) olivier.larcheveque: c'est bon?
45 (15:27:44) davin.baragiotta: pas de questions à date
46 (15:28:02) olivier.larcheveque: ok on va passer direct dans l'admin ici
47 (15:28:05) olivier.larcheveque:
48 http://127.0.0.1:8000/admin/
49 (15:28:22) olivier.larcheveque: vous avez besoin du login/mdp lors de l'installation du projet
50 (15:28:43) olivier.larcheveque: on voit dans l'application support FAQ
51 (15:29:00) olivier.larcheveque: si on clique on peut aller sur une page qui liste les FAQ
52 (15:29:20) olivier.larcheveque: on peut en ajouter une nouvelle si on veut avec le bouton en haut à droite
53 (15:29:49) olivier.larcheveque: nous allons créer la meme choses pour qu'on puisse ajouter des Ressources
54 (15:30:22) olivier.larcheveque: allons dans le fichier project/support/models.py
55 (15:30:32) olivier.larcheveque: il y a un modèle à créer
56 (15:30:53) olivier.larcheveque: vous pouvez vous inspirer du modèle FAQ pour créer le votre
57 (15:31:47) olivier.larcheveque: une fois votre modèle ajusté
58 (15:31:49) olivier.larcheveque: faites
59 (15:32:04) olivier.larcheveque: bin/django reset support (YES sans crainte)
60 (15:32:21) davin.baragiotta:
61 si vous voulez voir la FAQ que vous venez d'ajouter dans l'interface admin : assurez-vous d'avoir coché le champ "public"... ensuite, vous pouvez recharger la page public (hors admin) : http://127.0.0.1:8000/support/faq/
62 (15:32:42) olivier.larcheveque: ceci a pour effet de créer les tables en BD
63 (15:33:15) olivier.larcheveque: (les chanceux avec un projet cablé sur MySQL avec un phpMyAdmin peuvent voir ca tout de suite)
64 (15:33:51) olivier.larcheveque: voici une proposition de modèle ci :
65 (15:33:53) olivier.larcheveque:
66 http://paste.pocoo.org/show/464971/
67 (15:34:36) olivier.larcheveque: 1. mettons cette classe dans le support/models.py
68 (15:34:53) olivier.larcheveque: 2. bin/django reset support pour créer la structure en BD
69 (15:35:37) olivier.larcheveque: bon, génial on a un modele on va intergarir dessus en greffant les interfaces d'admin
70 (15:35:53) olivier.larcheveque: dans le fichier project/support/admin.py
71 (15:36:40) olivier.larcheveque: il faut enregister son modele de données une une classe admin qui permet de créer les interfaces automatiquement
72 (15:37:20) olivier.larcheveque: on voit pas mal de choses pour notre modele FAQ
73 (15:37:35) olivier.larcheveque: on va faire de meme pour notre modele Ressource
74 (15:37:43) olivier.larcheveque: encore plus minimaliste!
75 (15:38:22) olivier.larcheveque: voici une possibilité a ajouter a la fin de project/support/admin.py
76 (15:38:26) olivier.larcheveque:
77 http://paste.pocoo.org/show/464974/
78 (15:39:12) davin.baragiotta: ( vous pouvez mettre 4 espaces devant "pass" pour être PEP8 ;) )
79 (15:39:19) olivier.larcheveque: finalement on peut retourner voir dans l'admin
80 (15:39:27) olivier.larcheveque:
81 http://127.0.0.1:8000/admin/
82 (15:39:54) olivier.larcheveque: Normalement, le modèle Ressources apparait dans l'application "support"
83 (15:40:48) olivier.larcheveque: Si c'est le cas, cliquez dessus pour aller a la page de liste
84 (15:41:04) olivier.larcheveque: puis ajouter une ressource (lien en haut a droite)
85 (15:41:49) davin.baragiotta: attention : notre modèle rend obligatoire les 2 champs ;)
86 (15:41:58) olivier.larcheveque: on constate que les champs, sont rendus automiquement avec les bons widgets (titre = widget input test, fichier = widget upload de fichier)
87 (15:43:31) olivier.larcheveque: C'est pas génial quand même?
88 (15:43:44) davin.baragiotta: plutôt!
89 (15:43:56) olivier.larcheveque: ca va pour vous?
90 (15:44:52) davin.baragiotta: tout marche on dirait bien!
91 (15:44:57) davin.baragiotta: les gens sont en feu! ;)
92 (15:45:00) olivier.larcheveque: moi je continue pas sans réponse, j'ai le temps dans mon atelier, c'est un atelier Django on fait les trucs tellement vite!
93 (15:45:31) olivier.larcheveque: ok bon on voit dans la liste des objets ressources
94 (15:45:31) davin.baragiotta: réponse : ça roule!, continuons!
95 (15:45:35) olivier.larcheveque:
96 http://127.0.0.1:8000/admin/support/ressource/
97 (15:46:01) olivier.larcheveque: une ligne "ressource object" qui correspond à ce qu'on vient d'ajouter
98 (15:46:24) olivier.larcheveque: on va arranger ca pour afficher le titre de la ressource qu'on a rempli
99 (15:46:38) olivier.larcheveque: retourner dans le fichier support/admin.py
100 (15:48:08) olivier.larcheveque: et on ajoute une variable dans la classe nommée list_display
101 (15:48:18) olivier.larcheveque: qui est une liste
102 (15:48:27) olivier.larcheveque: ou on spécifie le champs à afficher
103 (15:48:32) olivier.larcheveque: ce qui donne :
104 (15:48:34) olivier.larcheveque:
105 http://paste.pocoo.org/show/466464/
106 (15:48:47) olivier.larcheveque: (ligne 3)
107 (15:49:05) olivier.larcheveque: retourner voir le changement
108 (15:49:06) olivier.larcheveque:
109 http://127.0.0.1:8000/admin/support/ressource/
110 (15:51:16) olivier.larcheveque: Tout ceci permet d'avoir un beau petit backend
111 (15:52:05) olivier.larcheveque: Le framework Django permet ensuite d'exploiter nos données pour les proposer dans un portail, comme je vous ai montré au départ
112 (15:53:11) olivier.larcheveque: Il propose des modules intéressants comme l'ORM qui permet de manipuler la BD à travers des objets Python
113 (15:53:55) olivier.larcheveque: ou encore des modules qui permettent de générer des formulaires automatiquement en se reposant sur un modèle de données particulier
114 (15:54:05) olivier.larcheveque: (comme dans l'admin!)
115 (15:55:12) olivier.larcheveque: Des questions?
116 (15:55:49) davin.baragiotta:
117 (10:51:04) davin.baragiotta: QUESTION : pourquoi je ne vois pas ma ressource s'afficher dans la partie publique du site?
118 (10:51:23) davin.baragiotta: http://127.0.0.1:8000/support/docs/
119 (10:54:29) olivier.larcheveque: Parce qu'on ne l'a pas codé ;)
120 (15:56:27) olivier.larcheveque: ok bon je pense qu'on peut essayer de faire la vue
121 (15:56:43) olivier.larcheveque: on s'attaque au fichier support/views.py
122 (15:57:04) olivier.larcheveque: la fonction docs est deja prete!
123 (15:57:14) olivier.larcheveque: avec un TODO!
124 (15:57:43) olivier.larcheveque: il s'agit de récupérer les Ressources et les ajouter au dictionnaire data
125 (15:57:56) olivier.larcheveque: regarder la fonction faq() pour vous inspirer
126 (15:58:26) olivier.larcheveque: en haut on a un from models import FAQ
127 (15:58:38) olivier.larcheveque: importons aussi notre model Ressource
128 (15:58:43) davin.baragiotta: on va donc coder pour quoi voit la liste des ressources dans site public (frontend)?
129 (15:58:51) olivier.larcheveque: from models import FAQ, Ressource
130 (15:59:17) olivier.larcheveque: oui on est parti pour faire une vue qui liste les ressources dans le site public!
131 (16:00:11) davin.baragiotta: hourra!
132 (16:00:25) olivier.larcheveque:
133 def docs(request):
134 """
135 Page qui liste les ressources.
136 """
137 data = {
138 'ressources' : Ressource.objects.all(),
139 }
140 return render_to_response('support/docs.html', data, RequestContext(request))
141 (16:01:03) olivier.larcheveque: voyez la manière de récupérer l'ensemble des ressources
142 (16:01:13) olivier.larcheveque: Ressource.objects.all()
143 (16:02:12) davin.baragiotta: en une ligne seulement? ouah!
144 (16:02:16) olivier.larcheveque: rendons-nous maintenant dans la template pour faire afficher ces ressources
145 (16:02:40) olivier.larcheveque: project/support/templates/support/docs.html
146 (16:03:35) olivier.larcheveque: on va itérer sur les objets ressources préparés dans la view
147 (16:04:26) olivier.larcheveque: coller cette petite portion apres le titre
148 (16:04:34) olivier.larcheveque:
149 {% for res in ressources %}
150 <p>{{ res.titre }}</p>
151 {% endfor %}
152 (16:05:24) olivier.larcheveque: ce langage dans la template est un langage spécial (minimaliste)
153 (16:05:29) olivier.larcheveque: une boucle for
154 (16:05:49) olivier.larcheveque: {{ }} pour afficher la valeur d'un objet
155 (16:06:15) olivier.larcheveque:
156 si il n'y a pas d'erreurs, on retourne http://127.0.0.1:8000/support/docs/
157 (16:06:37) olivier.larcheveque: et on devrait voir le titre des ressources s'affichier
158 (16:06:58) olivier.larcheveque: (on peut imaginer ajouter le lien pour télécharger le fichier)
159 (16:07:22) olivier.larcheveque: Et voilà ca fait 1H ;)
160 (16:07:23) davin.baragiotta:
161 QUESTION : (11:07:07) thierry.tsitoara: QUESTION: Apres import FAQ, Ressource on fait quoi deja . Je sais pas si je suis perdu :-)
162 (16:07:44) davin.baragiotta:
163 thierry : faut coder le corps de la focntion
164 (16:07:52) davin.baragiotta:
165
166 def docs(request):
167 """
168 Page qui liste les ressources.
169 """
170 data = {
171 'ressources' : Ressource.objects.all(),
172 }
173 return render_to_response('support/docs.html', data, RequestContext(request))
174 (16:07:59) davin.baragiotta: en fait cette fonction existait déjà
175 (16:08:03) davin.baragiotta: manquait que la ligne :
176 (16:08:10) davin.baragiotta: 'ressources' : Ressource.objects.all(),
177 (16:08:20) davin.baragiotta: dans la variable (dictionnaire) "data"
178 (16:08:54) davin.baragiotta: la views prépare les variables qu'on utilisera dans template (notre gabarit HTML)
179 (16:09:34) davin.baragiotta: dans la variables nommées "ressources" on dit à Django d'aller chercher tous les objets de notre classe Ressource
180 (16:09:55) davin.baragiotta: (Django va chercher l'info dans notre base de données)
181 (16:10:31) davin.baragiotta: donc, après, faut coder le template pour utiliser la variable "ressources"
182 (16:10:51) davin.baragiotta: on l'utilise en itération (avec "for") sur tous les objets récupérer de la base de données
183 (16:12:00) olivier.larcheveque: Je vais commiter les solutions de l'Atelier dans une branche solutions
184 (16:12:16) davin.baragiotta:
185 QUESTION :
186 (11:11:42) willy.manga: QUESTION : en suivant un peu le tuto officiel, on propose plusieurs façons d'obtenir des vues. as-tu une préférence ? là tu as utiliser render_to_response de django.shortcuts pourquoi ?
187 (16:13:29) olivier.larcheveque: la plupart du temps, ton but c'est de mapper des données dans un template (HTML)
188 (16:14:49) olivier.larcheveque: En gros ca t'évite d'instancier uen classe Template, de le render avec les données, s'instancier une réponse HTTP et de fournir ton template renderé...
189 (16:15:19) davin.baragiotta: donc render_to_response nous convient dans la plupart des cas, pour les autres cas, voir la doc?
190 (16:15:56) davin.baragiotta:
191 (11:13:36) progfou: REMARQUE : quand la page à afficher ne réclame pas de traitement complexe, on peut aussi réutiliser les vues génériques de Django : https://docs.djangoproject.com/en/1.2/ref/generic-views/#simple-generic-views
192 (16:16:03) davin.baragiotta:
193 (11:15:18) thierry.tsitoara: QUESTION: Le templates que tu es en train de parler, est ce les fichiers html dans /support/templates/support ?
194 (16:16:31) olivier.larcheveque: exact thierry
195 (16:16:38) davin.baragiotta: oui les templates vivent dans /templates
196 (16:16:47) olivier.larcheveque: celle de notre exemple c'est docs.html
197 (16:17:07) davin.baragiotta: c'est cette ligne qui donne le nom du template :
198 (16:17:08) davin.baragiotta: return render_to_response('support/docs.html', data, RequestContext(request))
199 (16:18:09) davin.baragiotta: en gros ça se lit : construit moi la réponse HTTP à partir de ce template suppoert/docs.html pour lequel je te fournit les variables dans data (en plus du contexte)
200 (16:21:16) olivier.larcheveque: Je viens de vous mettre les exemples que vous avez ajoutés dans le code, dans une branche solutions ;)
201 (16:23:07) davin.baragiotta: --------------------------------- FIN : Atelier Django ---------------------------------
Jeudi
1 (14:07:42) olivier.larcheveque: les personnes qui vont suivre l'atelier Django peuvent se manifester?
2 (14:11:34) olivier.larcheveque: Bonjour, on va commencer
3 (14:11:55) davin.baragiotta: ---------- DÉBUT : Atelier : Django ----------------
4 (14:12:03) olivier.larcheveque: Bonjour
5 (14:12:08) olivier.larcheveque: le but de cet atelier :
6 (14:12:21) olivier.larcheveque: comprendre un framework MVC
7 (14:12:30) olivier.larcheveque: susciter l'intérêt de Django ;)
8 (14:12:41) olivier.larcheveque: jeter les bases pour comprendre Django
9 (14:12:59) olivier.larcheveque: Ok lancer le serveur Web de Dango
10 (14:13:04) olivier.larcheveque: bin/django runserver
11 (14:13:18) olivier.larcheveque:
12 http://127.0.0.1:8000/media/ppp/presentation.html
13 (14:13:40) olivier.larcheveque: utiliser les flèches pour changer de page
14 (14:13:48) olivier.larcheveque: le plan
15 (14:13:57) olivier.larcheveque: une partie théorique expéditive
16 (14:14:37) olivier.larcheveque: et la pratique où nous allons construire une application Django d'aide en ligne avec une partie FAQ et documents en ligne
17 (14:15:03) olivier.larcheveque: FRAMEWORK :
18 (14:15:11) olivier.larcheveque: un framework, c'est tout simplement une boite à outils de code
19 (14:15:16) olivier.larcheveque: il apporte des briques logicielles de base, qui permettent de développer pas mal tout ce qu'on veut sans avoir à tout recoder
20 (14:15:27) olivier.larcheveque: un framework vient avec des notions de bases
21 (14:15:50) olivier.larcheveque: c'est ce que j'explique dans la diapo MVC
22 (14:16:10) olivier.larcheveque: je vous laisse lire une minute
23 (14:16:47) olivier.larcheveque: ce sont des concepts classiques qu'on retrouve bien sûr dans Django
24 (14:17:10) olivier.larcheveque: voyons maintenant ce qui se passe lorsqu'une requete est faite
25 (14:17:17) olivier.larcheveque: diapo suivante
26 (14:17:42) olivier.larcheveque:
27 http://127.0.0.1:8000/support/faq (http://127.0.0.1:8000/support/faq/)
28 (14:17:55) olivier.larcheveque: nous observons une page web
29 (14:18:01) olivier.larcheveque: que se passe-t-il?
30 (14:18:14) olivier.larcheveque: le serveur web recoit une requete et la transmet a Django
31 (14:18:19) olivier.larcheveque: il doit la router
32 (14:18:26) olivier.larcheveque: c'est déclaré dans le fichier project/support/urls.py
33 (14:18:55) olivier.larcheveque: (garder sous le code le projet ou vous avez fait le git clone, on va explorer le code en meme temps)
34 (14:19:07) olivier.larcheveque: on a appelé la page faq tantôt, ce qui route vers la vue "faq"
35 (14:19:18) olivier.larcheveque: ensuite regardons le fichier project/support/views.py
36 (14:19:36) olivier.larcheveque: il y a la fonction faq() qui est responsable de construire la page, et fournir une réponse HTTP, en utilisant un template HTML
37 (14:19:47) olivier.larcheveque: on retrouve les templates dans project/support/templates/support
38 (14:20:19) olivier.larcheveque: est-ce que ça va?
39 (14:21:11) olivier.larcheveque: le principe de découplage est important, est-ce qu'en voyant le code de l'application support ça se comprends bien?
40 (14:22:40) davin.baragiotta: pas de questions pour l'instant
41 (14:22:49) olivier.larcheveque: ok je continue
42 (14:23:05) olivier.larcheveque: votre serveur est toujours lancé
43 (14:23:10) olivier.larcheveque: regardons la page
44 (14:23:11) olivier.larcheveque:
45 http://127.0.0.1:8000/admin/
46 (14:23:32) olivier.larcheveque: (utilisez les accès créés au moment du pré-requis)
47 (14:23:38) olivier.larcheveque: on voit dans l'application support FAQ
48 (14:23:43) olivier.larcheveque: si on clique on peut aller sur une page qui liste les FAQ
49 (14:23:47) olivier.larcheveque: on peut en ajouter une nouvelle si on veut avec le bouton en haut à droite
50 (14:24:21) olivier.larcheveque: nous allons créer la même choses pour qu'on puisse ajouter des Ressources
51 (14:25:01) olivier.larcheveque: une ressource est un document (fichier accompagné d'un titre selon moi)
52 (14:25:07) olivier.larcheveque: allons dans le fichier project/support/models.py
53 (14:25:16) olivier.larcheveque: il y a un modèle à créer
54 (14:25:21) olivier.larcheveque: vous pouvez vous inspirer du modèle FAQ pour créer le votre
55 (14:25:25) olivier.larcheveque: une fois votre modèle ajusté
56 (14:25:31) olivier.larcheveque: faites
57 (14:25:35) olivier.larcheveque: bin/django reset support (YES sans crainte)
58 (14:25:59) olivier.larcheveque: ceci a pour effet de créer les tables en BD
59 (14:26:40) olivier.larcheveque: (il se peut que vous ayez fait une erreur, pas de stress, la console va vous le dire...)
60 (14:27:16) olivier.larcheveque: (en cas d'erreur il faut relancer le serveur, tant que l'erreur est présente elle il ne se redémarre pas)
61 (14:28:02) olivier.larcheveque: Je vous laisse quelques minutes pour faire le modèle
62 (14:28:09) olivier.larcheveque: j'apporte une solution à la fin
63 (14:30:26) olivier.larcheveque: REMARQUE : si vous avez généré les tables en DB, puis remodifié le modèle par la suite
64 (14:30:45) olivier.larcheveque: il est nécessaire de regénérer les tables
65 (14:31:02) davin.baragiotta: QUESTION : comment, avec quelle commande déjà?
66 (14:31:12) olivier.larcheveque: bin/django reset support
67 (14:33:04) olivier.larcheveque: c'est ok pour le modèle support?
68 (14:33:24) olivier.larcheveque: voici une solution
69 (14:33:26) olivier.larcheveque:
70 http://paste.pocoo.org/show/464971/
71 (14:34:19) olivier.larcheveque: bin/django reset support si vous utiliser cet exemple!
72 (14:34:44) olivier.larcheveque: bon maintenant nous allons rendre ce modèle de données disponible dans l'interface admin
73 (14:34:57) olivier.larcheveque: dans le fichier project/support/admin.py
74 (14:35:27) olivier.larcheveque: c'est ici qu'on crée une classe Admin couplé à notre modèle de donnnées
75 (14:36:05) olivier.larcheveque: la classe Admin fournit une multitude de possibilité pour spécifier le comportements des interfaces
76 (14:36:24) olivier.larcheveque: nous on va faire ca simple ;)
77 (14:37:03) olivier.larcheveque: suivez le TODO que j'ai mis dans ce fichier
78 (14:37:07) olivier.larcheveque: (admin.py)
79 (14:37:28) davin.baragiotta: semainetech_django/project/support/admin.py
80 (14:38:13) olivier.larcheveque: NOTE : regarder bien la derniere ligne du fichier
81 (14:38:31) olivier.larcheveque: elle permet de lier le modèle de données à son Admin
82 (14:38:52) davin.baragiotta: QUESTION : admin.site.register(FAQ, FAQAdmin) ?
83 (14:39:33) olivier.larcheveque: la classe d'admin est indépendante d'un modèle
84 (14:40:18) olivier.larcheveque: on pourrait imaginer décrire une même classe Admin pour gérer des FAQ et des Ressources par exemple
85 (14:40:40) olivier.larcheveque: c'est pour celà qu'il faut spécifier ce couplage
86 (14:41:47) olivier.larcheveque: La classe Admin est utilisée pour générée la construction automatique des pages d'édition, création, suppression, liste
87 (14:42:38) olivier.larcheveque: voici une solution (non PEP8 compliant...)
88 (14:42:40) olivier.larcheveque:
89 http://paste.pocoo.org/show/464974/
90 (14:43:04) olivier.larcheveque: à ajouter a la fin de project/support/admin.py
91 (14:43:17) olivier.larcheveque: retourner explorer :
92 (14:43:18) olivier.larcheveque:
93 http://127.0.0.1:8000/admin/
94 (14:43:23) olivier.larcheveque: Normalement, le modèle Ressources apparait dans l'application "support"
95 (14:43:29) olivier.larcheveque: Si c'est le cas, cliquez dessus pour aller a la page de liste
96 (14:43:33) olivier.larcheveque: puis ajouter une ressource (lien en haut a droite)
97 (14:43:45) olivier.larcheveque: on constate que les champs, sont rendus automiquement avec les bons widgets (titre = widget input test, fichier = widget upload de fichier)
98 (14:44:28) olivier.larcheveque: nous allons améliorer notre admin maintenant
99 (14:44:53) olivier.larcheveque: retourner dans le fichier support/admin.py
100 (14:45:15) olivier.larcheveque: et on ajoute une variable dans la classe nommée "list_display"
101 (14:45:34) olivier.larcheveque:
102 http://paste.pocoo.org/show/466464/
103 (14:46:08) olivier.larcheveque: voyez la différence par rapport a tantot
104 (14:46:33) olivier.larcheveque:
105 http://127.0.0.1:8000/admin/support/ressource/
106 (14:46:58) olivier.larcheveque: la liste fait apparaitre la colonne titre à présent
107 (14:47:42) olivier.larcheveque: la nous venons de voir le backend, l'admin Django en d'autres termes, pour créer le contenu
108 (14:48:00) olivier.larcheveque:
109 http://127.0.0.1:8000
110 (14:48:19) olivier.larcheveque: ici c'est le frontend, ou portail, ou pleins d'autres noms
111 (14:48:34) olivier.larcheveque: on cherche à présenter l'information
112 (14:49:12) olivier.larcheveque: on peut soit continuer sur le backend, ou explorer le frontend?
113 (14:49:25) olivier.larcheveque: qu'est-ce que vous préférez?
114 (14:49:41) olivier.larcheveque: (sachant que la fois passée j'ai parlé du frontend)
115 (14:50:46) davin.baragiotta:
116 chanesakhone.chitsaya: QUESTION: est-ce qu'on peut afficher tous les 2 deux (Titre et Ressource Object)??
117 (14:51:07) olivier.larcheveque: bon t'as question oriente ma question
118 (14:51:10) olivier.larcheveque: ;)
119 (14:51:55) olivier.larcheveque: nous allons dans la vue de la liste des ressources ajouter une autre colonne pour télécharger le fichier
120 (14:52:08) olivier.larcheveque: (la réponse est oui donc)
121 (14:52:30) olivier.larcheveque: retournons dans support/admin.py
122 (14:52:46) olivier.larcheveque: dans la variable list_display = ('titre', )
123 (14:53:03) olivier.larcheveque: on va faire list_display = ('titre', '_download', )
124 (14:53:26) olivier.larcheveque: _download n'est pas une propriété du modèle
125 (14:53:49) olivier.larcheveque: il va permettre de définir une méthode responsable d'afficher une donnée dans une colonne
126 (14:54:08) olivier.larcheveque: c'est le meme principe que dans la classe FAQAdmin
127 (14:54:17) olivier.larcheveque: pour _todo
128 (14:54:36) davin.baragiotta:
129 giotta: QUESTION : pourquoi '_download' si mon champ dans mon modèle s'appelle 'fichier' en suivant l'exemple de :
130 http://paste.pocoo.org/show/464971/
131 (14:54:54) olivier.larcheveque: bonne question
132 (14:55:18) olivier.larcheveque: modifie ton admin.py avec ca : list_display = ('titre', 'fichier', )
133 (14:55:27) olivier.larcheveque: regarde le résultat
134 (14:59:47) olivier.larcheveque: il affiche le path du fichier normalement
135 (15:00:12) olivier.larcheveque: mais ce qui serait bien, c'est un lien pour le télécharger
136 (15:01:42) olivier.larcheveque: ok ca va?
137 (15:01:53) davin.baragiotta: oui, pas de question
138 (15:02:18) olivier.larcheveque: bon alors je vais vous donner le code de l'admin pour vous montrer le résultat
139 (15:05:09) davin.baragiotta: REMARQUE : olivier.larcheveque code la fonction _download qui nous permettra de fournir un lien (au lieu d'afficher le path) dans la liste des objets ressources dans l'interface admin de Django
140 (15:07:06) olivier.larcheveque: hopla
141 (15:07:27) olivier.larcheveque: ;) désolé du blanc, peut-être vous avez été plus rapide que moi!
142 (15:07:29) olivier.larcheveque:
143 http://paste.pocoo.org/show/468369/
144 (15:08:16) olivier.larcheveque: ca conclut cet atelier
145 (15:08:43) olivier.larcheveque: pour la création du frontend, je vous invite à consulter l'archive du premier atelier
146 (15:09:26) olivier.larcheveque: (Début du prochain atelier dans 5min)
147 (15:09:26) semainetech@reunion.auf.org: willy a changé le sujet en : ☞ Le salon de la Semaine Tech ☜ Atelier "AUFBook" https://wiki.auf.org/wikiteki/Projet/SemaineTech/Ateliers/AufBook
148 (15:10:51) davin.baragiotta: ---------- FIN : Atelier : Django ----------------