Modifications entre les versions 1 et 2
Version 1 à la date du 2011-12-12 04:38:25
Taille: 7454
Éditeur: DavinBaragiotta
Commentaire: Premier jet : format wiki redmine, contenu Montréal-Python
Version 2 à la date du 2011-12-12 04:54:06
Taille: 5631
Éditeur: DavinBaragiotta
Commentaire: Reformet titres et affichage code
Texte supprimé. Texte ajouté.
Ligne 1: Ligne 1:
h1. Plan détaillé

h2. INTRODUCTION
= Atelier 2011-12-12 : Plan détaillé =

== INTRODUCTION ==
Ligne 26: Ligne 26:
h2. PARTIE 1 : DÉVELOPPEMENT WEB AVEC DJANGO : ARCHITECTURE D'UN PROJET

h3. Développement web

* schéma : le développement web
** rôle d'un framework web : aider à construire réponse à une requête
* développement (DEV)
* déploiement (PROD, TEST)

h3. Django

Pourquoi django vs autre framework
* all-in-one
* admin : meilleur vendeur ;)
* docs
* communauté : utilisation répandue
Ligne 62: Ligne 45:
h2. PARTIE 2 : HANDS-ON : PROJET ET APPLICATIONS

h3. Création du projet

<pre>
django-admin.py startproject liguemp
cd liguemp
</pre>

* survol des fichiers générés

<pre>
python manage.py runserver
</pre>

* settings.py
** DATABASE_*

h3. Création d'une application

<pre>
python manage.py startapp recrutement
</pre>

* survol fichiers

* recrutement/models.py
** documentation :
https://docs.djangoproject.com/en/1.3/topics/db/models/
https://docs.djangoproject.com/en/1.3/ref/models/fields/
** yeah! on code!
*** Joueur.nom
*** Equipe.nom

* settings.py
** INSTALLED_APP
*** 'recrutement'

<pre>
python manage.py syncdb
</pre>

h3. Backend : gérer les données dans l'admin

* urls.py
_activer admin : décommenter_
** import
** autodiscover
** url : admin/

* http://127.0.0.1:8000/

* settings.py
** INSTALLED_APP
*** 'django.contrib.admin'

* recrutement/admin.py
_enregistrer modèles
voir tutoriel Part 2_
https://docs.djangoproject.com/en/1.3/intro/tutorial02/

* http://127.0.0.1:8000/admin/

* recrutement/models.py
<pre>def __unicode__(self):</pre>
** Joueur.prenom

* delete liguemp.db

<pre>
python manage.py syncdb
</pre>

> fixtures
> https://docs.djangoproject.com/en/1.3/ref/django-admin/
>
> south
> http://south.aeracode.org/

* recrutement/models.py
** Joueur.equipe

h3. Frontend : présenter les données
== PARTIE 2 : HANDS-ON : PROJET ET APPLICATIONS ==

=== Frontend : présenter les données ===
Ligne 159: Ligne 62:
<pre> {{{
Ligne 162: Ligne 65:
</pre> }}}
Ligne 170: Ligne 73:
<pre> {{{
Ligne 172: Ligne 75:
</pre> }}}
Ligne 178: Ligne 81:
<pre> {{{
Ligne 180: Ligne 83:
</pre> }}}
Ligne 183: Ligne 86:
<pre> {{{
Ligne 194: Ligne 97:
</pre> }}}
Ligne 197: Ligne 100:
<pre> {{{
Ligne 199: Ligne 102:
</pre> }}}
Ligne 202: Ligne 105:
<pre> {{{
Ligne 205: Ligne 108:
</pre> }}}
Ligne 212: Ligne 115:
<pre> {{{
Ligne 215: Ligne 118:
</pre>

h2. PARTIE 3 : PROJET LIGUEMP PIMPÉ
}}}

== PARTIE 3 : PROJET LIGUEMP PIMPÉ ==
Ligne 226: Ligne 129:
h3. Héritage de templates === Héritage de templates ===
Ligne 229: Ligne 132:
<pre> {{{
Ligne 231: Ligne 134:
</pre> }}}
Ligne 234: Ligne 137:
<pre> {{{
Ligne 237: Ligne 140:
</pre>

h3. Fichiers statiques : CSS, images et js
}}}

