Projet / SemaineTech / 2011 / Ateliers / Django / Conversation

Sommaire

  1. Lundi
  2. Jeudi

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

Projet/SemaineTech/2011/Ateliers/Django/Conversation (dernière édition le 2012-04-02 15:13:34 par VictorBruneau)