Taille: 6037
Commentaire: reformet puces et contenu
|
Taille: 6124
Commentaire: italiques et indentations
|
Texte supprimé. | Texte ajouté. |
Ligne 13: | Ligne 13: |
* Part 1 : créer un projet, créer une app, jouer avec ORM (API) ''convert en partie lors de atelier 2011-12-07'' * Part 2 : backend (admin) ''convert lors de atelier 2011-12-07'' * Part 3 : frontend _couvert ici, plus efficacement même ;)_ * Part 4 : forms et vues génériques _pas couvert ici_ |
* Part 1 : créer un projet, créer une app, jouer avec ORM (API) ''couvert en partie lors de atelier 2011-12-07'' * Part 2 : backend (admin) ''couvert lors de atelier 2011-12-07'' * Part 3 : frontend ''couvert ici, plus efficacement même ;)'' * Part 4 : forms et vues génériques ''pas couvert ici'' |
Ligne 36: | Ligne 36: |
Ligne 37: | Ligne 38: |
Ligne 50: | Ligne 52: |
Nous avions alors : | Nous avions vu alors : |
Ligne 59: | Ligne 62: |
https://docs.djangoproject.com/en/1.3/topics/http/urls/ | https://docs.djangoproject.com/en/1.1/topics/http/urls/ |
Ligne 63: | Ligne 66: |
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/ |
https://docs.djangoproject.com/en/1.1/topics/http/views/ ''voir tutoriel Part 3 (version shortcut)'' https://docs.djangoproject.com/en/1.1/intro/tutorial03/ |
Ligne 68: | Ligne 73: |
https://docs.djangoproject.com/en/1.3/topics/templates/ | https://docs.djangoproject.com/en/1.1/topics/templates/ |
Ligne 71: | Ligne 76: |
{{{ | {{{ |
Ligne 78: | Ligne 83: |
_passer une variable au template_ | ''passer une variable au template'' |
Ligne 81: | Ligne 86: |
_utiliser une variable :_ {{{ |
''utiliser une variable :'' {{{ |
Ligne 87: | Ligne 92: |
_endroit où on code en logique en Python plus simple si explore interactivement..._ {{{ |
''endroit où on code la logique en Python...'' ''...plus simple si explore interactivement'' {{{ |
Ligne 94: | Ligne 100: |
* ORM (API) : object relation mapping {{{ |
* ORM (API) : object relationnal mapping {{{ |
Ligne 109: | Ligne 115: |
{{{ | {{{ |
Ligne 114: | Ligne 120: |
{{{ | {{{ |
Ligne 120: | Ligne 126: |
_passer les variables pertinentes pour accueil_ | ''passer les variables pertinentes pour accueil'' |
Ligne 123: | Ligne 129: |
_boucle for dans template :_ {{{ |
''boucle for dans template :'' {{{ |
Ligne 141: | Ligne 147: |
{{{ | {{{ |
Ligne 146: | Ligne 152: |
{{{ | {{{ |
Ligne 162: | Ligne 168: |
{{{ | {{{ |
Ligne 167: | Ligne 173: |
{{{ | {{{ |
Ligne 183: | Ligne 189: |
{{{ | {{{ |
Ligne 204: | Ligne 210: |
_héritent de ModelAdmin_ | ''héritent de ModelAdmin'' |
Ligne 206: | Ligne 214: |
{{{ | {{{ |
Ligne 210: | Ligne 218: |
{{{ | {{{ |
Ligne 216: | Ligne 224: |
https://docs.djangoproject.com/en/1.3/ref/contrib/admin/ | https://docs.djangoproject.com/en/1.1/ref/contrib/admin/ |
Ligne 222: | Ligne 231: |
https://docs.djangoproject.com/en/1.3/ref/django-admin/ | https://docs.djangoproject.com/en/1.1/ref/django-admin/ |
Ligne 225: | Ligne 234: |
{{{ |
{{{ |
Ligne 233: | Ligne 241: |
{{{ | {{{ |
Ligne 255: | Ligne 263: |
_ajouter une methode age() sur la classe Joueur utilisant la date de naissance_ | ''ajouter une methode age() sur la classe Joueur utilisant la date de naissance'' |
Ligne 268: | Ligne 276: |
http://groups.google.com/group/django-users | http://groups.google.com/group/django-users |
Ligne 271: | Ligne 279: |
irc://irc.freenode.net/django | irc://irc.freenode.net/django |
Ligne 274: | Ligne 282: |
https://docs.djangoproject.com/en/dev/ref/contrib/ | https://docs.djangoproject.com/en/dev/ref/contrib/ |
Ligne 278: | Ligne 286: |
http://pypi.python.org/ | http://pypi.python.org/ |
Atelier 2011-12-12 : Plan détaillé
INTRODUCTION
- Objectifs
- connaître l'architecture d'un projet : principaux fichiers
- présenter data dans frontend
- Documentation
- doc : bonne version de django
officielle : https://docs.djangoproject.com/en/1.1/
français : http://docs.django-fr.org/
- tutoriel
Part 1 : créer un projet, créer une app, jouer avec ORM (API) couvert en partie lors de atelier 2011-12-07
Part 2 : backend (admin) couvert lors de atelier 2011-12-07
Part 3 : frontend couvert ici, plus efficacement même ;)
Part 4 : forms et vues génériques pas couvert ici
- doc : bonne version de django
- Environnement technique
Python >= 2.5
- Django 1.1.1
- Mac OS X : voir tutoriel Part 1 pour manip supplémentaire
PARTIE 1 : RAPPELS
Django
Principaux fichiers
- models.py
- admin.py
- urls.py
- views.py
- templates (HTML)
Projet carto : définition du besoin
L'AUF veut procéder à la cartographie de ses établissements membres.
On veut savoir quelle formation est donnée où...
... et répertorier les projets des membres.
Projet carto : modélisation
- Etablissement
- Formation
- Projet
PARTIE 2 : HANDS-ON : PROJET ET APPLICATIONS
Télécharger les sources initiales
Repartir du projet créé lors de l'atelier du 2011-12-07.
Nous avions vu alors :
- Créé le projet carto
- Créé l'application etablissements
- Créé les modèles Etablissement et Formation
- Géré dans l'admin des Etablissements et des Formations
Frontend : présenter les données
- recrutement/urls.py
https://docs.djangoproject.com/en/1.1/topics/http/urls/
- home
- recrutement/views.py
https://docs.djangoproject.com/en/1.1/topics/http/views/
voir tutoriel Part 3 (version shortcut)
- templates
https://docs.djangoproject.com/en/1.1/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 la logique en Python...
...plus simple si explore interactivement
python manage.py shell
- ORM (API) : object relationnal 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"),
- STATICFILES_DIRS
- 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.1/ref/contrib/admin/
- fields
- fieldsets
Charger données initiales : fixtures
https://docs.djangoproject.com/en/1.1/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
- Projet
- 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 :
- Channel IRC #django :
- Contribs, plugins
https://docs.djangoproject.com/en/dev/ref/contrib/
- south
- reversion
- Autre : pypi
- Enjoy!