=== Fichiers statiques : CSS, images et js ===
Ligne 250: Ligne 153:
<pre> {{{
Ligne 252: Ligne 155:
</pre> }}}
Ligne 255: Ligne 158:
<pre> {{{
Ligne 258: Ligne 161:
</pre>

h3. Connexion du user
}}}

=== Connexion du user ===
Ligne 271: Ligne 174:
<pre> {{{
Ligne 273: Ligne 176:
</pre>

h3. URL avec paramètres
}}}

=== URL avec paramètres ===
Ligne 283: Ligne 186:
h3. Refactoring du home === Refactoring du home ===
Ligne 287: Ligne 190:
h3. Admin pimpé : ModelAdmin === Admin pimpé : ModelAdmin ===
Ligne 294: Ligne 197:
<pre> {{{
Ligne 296: Ligne 199:
</pre> }}}
Ligne 298: Ligne 201:
<pre> {{{
Ligne 302: Ligne 205:
</pre> }}}
Ligne 308: Ligne 211:
h3. Charger données initiales : fixtures === Charger données initiales : fixtures ===
Ligne 314: Ligne 217:
<pre> {{{
Ligne 316: Ligne 219:
</pre> }}}
Ligne 321: Ligne 224:
<pre> {{{
Ligne 325: Ligne 228:
</pre>

h2. PARTIE 4 : HANDS-ON : CRÉER L'APPLICATION SAISON POUR LE PROJET LIGUEMP

h3. Ajouter modèle Match
}}}

== PARTIE 4 : HANDS-ON : CRÉER L'APPLICATION SAISON POUR LE PROJET LIGUEMP ==

=== Ajouter modèle Match ===
Ligne 339: Ligne 242:
h3. Autre exercice : age d'un joueur === Autre exercice : age d'un joueur ===
Ligne 345: Ligne 248:
h2. CONCLUSION : POUR CONTINUER == CONCLUSION : POUR CONTINUER ==
Ligne 369: Ligne 272:

h2. SONDAGE DE SATISFACTION

* http://www.surveymonkey.com/s/XKP2NP7

Atelier 2011-12-12 : Plan détaillé

INTRODUCTION

* Présentations ** Davin Baragiotta ** Montréal-Python (MP, sprints/hackathons, ateliers, PyCon) * Objectifs ** connaître l'architecture d'un projet : principaux fichiers ** gérer data dans backend ** présenter data dans frontend * Documentation ** doc : bonne version de django *** officielle : https://docs.djangoproject.com/en/1.3/ *** français : http://docs.django-fr.org/ ** tutoriel *** Part 1 : créer un projet, créer une app, jouer avec ORM (API) _couvert ici_ *** Part 2 : backend (admin) _couvert ici_ *** Part 3 : frontend _couvert ici, plus straightforward même ;)_ *** Part 4 : forms et vues génériques _pas couvert ici_ * Environnement technique ** Python >= 2.5 ** Django 1.3.1 *** Mac OS X : voir tutoriel Part 1 pour manip supplémentaire

Principaux fichiers * models.py * admin.py * urls.py * views.py * templates (HTML)

h3. Projet : définition du besoin

