Modifications entre les versions 3 et 11 (s'étendant sur 8 versions)
Version 3 à la date du 2012-02-24 21:28:29
Taille: 8249
Éditeur: DavinBaragiotta
Commentaire: ajout et reformattage (de redmine Montréal-Python) des premières parties : admin
Version 11 à la date du 2012-02-24 22:23:27
Taille: 8826
Éditeur: DavinBaragiotta
Commentaire:
Texte supprimé. Texte ajouté.
Ligne 1: Ligne 1:
= Django : Architecture d'un projet, Backend (admin) et Frontend (interfaces publiques d'un site) = = Django : Architecture d'un projet, Backend et Frontend =
Ligne 18: Ligne 18:
   * 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_
   * 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''
Ligne 54: Ligne 54:
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.
La Direction de l'AUF souhaite pouvoir créer un répertoire des établissements du BMO.

(Ce n'est pas encore vrai pour le BMO mais des projets ananologues sont en cours dans d'autres régions : BECO, BAO, BAP...).

On veut gérer :
 * quels professeurs sont dans quels établissements
 * quelles formations donnent nos établissements membres
 * quels laboratoires de recherche sont dans nos établissements membres
Ligne 60: Ligne 65:
 * Joueur
 * Equipe
 * Match
 * Personne
 * Etablissement
 * Formation
 * Laboratoire
Ligne 70: Ligne 76:
Le projet se nomme "Répertoire du BMO".
Ligne 71: Ligne 78:
django-admin.py startproject liguemp
cd liguemp
django-admin.py startproject bmo_repertoire
cd bmo_repertoire
Ligne 82: Ligne 89:
  * DATABASE_*   * {{{DATABASES}}}
Ligne 87: Ligne 94:
python manage.py startapp recrutement python manage.py startapp personnes
Ligne 92: Ligne 99:
 * recrutement/models.py  * personnes/models.py
Ligne 94: Ligne 101:
https://docs.djangoproject.com/en/1.3/topics/db/models/
https://docs.djangoproject.com/en/1.3/ref/models/fields/
  * https://docs.djangoproject.com/en/1.3/topics/db/models/
  * https://docs.djangoproject.com/en/1.3/ref/models/fields/
Ligne 97: Ligne 104:
  * Joueur.nom
  * Equipe.nom
  * Personne.nom
  * Etablissement.nom
 {{{
class Etablissement(models.Model):
    nom = models.CharField(max_length=255)

class Personne(models.Model):
    nom = models.CharField(max_length=255)
}}}
Ligne 101: Ligne 115:
  * INSTALLED_APP
   * 'recrutement'
  * {{{INSTALLED_APP}}}
   * 'personnes'

 * création des tables dans DB correspondant à nos modèles
Ligne 119: Ligne 134:
  * INSTALLED_APP   * {{{INSTALLED_APP}}}
Ligne 122: Ligne 137:
 * recrutement/admin.py  * personnes/admin.py
Ligne 129: Ligne 144:
 * recrutement/models.py  * personnes/models.py
Ligne 131: Ligne 146:
  * Joueur.prenom

 * delete liguemp.db
  * Personne.prenom

 * delete bmo_repertoire.db
Ligne 145: Ligne 160:
 * recrutement/models.py
  * Joueur.equipe
 * personnes/models.py
  * Personne.etablissement

Django : Architecture d'un projet, Backend et Frontend


INTRODUCTION

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


PARTIE 1 : DÉVELOPPEMENT WEB AVEC DJANGO : ARCHITECTURE D'UN PROJET

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)

Django

Pourquoi django vs autre framework

  • all-in-one
  • admin : meilleur vendeur ;)

  • docs
  • communauté : utilisation répandue

Principaux fichiers

  • models.py
  • admin.py
  • urls.py
  • views.py
  • templates (HTML)

Projet : définition du besoin

La Direction de l'AUF souhaite pouvoir créer un répertoire des établissements du BMO.

