⇤ ← Version 1 à la date du 2011-12-12 04:38:25
Taille: 7454
Commentaire: Premier jet : format wiki redmine, contenu Montréal-Python
|
Taille: 5631
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!