Django : Frontend : interfaces publiques d'un site
Sommaire
INTRODUCTION
- Objectifs
- présenter des données dans le frontend (interface publique) avec Django
- 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 : RAPPELS
- Django
- Projet carto : définition du besoin
- Projet carto : modélisation
PARTIE 2 : HANDS-ON : PROJET ET APPLICATIONS
- Repartir du projet de l'atelier Backend si fait avant
- ... sinon coder les modèles
Frontend : présenter les données
- urls.py
https://docs.djangoproject.com/en/1.3/topics/http/urls/
- home
- 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/
from django.shortcuts import render_to_response from django.template import Context, RequestContext def home(request): c = {} return render_to_response("home.html", Context(c), context_instance = RequestContext(request))
- templates
https://docs.djangoproject.com/en/1.3/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 personnes.models import * etablissements = Etablissement.objects.all() for e in etablissements: print e e = etablissements[0] e.personne_set.all() f = Personne.objects.get(id=1) f.id f = Personne.objects.get(id=314) e.id personnes = Personne.objects.filter(etablissement__nom__contains='Alexandrie')
- personnes/models.py
related_name = "personnes"
- relancer shell
e.personnes.all() e.personnes.count()
- views.py
passer les variables pertinentes pour accueil
- templates/home.html
boucle for dans template :
{% for e in etablissements %} {% endfor %}
PARTIE 3 : PROJET RÉPERTOIRE BOOSTÉ
Télécharger les sources finales du projet boosté : sources finales sources.tar.gz
- superuser dans la DB de ces sources :
- username : giotta
- password : admin
pour créer un autre superuser (le vôtre) :
python manage.py createsuperuser
Boosté? 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
MEDIA_ROOT = os.path.join(os.path.dirname(__file__), 'media') MEDIA_URL = '/media/' STATIC_ROOT = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'sitestatic') STATIC_URL = '/static/' 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 personnes
- personnes/urls.py
- personnes/views.py
- templates/personnes/*
À faire : booster Admin : ModelAdmin
- personnes/admin.py
classes EtablissementAdmin, PersonneAdmin
héritent de ModelAdmin
enregistrer Modele avec ModeleAdmin
admin.site.register(Personne, PersonneAdmin)
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 FORMATION POUR LE PROJET RÉPERTOIRE
Ajouter modèle Formation
- Formation
- nom
- date_debut
- date_fin
- etablissement
Autre exercice : durée d'une Formation
- Formation.duree()
"""Durée prévue en fonction des dates de début et de fin"""
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!