(Ce n'est pas encore vrai pour le BMO mais des projets ananologues sont en cours dans d'autres régions : BECO, BAO, BAP...).

On veut gérer :

  • quels professeurs sont dans quels établissements
  • quelles formations donnent nos établissements membres
  • quels laboratoires de recherche sont dans nos établissements membres

Projet : modélisation

  • Personne
  • Etablissement
  • Formation
  • Laboratoire


PARTIE 2 : HANDS-ON : PROJET ET APPLICATIONS

Création du projet

Le projet se nomme "Répertoire du BMO".

django-admin.py startproject bmo_repertoire
cd bmo_repertoire
  • survol des fichiers générés

python manage.py runserver
  • settings.py
    • DATABASES

Création d'une application

python manage.py startapp personnes

python manage.py syncdb

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'
  • personnes/admin.py

    enregistrer modèles

voir tutoriel Part 2 https://docs.djangoproject.com/en/1.3/intro/tutorial02/

def __unicode__(self):

  • Personne.prenom
  • delete bmo_repertoire.db

python manage.py syncdb


PARTIE 3 : HANDS-ON : PROJET ET APPLICATIONS

Repartir des sources initiales

Repartir du projet créé lors de l'atelier du 2011-12-07 : sources initiales sources.tar.gz

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

  • urls.py

    https://docs.djangoproject.com/en/1.1/topics/http/urls/

    • home
  • views.py

    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/

  • templates

    https://docs.djangoproject.com/en/1.1/topics/templates/

    • créer répertoire templates
    • settings.py
      import os
      TEMPLATE_DIRS = (
          # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
          # Always use forward slashes, even on Windows.
          # Don't forget to use absolute paths, not relative paths.
          os.path.join(os.path.dirname(__file__), "templates"),
      )
    • templates/home.html
  • views.py

    passer une variable au template

  • templates/home.html

    utiliser une variable :

    {{ var }}
  • 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 etablissements.models import *
    etablissements = Etablissement.objects.all()
    for e in etablissements: print e
    e = etablissements[0]
    e.formation_set.all()
    f = Formation.objects.get(id=1)
    f.id
    f = Formation.objects.get(id=314)
    e.id
    formations = Formation.objects.filter(etablissement__nom__contains='Hanoi')
  • etablissements/models.py
    related_name = "formations"
  • relancer shell
    e.formations.all()
    e.formations.count()
  • views.py

    passer les variables pertinentes pour accueil

  • templates/home.html

    boucle for dans template :

    {% for e in etablissements %}
    {% endfor %}

PARTIE 4 : PROJET CARTO PIMPÉ

Télécharger les sources finales du projet pimpé : sources finales sources.tar.gz

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.1/howto/static-files/

  • répertoire : static
    • css
    • images
    • js
  • settings.py
    MEDIA_ROOT = os.path.join(os.path.dirname(__file__), 'media')
    MEDIA_URL = '/static/'
  • urls.py
    from django.conf import settings
    if settings.DEBUG:
        urlpatterns += patterns('',
            (r'^static/(?P<path>.*)$', 'django.views.static.serve',
             {'document_root': settings.MEDIA_ROOT}),
        )

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 etablissements
    • etablissements/urls.py
    • etablissements/views.py
    • templates/etablissements/*

Admin pimpé : ModelAdmin

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 5 : HANDS-ON : CRÉER L'APPLICATION PROJET POUR LE PROJET CARTO

Ajouter modèle Projet

  • Projet
    • nom
    • date_debut
    • date_fin
    • etablissements

Autre exercice : durée d'un Projet et avancement d'un Projet

  • Projet.duree()
    """Durée prévue en fonction des dates de début et de fin"""
  • Projet.avancement()
    """Durée réelle à partir de la date de début jusqu'à maintenant."""

CONCLUSION : POUR CONTINUER

Ateliers/2012-02-25/Plan (dernière édition le 2012-02-26 10:19:03 par DavinBaragiotta)