Taille: 8820
Commentaire:
|
Taille: 8827
Commentaire:
|
Texte supprimé. | Texte ajouté. |
Ligne 115: | Ligne 115: |
* INSTALLED_APP | * {{{INSTALLED_APP}}} |
Ligne 119: | Ligne 119: |
{{{ | {{{ |
Django : Architecture d'un projet, Backend et Frontend
Sommaire
- 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
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
- doc : bonne version de django
- 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
- survol fichiers
- personnes/models.py
- documentation :
- yeah! on code!
- Personne.nom
- Etablissement.nom
class Etablissement(models.Model): nom = models.CharField(max_length=255) class Personne(models.Model): nom = models.CharField(max_length=255)
- settings.py
INSTALLED_APP
- 'personnes'
- création des tables dans DB correspondant à nos modèles
python manage.py syncdb
Backend : gérer les données dans l'admin
- urls.py
activer admin : décommenter
- import
- autodiscover
- url : admin/
- 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/
- personnes/models.py
def __unicode__(self):
- Personne.prenom
- delete bmo_repertoire.db
python manage.py syncdb
- fixtures
https://docs.djangoproject.com/en/1.3/ref/django-admin/ south
- personnes/models.py
- Personne.etablissement
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)
- 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
- etablissements/admin.py
classes EtablissementAdmin, FormationAdmin
héritent de ModelAdmin
enregistrer Modele avec ModeleAdmin
admin.site.register(Formation, FormationAdmin)
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 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
- 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!