Montréal-Python a une ligue de hockey cosom _(ce n'est pas vrai)_. On veut gérer quels joueurs sont dans quelles équipes... ... et planifier les matchs de la saison.

h3. Projet : modélisation

* Joueur * Equipe * Match

PARTIE 2 : HANDS-ON : PROJET ET APPLICATIONS

Frontend : présenter les données

* recrutement/urls.py https://docs.djangoproject.com/en/1.3/topics/http/urls/ ** home

* recrutement/views.py https://docs.djangoproject.com/en/1.3/topics/http/views/ _voir tutoriel Part 3 (version shortcut)_ https://docs.djangoproject.com/en/1.3/intro/tutorial03/

* templates https://docs.djangoproject.com/en/1.3/topics/templates/ ** créer répertoire templates ** settings.py

os.path.join(os.path.dirname(__file__), "templates"),
import os

** templates/recrutement/home.html

* recrutement/views.py _passer une variable au template_

* templates/recrutement/home.html _utiliser une variable :_

{{ var }}

* recrutement/views.py _endroit où on code en logique en Python plus simple si explore interactivement..._

python manage.py shell

* ORM (API) : object relation mapping

from recrutement.models import *
equipes = Equipe.objects.all()
for e in equipes: print e
e = equipes[0]
e.joueur_set.all()
j = Joueur.objects.get(id=1)
j.id
j = Joueur.objects.get(id=314)
e.id
joueurs = Joueur.objects.filter(equipe__nom__startswith='Pyth')

* recrutement/models.py

related_name = "joueurs"

* relancer shell

e.joueurs.all()
e.joueurs.count()

* recrutement/views.py _passer les variables pertinentes pour accueil_

* templates/recrutement/home.html _boucle for dans template :_

{% for e in equipes %}
{% endfor %}

PARTIE 3 : PROJET LIGUEMP PIMPÉ

Télécharger les sources du projet pimpé : http://montrealpython.org/r/attachments/8

Extraire (_sans clash de nom avec projet en cours_)

Pimpé? Quoi de neuf?

Héritage de templates

* base.html

{% block main %}

* templates

{% extends "base.html" %}
{% block main %}

Fichiers statiques : CSS, images et js

https://docs.djangoproject.com/en/1.3/howto/static-files/

* répertoire : static ** css ** images ** js

* settings.py ** STATICFILES_DIRS

os.path.join(os.path.dirname(__file__), "static"),

* urls.py

from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns()

Connexion du user

* templates ** connexion.html ** deconnexion.html

* urls.py ** connexion ** deconnexion

* settings.py

LOGIN_REDIRECT_URL = "/"

URL avec paramètres

* pages de détail : capter l'id de l'objet ** urls.py : import des urls de l'app recrutement ** recrutement/urls.py ** recrutement/views.py ** templates/recrutement/*

Refactoring du home

* urls home dans views.py à la racine

Admin pimpé : ModelAdmin

* recrutement/admin.py

* classes JoueurAdmin, EquipeAdmin _héritent de ModelAdmin_ ** enregistrer Modele avec ModeleAdmin

admin.site.register(Joueur, JoueurAdmin)

** config ModeleAdmin

list_display
search_fields
list_filter

** plus? https://docs.djangoproject.com/en/1.3/ref/contrib/admin/ *** fields *** fieldsets

Charger données initiales : fixtures

https://docs.djangoproject.com/en/1.3/ref/django-admin/

* créer répertoire fixtures à la racine

python manage.py dumpdata > initial_data.json

* mettre initial_data.json dans fixtures

* pour récupération data :

python manage.py syncdb
no (pas créer user)
python manage.py loaddata fixtures/initial_data.json

PARTIE 4 : HANDS-ON : CRÉER L'APPLICATION SAISON POUR LE PROJET LIGUEMP

Ajouter modèle Match

* Match ** date ** lieu ** equipe1 ** equipe2 ** score1 ** score2

Autre exercice : age d'un joueur

* Joueur.date_naissance * Joueur.age() _ajouter une methode age() sur la classe Joueur utilisant la date de naissance_

CONCLUSION : POUR CONTINUER

* Autres aspects non couverts (quelques uns) ** permissions et décorateurs ** manage.py inspectdb ** manage.py test ** forms ** generic views ** templates : tags, filtres

* Mailing list Django users : http://groups.google.com/group/django-users

* Channel IRC #django : irc://irc.freenode.net/django

* Contribs, plugins https://docs.djangoproject.com/en/dev/ref/contrib/ ** south ** reversion ** Autre : pypi http://pypi.python.org/

* Enjoy!

Ateliers/2011-12-12/PlanDetail (dernière édition le 2011-12-12 08:16:05 par DavinBaragiotta)