formation django - bde.enseeiht.fr · présentation notre premier projet exercice final formation...
TRANSCRIPT
![Page 1: Formation Django - bde.enseeiht.fr · Présentation Notre premier projet Exercice final Formation Django Maxime Arthaud basé sur les slides de V. Angladon et V. Duvert Jeudi 7 novembre](https://reader036.vdocuments.mx/reader036/viewer/2022062413/5bf06d8709d3f2803f8c682a/html5/thumbnails/1.jpg)
PrésentationNotre premier projet
Exercice final
Formation Django
Maxime Arthaudbasé sur les slides de V. Angladon et V. Duvert
Jeudi 7 novembre 2013
http://www.bde.enseeiht.fr/clubs/net7/supportFormations/django/2013
Formation Django
Formation Django
Maxime Arthaudbasé sur les slides de V. Angladon et V. Duvert
Jeudi 7 novembre 2013
http://www.bde.enseeiht.fr/clubs/net7/supportFormations/django/2013
2013
-11-
07
Formation Django
![Page 2: Formation Django - bde.enseeiht.fr · Présentation Notre premier projet Exercice final Formation Django Maxime Arthaud basé sur les slides de V. Angladon et V. Duvert Jeudi 7 novembre](https://reader036.vdocuments.mx/reader036/viewer/2022062413/5bf06d8709d3f2803f8c682a/html5/thumbnails/2.jpg)
PrésentationNotre premier projet
Exercice final
Django ?
Un frameworkGestion des requêtes et des URLInterface vers une base de donnéesFormulairesAuthentification des utilisateurs. . .
. . . mais pas un CMS
Formation Django
Django ?
Un frameworkGestion des requêtes et des URLInterface vers une base de donnéesFormulairesAuthentification des utilisateurs. . .
. . . mais pas un CMS
2013
-11-
07
Formation DjangoPrésentation
Django ?
Bibliothèque =/= Framework :bibliothèque : collection de fonctions + classes spécialiséesframework : ensemble de fonctions + classes + méthodologie.En général on ne peut pas changer de framework sans repartir àzéro.
![Page 3: Formation Django - bde.enseeiht.fr · Présentation Notre premier projet Exercice final Formation Django Maxime Arthaud basé sur les slides de V. Angladon et V. Duvert Jeudi 7 novembre](https://reader036.vdocuments.mx/reader036/viewer/2022062413/5bf06d8709d3f2803f8c682a/html5/thumbnails/3.jpg)
PrésentationNotre premier projet
Exercice final
Django ?
Un frameworkGestion des requêtes et des URLInterface vers une base de donnéesFormulairesAuthentification des utilisateurs. . .
. . . mais pas un CMS
Formation Django
Django ?
Un frameworkGestion des requêtes et des URLInterface vers une base de donnéesFormulairesAuthentification des utilisateurs. . .
. . . mais pas un CMS
2013
-11-
07
Formation DjangoPrésentation
Django ?
![Page 4: Formation Django - bde.enseeiht.fr · Présentation Notre premier projet Exercice final Formation Django Maxime Arthaud basé sur les slides de V. Angladon et V. Duvert Jeudi 7 novembre](https://reader036.vdocuments.mx/reader036/viewer/2022062413/5bf06d8709d3f2803f8c682a/html5/thumbnails/4.jpg)
PrésentationNotre premier projet
Exercice final
Django ?
Un frameworkGestion des requêtes et des URLInterface vers une base de donnéesFormulairesAuthentification des utilisateurs. . .
. . . mais pas un CMS
Formation Django
Django ?
Un frameworkGestion des requêtes et des URLInterface vers une base de donnéesFormulairesAuthentification des utilisateurs. . .
. . . mais pas un CMS
2013
-11-
07
Formation DjangoPrésentation
Django ?
Tout le monde sait ce qu’est une base de donnée ?BD = entité dans laquelle on peut stocker des données structuréesselon un modèle prédéfini.Base = ensemble de tables.Table = tableau avec des colonnes prédéfinies (nom + type).
permettent de faire des opérations complexes sur ces données : tri,sélection/filtrage à l’aide d’un langage, ...permet accès concurrents, protection contre la corruption,récupération de données si requête interrompue, sécurité, ...
C’est beaucoup mieux que de gérer des fichiers
![Page 5: Formation Django - bde.enseeiht.fr · Présentation Notre premier projet Exercice final Formation Django Maxime Arthaud basé sur les slides de V. Angladon et V. Duvert Jeudi 7 novembre](https://reader036.vdocuments.mx/reader036/viewer/2022062413/5bf06d8709d3f2803f8c682a/html5/thumbnails/5.jpg)
PrésentationNotre premier projet
Exercice final
Django ?
Un frameworkGestion des requêtes et des URLInterface vers une base de donnéesFormulairesAuthentification des utilisateurs. . .
. . . mais pas un CMS
Formation Django
Django ?
Un frameworkGestion des requêtes et des URLInterface vers une base de donnéesFormulairesAuthentification des utilisateurs. . .
. . . mais pas un CMS
2013
-11-
07
Formation DjangoPrésentation
Django ?
![Page 6: Formation Django - bde.enseeiht.fr · Présentation Notre premier projet Exercice final Formation Django Maxime Arthaud basé sur les slides de V. Angladon et V. Duvert Jeudi 7 novembre](https://reader036.vdocuments.mx/reader036/viewer/2022062413/5bf06d8709d3f2803f8c682a/html5/thumbnails/6.jpg)
PrésentationNotre premier projet
Exercice final
Django ?
Un frameworkGestion des requêtes et des URLInterface vers une base de donnéesFormulairesAuthentification des utilisateurs. . .
. . . mais pas un CMS
Formation Django
Django ?
Un frameworkGestion des requêtes et des URLInterface vers une base de donnéesFormulairesAuthentification des utilisateurs. . .
. . . mais pas un CMS
2013
-11-
07
Formation DjangoPrésentation
Django ?
![Page 7: Formation Django - bde.enseeiht.fr · Présentation Notre premier projet Exercice final Formation Django Maxime Arthaud basé sur les slides de V. Angladon et V. Duvert Jeudi 7 novembre](https://reader036.vdocuments.mx/reader036/viewer/2022062413/5bf06d8709d3f2803f8c682a/html5/thumbnails/7.jpg)
PrésentationNotre premier projet
Exercice final
Django ?
Un frameworkGestion des requêtes et des URLInterface vers une base de donnéesFormulairesAuthentification des utilisateurs. . .
. . . mais pas un CMS
Formation Django
Django ?
Un frameworkGestion des requêtes et des URLInterface vers une base de donnéesFormulairesAuthentification des utilisateurs. . .
. . . mais pas un CMS
2013
-11-
07
Formation DjangoPrésentation
Django ?
![Page 8: Formation Django - bde.enseeiht.fr · Présentation Notre premier projet Exercice final Formation Django Maxime Arthaud basé sur les slides de V. Angladon et V. Duvert Jeudi 7 novembre](https://reader036.vdocuments.mx/reader036/viewer/2022062413/5bf06d8709d3f2803f8c682a/html5/thumbnails/8.jpg)
PrésentationNotre premier projet
Exercice final
Django ?
Un frameworkGestion des requêtes et des URLInterface vers une base de donnéesFormulairesAuthentification des utilisateurs. . .
. . . mais pas un CMS
Formation Django
Django ?
Un frameworkGestion des requêtes et des URLInterface vers une base de donnéesFormulairesAuthentification des utilisateurs. . .
. . . mais pas un CMS
2013
-11-
07
Formation DjangoPrésentation
Django ?
CMS = gestionnaire de contenu (SPIP, Joomla, Drupal, ...) sitedynamique tout prêt (personnalisable) ou il suffit de rajouter ducontenu via une interface d’administration.
![Page 9: Formation Django - bde.enseeiht.fr · Présentation Notre premier projet Exercice final Formation Django Maxime Arthaud basé sur les slides de V. Angladon et V. Duvert Jeudi 7 novembre](https://reader036.vdocuments.mx/reader036/viewer/2022062413/5bf06d8709d3f2803f8c682a/html5/thumbnails/9.jpg)
PrésentationNotre premier projet
Exercice final
Django ?
Un frameworkGestion des requêtes et des URLInterface vers une base de donnéesFormulairesAuthentification des utilisateurs. . .
. . . mais pas un CMS
AttentionVersion actuelle : Django 1.6 (Python2 ou Python3)
Formation Django
Django ?
Un frameworkGestion des requêtes et des URLInterface vers une base de donnéesFormulairesAuthentification des utilisateurs. . .
. . . mais pas un CMS
AttentionVersion actuelle : Django 1.6 (Python2 ou Python3)20
13-1
1-07
Formation DjangoPrésentation
Django ?
Utilisez Django 1.5 avec python 2
>> Architecture
![Page 10: Formation Django - bde.enseeiht.fr · Présentation Notre premier projet Exercice final Formation Django Maxime Arthaud basé sur les slides de V. Angladon et V. Duvert Jeudi 7 novembre](https://reader036.vdocuments.mx/reader036/viewer/2022062413/5bf06d8709d3f2803f8c682a/html5/thumbnails/10.jpg)
PrésentationNotre premier projet
Exercice final
Django ?
Un frameworkGestion des requêtes et des URLInterface vers une base de donnéesFormulairesAuthentification des utilisateurs. . .
. . . mais pas un CMS
AttentionVersion actuelle : Django 1.6 (Python2 ou Python3)
Formation Django
Django ?
Un frameworkGestion des requêtes et des URLInterface vers une base de donnéesFormulairesAuthentification des utilisateurs. . .
. . . mais pas un CMS
AttentionVersion actuelle : Django 1.6 (Python2 ou Python3)20
13-1
1-07
Formation DjangoPrésentation
Django ?
Utilisez Django 1.5 avec python 2
>> Architecture
![Page 11: Formation Django - bde.enseeiht.fr · Présentation Notre premier projet Exercice final Formation Django Maxime Arthaud basé sur les slides de V. Angladon et V. Duvert Jeudi 7 novembre](https://reader036.vdocuments.mx/reader036/viewer/2022062413/5bf06d8709d3f2803f8c682a/html5/thumbnails/11.jpg)
PrésentationNotre premier projet
Exercice final
Architecture
Requête
URL
Vue
Modèle Réponse (HTML)
Template
Formation Django
Architecture
Requête
URL
Vue
Modèle Réponse (HTML)
Template
2013
-11-
07
Formation DjangoPrésentation
Architecture
Fonctionnement de Django : slide le plus important de la formation.l’utilisateur charge une page de votre serveurserveur HTTP a plusieurs instance de Django prêtes à traiter desrequêtesDjango créé un objet Requête représentant votre requête qui passe àtravers divers couches d’intergiciels modifiant éventuellement cetobjetMaintenant j’en viens à ce qui est important et figure sur le schémaDjango parse l’url et cherche la vue lui correspondantToute l’essences du site réside dans les vues qui peuvent récupérerdes données de bases de données et effectuer un rendu HTML avecdes templates éventuellement.La vue précédemment sélectionnée renvoie un objet RéponseHTTPCet objet repasse à travers les couches d’intergiciels.
>> 1e projet
![Page 12: Formation Django - bde.enseeiht.fr · Présentation Notre premier projet Exercice final Formation Django Maxime Arthaud basé sur les slides de V. Angladon et V. Duvert Jeudi 7 novembre](https://reader036.vdocuments.mx/reader036/viewer/2022062413/5bf06d8709d3f2803f8c682a/html5/thumbnails/12.jpg)
PrésentationNotre premier projet
Exercice final
Vues et urlsLes modèlesLes TemplatesLes formulairesInterface d’administration
Créer un site Django
$ django-admin.py startproject monsite$ tree monsite/monsite+-- manage.py+-- monsite
+-- __init__.py+-- settings.py+-- urls.py+-- wsgi.py
$ cd monsite$ python2 manage.py runserver[...]
Formation Django
Créer un site Django
$ django-admin.py startproject monsite$ tree monsite/monsite+-- manage.py+-- monsite
+-- __init__.py+-- settings.py+-- urls.py+-- wsgi.py
$ cd monsite$ python2 manage.py runserver[...]
2013
-11-
07
Formation DjangoNotre premier projet
Créer un site Django
>> 1e vue
![Page 13: Formation Django - bde.enseeiht.fr · Présentation Notre premier projet Exercice final Formation Django Maxime Arthaud basé sur les slides de V. Angladon et V. Duvert Jeudi 7 novembre](https://reader036.vdocuments.mx/reader036/viewer/2022062413/5bf06d8709d3f2803f8c682a/html5/thumbnails/13.jpg)
PrésentationNotre premier projet
Exercice final
Vues et urlsLes modèlesLes TemplatesLes formulairesInterface d’administration
Votre 1e vue !
1 Créez un fichier monsite/views.py2 Copiez y le code suivant :
# -*- coding: utf-8 -*-from django.http import HttpResponse
def home(request):return HttpResponse("Hello")
Formation Django
Votre 1e vue !
1 Créez un fichier monsite/views.py2 Copiez y le code suivant :
# -*- coding: utf-8 -*-from django.http import HttpResponse
def home(request):return HttpResponse("Hello")20
13-1
1-07
Formation DjangoNotre premier projet
Vues et urlsVotre 1e vue !
Vue renvoie un objet RéponseHTTP
Oui mais il faut dire quelque part qu’il faut utiliser cette vue quandune url donnée est demandée. >> urls
![Page 14: Formation Django - bde.enseeiht.fr · Présentation Notre premier projet Exercice final Formation Django Maxime Arthaud basé sur les slides de V. Angladon et V. Duvert Jeudi 7 novembre](https://reader036.vdocuments.mx/reader036/viewer/2022062413/5bf06d8709d3f2803f8c682a/html5/thumbnails/14.jpg)
PrésentationNotre premier projet
Exercice final
Vues et urlsLes modèlesLes TemplatesLes formulairesInterface d’administration
La gestion des URLs
1 Ouvrez le fichier monsite/urls.py2 Modifiez le code pour avoir :
from django.conf.urls.defaults import patterns, \include, url
urlpatterns = patterns(’’,url(r’^$’, ’monsite.views.home’),
)
Formation Django
La gestion des URLs
1 Ouvrez le fichier monsite/urls.py2 Modifiez le code pour avoir :
from django.conf.urls.defaults import patterns, \include, url
urlpatterns = patterns(’’,url(r’^$’, ’monsite.views.home’),
)2013
-11-
07
Formation DjangoNotre premier projet
Vues et urlsLa gestion des URLs
C’est là qu’on fait l’aiguillage des urls (selon regexp matchée) versune vue.
Pas besoin de / a la fin des urls
le ’r’ signifie que l’on considere la chaine de l’expression reguliere enmode "raw" ie \t n’est pas interprete comme le caractere detabulation mais comme \ suivi de t, permet d’écrire \b au lieu de \\b(car \ doit être échappé en Python)M ? signifie M est optionnel| ou ; . tout char sauf \n ; \w = mot alphanumM0,3 : on peut reconnaitre 0 ou 1 ou 2 ou 3 M consécutifsM3 : reconnaitre exactement 3 M consécutifsM+ : 1 ou 2 ou ... M consécutifs, M* : 0 ou 1 ou 2 ...
La gestion des URLs
1 Ouvrez le fichier monsite/urls.py2 Modifiez le code pour avoir :
from django.conf.urls.defaults import patterns, \include, url
urlpatterns = patterns(’’,url(r’^$’, ’monsite.views.home’),
)2013
-11-
07
Formation DjangoNotre premier projet
Vues et urlsLa gestion des URLs
>> regexp
![Page 15: Formation Django - bde.enseeiht.fr · Présentation Notre premier projet Exercice final Formation Django Maxime Arthaud basé sur les slides de V. Angladon et V. Duvert Jeudi 7 novembre](https://reader036.vdocuments.mx/reader036/viewer/2022062413/5bf06d8709d3f2803f8c682a/html5/thumbnails/15.jpg)
PrésentationNotre premier projet
Exercice final
Vues et urlsLes modèlesLes TemplatesLes formulairesInterface d’administration
URLs et expressions régulières
# ... suite de l’urlpattern dans urls.py(r’^annee/(\d{4})$’, ’monsite.views.annee’),(r’^aff/(?P<texte>.+)/$’, ’monsite.views.aff’),
# vues associees dans views.pydef annee(request, year):
return HttpResponse("On est en "+year)
def aff(request, texte):return HttpResponse("Bonjour "+texte)
Formation Django
URLs et expressions régulières
# ... suite de l’urlpattern dans urls.py(r’^annee/(\d{4})$’, ’monsite.views.annee’),(r’^aff/(?P<texte>.+)/$’, ’monsite.views.aff’),
# vues associees dans views.pydef annee(request, year):
return HttpResponse("On est en "+year)
def aff(request, texte):return HttpResponse("Bonjour "+texte)20
13-1
1-07
Formation DjangoNotre premier projet
Vues et urlsURLs et expressions régulières
Si on continue comme ça : urls.py de 500 lignes.Donc découper projet en modules/apps >> 1e app
![Page 16: Formation Django - bde.enseeiht.fr · Présentation Notre premier projet Exercice final Formation Django Maxime Arthaud basé sur les slides de V. Angladon et V. Duvert Jeudi 7 novembre](https://reader036.vdocuments.mx/reader036/viewer/2022062413/5bf06d8709d3f2803f8c682a/html5/thumbnails/16.jpg)
PrésentationNotre premier projet
Exercice final
Vues et urlsLes modèlesLes TemplatesLes formulairesInterface d’administration
Première application
$ python2 manage.py startapp monapp$ ls monapp__init__.py models.py tests.py views.py
1 ajouter l’application dans le tuple INSTALLED_APPS desettings.py
2 bonne pratique : monapp/urls.py
Formation Django
Première application
$ python2 manage.py startapp monapp$ ls monapp__init__.py models.py tests.py views.py
1 ajouter l’application dans le tuple INSTALLED_APPS desettings.py
2 bonne pratique : monapp/urls.py2013
-11-
07
Formation DjangoNotre premier projet
Vues et urlsPremière application
>> config des urls
![Page 17: Formation Django - bde.enseeiht.fr · Présentation Notre premier projet Exercice final Formation Django Maxime Arthaud basé sur les slides de V. Angladon et V. Duvert Jeudi 7 novembre](https://reader036.vdocuments.mx/reader036/viewer/2022062413/5bf06d8709d3f2803f8c682a/html5/thumbnails/17.jpg)
PrésentationNotre premier projet
Exercice final
Vues et urlsLes modèlesLes TemplatesLes formulairesInterface d’administration
Découplage des URLs
# Rajouter cet urlpattern dans monsite/urls.pyurl(r’^monapp/’, include(’monapp.urls’))
# monapp/urls.pyfrom django.conf.urls import patterns, include, url
urlpatterns = patterns(’monapp.views’,url(r’^$’, ’index’),url(r’^info$’, ’info’),
)
Formation Django
Découplage des URLs
# Rajouter cet urlpattern dans monsite/urls.pyurl(r’^monapp/’, include(’monapp.urls’))
# monapp/urls.pyfrom django.conf.urls import patterns, include, url
urlpatterns = patterns(’monapp.views’,url(r’^$’, ’index’),url(r’^info$’, ’info’),
)2013
-11-
07
Formation DjangoNotre premier projet
Vues et urlsDécouplage des URLs
Le premier paramètre de patterns est un prefix pour les noms desvues.
Pour le moment on sait afficher des chaines de caractère et gérer desurls.Avant de passer aux templates, regardons les modèles.
>> modèle
![Page 18: Formation Django - bde.enseeiht.fr · Présentation Notre premier projet Exercice final Formation Django Maxime Arthaud basé sur les slides de V. Angladon et V. Duvert Jeudi 7 novembre](https://reader036.vdocuments.mx/reader036/viewer/2022062413/5bf06d8709d3f2803f8c682a/html5/thumbnails/18.jpg)
PrésentationNotre premier projet
Exercice final
Vues et urlsLes modèlesLes TemplatesLes formulairesInterface d’administration
Création d’un modèle
1 Configurer la base de donnée dans settings.py2 Créer les modèles3 Générer les tables à partir du modèle
Page de référence sur la configuration des bases de données :https://docs.djangoproject.com/en/dev/ref/settings/#databases
Page de référence sur les champs des modèles :https://docs.djangoproject.com/en/dev/ref/models/fields/
Formation Django
Création d’un modèle
1 Configurer la base de donnée dans settings.py2 Créer les modèles3 Générer les tables à partir du modèle
Page de référence sur la configuration des bases de données :https://docs.djangoproject.com/en/dev/ref/settings/#databases
Page de référence sur les champs des modèles :https://docs.djangoproject.com/en/dev/ref/models/fields/20
13-1
1-07
Formation DjangoNotre premier projet
Les modèlesCréation d’un modèle
Je saute la configuration de settings.py car bien commentépossibilité configuration plusieurs DB.
Modèle = classe qui définie une table.les instances de cette classe sont des lignes de la table.
La génération des tables est automatique.
>> 1e modèle
![Page 19: Formation Django - bde.enseeiht.fr · Présentation Notre premier projet Exercice final Formation Django Maxime Arthaud basé sur les slides de V. Angladon et V. Duvert Jeudi 7 novembre](https://reader036.vdocuments.mx/reader036/viewer/2022062413/5bf06d8709d3f2803f8c682a/html5/thumbnails/19.jpg)
PrésentationNotre premier projet
Exercice final
Vues et urlsLes modèlesLes TemplatesLes formulairesInterface d’administration
Premier modèle
# monapp/models.pyfrom django.db import models
class Article(models.Model):nom = models.CharField(verbose_name="Nom de l’article"\
, max_length=128)description = models.TextField(max_length=512)prix = models.DecimalField(decimal_places=2, max_digits=6)couleurs = models.TextField(default="blue")ecole = models.ForeignKey(Ecole, editable=False)
def __unicode__(self):return self.nom
Formation Django
Premier modèle
# monapp/models.pyfrom django.db import models
class Article(models.Model):nom = models.CharField(verbose_name="Nom de l’article"\
, max_length=128)description = models.TextField(max_length=512)prix = models.DecimalField(decimal_places=2, max_digits=6)couleurs = models.TextField(default="blue")ecole = models.ForeignKey(Ecole, editable=False)
def __unicode__(self):return self.nom20
13-1
1-07
Formation DjangoNotre premier projet
Les modèlesPremier modèle
Tiré du code du portail (modifié)CharField, TextField, DecimalField, ForeignKeymax_length, defaultverbose_name : nom utilisé pour le formulaireblank : peut être laissé vide/null ou paseditable : pas apparaître dans le formulaire généré, ni dans l’interfaced’admin
Méthode __unicode__() : gérer comment afficher l’objet, ex dans unprint(). Idem que __str__() mais renvoie une chaîne utf-8. Leschaînes des DB sont converties en unicode par Django.
>> création de la db
![Page 20: Formation Django - bde.enseeiht.fr · Présentation Notre premier projet Exercice final Formation Django Maxime Arthaud basé sur les slides de V. Angladon et V. Duvert Jeudi 7 novembre](https://reader036.vdocuments.mx/reader036/viewer/2022062413/5bf06d8709d3f2803f8c682a/html5/thumbnails/20.jpg)
PrésentationNotre premier projet
Exercice final
Vues et urlsLes modèlesLes TemplatesLes formulairesInterface d’administration
Création de la base de donnée
Création de la base :
$ python2 manage.py syncdb
Voir les commandes SQL exécutées :
$ python2 manage.py sql monapp
Visualiser une base de donnée sqlite :
$ sqliteman mabase.sqlite
Formation Django
Création de la base de donnée
Création de la base :
$ python2 manage.py syncdb
Voir les commandes SQL exécutées :
$ python2 manage.py sql monapp
Visualiser une base de donnée sqlite :
$ sqliteman mabase.sqlite2013
-11-
07
Formation DjangoNotre premier projet
Les modèlesCréation de la base de donnée
>> 1e requete
![Page 21: Formation Django - bde.enseeiht.fr · Présentation Notre premier projet Exercice final Formation Django Maxime Arthaud basé sur les slides de V. Angladon et V. Duvert Jeudi 7 novembre](https://reader036.vdocuments.mx/reader036/viewer/2022062413/5bf06d8709d3f2803f8c682a/html5/thumbnails/21.jpg)
PrésentationNotre premier projet
Exercice final
Vues et urlsLes modèlesLes TemplatesLes formulairesInterface d’administration
Premières requêtes
$ python2 manage.py shell
Manipuler les modèles :
Modele.objects.all()Modele.objects.get()Modele.objects.filter()entree.delete()entree.save()
Pages de référence :https://docs.djangoproject.com/en/1.3/topics/db/queries/https://docs.djangoproject.com/en/1.3/ref/models/querysets/
Formation Django
Premières requêtes
$ python2 manage.py shell
Manipuler les modèles :
Modele.objects.all()Modele.objects.get()Modele.objects.filter()entree.delete()entree.save()
Pages de référence :https://docs.djangoproject.com/en/1.3/topics/db/queries/https://docs.djangoproject.com/en/1.3/ref/models/querysets/
2013
-11-
07
Formation DjangoNotre premier projet
Les modèlesPremières requêtes
En va faire ça ensemble.Lançons un shell particulier qui va mettre en place l’environnement.
>> template
![Page 22: Formation Django - bde.enseeiht.fr · Présentation Notre premier projet Exercice final Formation Django Maxime Arthaud basé sur les slides de V. Angladon et V. Duvert Jeudi 7 novembre](https://reader036.vdocuments.mx/reader036/viewer/2022062413/5bf06d8709d3f2803f8c682a/html5/thumbnails/22.jpg)
PrésentationNotre premier projet
Exercice final
Vues et urlsLes modèlesLes TemplatesLes formulairesInterface d’administration
Les Templates
Template = page html liée à une vue
1 configurer TEMPLATE_DIRS dans settings.py2 définir les variables affichées/utilisées par le template et
les regrouper dans un dictionnaire3 changer la vue pour quelle renvoie render(request,
’montemplate.html’, dictionnaire)
Pages de référence :https://docs.djangoproject.com/en/dev/ref/templates/api/
https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs
Formation Django
Les Templates
Template = page html liée à une vue
1 configurer TEMPLATE_DIRS dans settings.py2 définir les variables affichées/utilisées par le template et
les regrouper dans un dictionnaire3 changer la vue pour quelle renvoie render(request,
’montemplate.html’, dictionnaire)
Pages de référence :https://docs.djangoproject.com/en/dev/ref/templates/api/
https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs2013
-11-
07
Formation DjangoNotre premier projet
Les TemplatesLes Templates
>> exemple
![Page 23: Formation Django - bde.enseeiht.fr · Présentation Notre premier projet Exercice final Formation Django Maxime Arthaud basé sur les slides de V. Angladon et V. Duvert Jeudi 7 novembre](https://reader036.vdocuments.mx/reader036/viewer/2022062413/5bf06d8709d3f2803f8c682a/html5/thumbnails/23.jpg)
PrésentationNotre premier projet
Exercice final
Vues et urlsLes modèlesLes TemplatesLes formulairesInterface d’administration
Exemple d’utilisation
La vuefrom monapp.models import Articlefrom django.shortcuts import render
def index(request):c = {’articles’: Article.objects.all()}return render(request, ’index.html’, c)
Le template index.html<h1>Liste des articles</h1><ul>{% for a in articles %}
<li>{{ a.nom }}</li>{% endfor %}</ul>
Formation Django
Exemple d’utilisation
La vuefrom monapp.models import Articlefrom django.shortcuts import render
def index(request):c = {’articles’: Article.objects.all()}return render(request, ’index.html’, c)
Le template index.html<h1>Liste des articles</h1><ul>{% for a in articles %}
<li>{{ a.nom }}</li>{% endfor %}</ul>
2013
-11-
07
Formation DjangoNotre premier projet
Les TemplatesExemple d’utilisation
{{ }} : accès variables{% %} : commande de templateRemarquez le for comme si on était en PythonNotez la syntaxe objet.attribut (f.id), idem pour accès liste/tuple : f.0,f.1 ...balise url , if ou elsepossibilité d’appliquer des fonctions (filtres) à des variables via | >>
blocs
![Page 24: Formation Django - bde.enseeiht.fr · Présentation Notre premier projet Exercice final Formation Django Maxime Arthaud basé sur les slides de V. Angladon et V. Duvert Jeudi 7 novembre](https://reader036.vdocuments.mx/reader036/viewer/2022062413/5bf06d8709d3f2803f8c682a/html5/thumbnails/24.jpg)
PrésentationNotre premier projet
Exercice final
Vues et urlsLes modèlesLes TemplatesLes formulairesInterface d’administration
Etendre des blocs
Page principale, main.html<html lang="fr"><head><title>{% block title %}{% endblock %}</title></head><body><h1>Bienvenue !</h1>{% block content %}{% endblock %}</body></html>
Page affichage.html qui va étendre main.html{% extends "main.html" %}{% block title %}Le titre de ma page{% endblock %}{% block content %}Du contenu ici.{% endblock %}
Formation Django
Etendre des blocs
Page principale, main.html<html lang="fr"><head><title>{% block title %}{% endblock %}</title></head><body><h1>Bienvenue !</h1>{% block content %}{% endblock %}</body></html>
Page affichage.html qui va étendre main.html{% extends "main.html" %}{% block title %}Le titre de ma page{% endblock %}{% block content %}Du contenu ici.{% endblock %}
2013
-11-
07
Formation DjangoNotre premier projet
Les TemplatesEtendre des blocs
le contenu de affichage.html va etre inséré dans main.html
>> formulaires
![Page 25: Formation Django - bde.enseeiht.fr · Présentation Notre premier projet Exercice final Formation Django Maxime Arthaud basé sur les slides de V. Angladon et V. Duvert Jeudi 7 novembre](https://reader036.vdocuments.mx/reader036/viewer/2022062413/5bf06d8709d3f2803f8c682a/html5/thumbnails/25.jpg)
PrésentationNotre premier projet
Exercice final
Vues et urlsLes modèlesLes TemplatesLes formulairesInterface d’administration
A la main
Définition du formulaire, forms.pyfrom django import forms
class InscriptionForm(ModelForm):login = forms.CharField(required=True)password = forms.CharField(label=’Mot de passe’, required=True, widget=forms.PasswordInput)code = forms.IntegerField()
Son template, edit.html<form action="" method="post">{% csrf_token %}{{ form.as_p }}<input type="submit" value="Submit" /></form>
Formation Django
A la main
Définition du formulaire, forms.pyfrom django import forms
class InscriptionForm(ModelForm):login = forms.CharField(required=True)password = forms.CharField(label=’Mot de passe’, required=True, widget=forms.PasswordInput)code = forms.IntegerField()
Son template, edit.html<form action="" method="post">{% csrf_token %}{{ form.as_p }}<input type="submit" value="Submit" /></form>
2013
-11-
07
Formation DjangoNotre premier projet
Les formulairesA la main
On peut utiliser request.GET et request.POST, mais ce n’est paspropre.Form =̃ Même chose que les modèles.form.as_table, form.as_ul, ..
>> vue du formulaire
![Page 26: Formation Django - bde.enseeiht.fr · Présentation Notre premier projet Exercice final Formation Django Maxime Arthaud basé sur les slides de V. Angladon et V. Duvert Jeudi 7 novembre](https://reader036.vdocuments.mx/reader036/viewer/2022062413/5bf06d8709d3f2803f8c682a/html5/thumbnails/26.jpg)
PrésentationNotre premier projet
Exercice final
Vues et urlsLes modèlesLes TemplatesLes formulairesInterface d’administration
Vue d’un formulaire
from django.shortcuts import redirect
def inscription(request):if request.method == ’POST’:
form = InscriptionForm(request.POST)if form.is_valid():
# Faire qqch avec les donnees..return redirect(’monapp.views.merci’)
else:form = InscriptionForm()
return render(request, ’inscription.html’, {’form’: form})
Formation Django
Vue d’un formulaire
from django.shortcuts import redirect
def inscription(request):if request.method == ’POST’:
form = InscriptionForm(request.POST)if form.is_valid():
# Faire qqch avec les donnees..return redirect(’monapp.views.merci’)
else:form = InscriptionForm()
return render(request, ’inscription.html’, {’form’: form})2013
-11-
07
Formation DjangoNotre premier projet
Les formulairesVue d’un formulaire
form.cleaned_data est un dictionnaire avec la valeur des champs
>> formulaire généré à partir d’un modèle
![Page 27: Formation Django - bde.enseeiht.fr · Présentation Notre premier projet Exercice final Formation Django Maxime Arthaud basé sur les slides de V. Angladon et V. Duvert Jeudi 7 novembre](https://reader036.vdocuments.mx/reader036/viewer/2022062413/5bf06d8709d3f2803f8c682a/html5/thumbnails/27.jpg)
PrésentationNotre premier projet
Exercice final
Vues et urlsLes modèlesLes TemplatesLes formulairesInterface d’administration
A partir d’un modèle
Formulaire, forms.pyclass ArticleForm(models.ModelForm):
class Meta:model = Articlefields = (’login’, ’password’, ’code’)
Vue, views.pyobjet = get_object_or_404(Article, pk=1)if request.method == ’POST’:
form = ArticleForm(request.POST, instance=objet)if form.is_valid():
form.save()return redirect(objet)
else:form = ArticleForm(instance=objet)
return render(request, ’edit.html’, {’form’: form})
Formation Django
A partir d’un modèle
Formulaire, forms.pyclass ArticleForm(models.ModelForm):
class Meta:model = Articlefields = (’login’, ’password’, ’code’)
Vue, views.pyobjet = get_object_or_404(Article, pk=1)if request.method == ’POST’:
form = ArticleForm(request.POST, instance=objet)if form.is_valid():
form.save()return redirect(objet)
else:form = ArticleForm(instance=objet)
return render(request, ’edit.html’, {’form’: form})
2013
-11-
07
Formation DjangoNotre premier projet
Les formulairesA partir d’un modèle
Formulaire généré automatiquement, customisable
Dans le cas de l’ajout, ne pas passer en paramètre un objetget_object_or_404 permet de retourner un objet, ou erreur 404code-snippet, pas à retenir !
>> admin
![Page 28: Formation Django - bde.enseeiht.fr · Présentation Notre premier projet Exercice final Formation Django Maxime Arthaud basé sur les slides de V. Angladon et V. Duvert Jeudi 7 novembre](https://reader036.vdocuments.mx/reader036/viewer/2022062413/5bf06d8709d3f2803f8c682a/html5/thumbnails/28.jpg)
PrésentationNotre premier projet
Exercice final
Vues et urlsLes modèlesLes TemplatesLes formulairesInterface d’administration
Interface d’administration
1 Décommenter les lignes concernant l’interfaced’administration dans settings.py et urls.py
2 Mettre à jour les tables (syncdb)3 Pour chaque application, indiquer les modèles pris en
charge par l’interface d’administration via un fichieradmin.py comme suit :
from monapp.models import Modele1, Modele2from django.contrib import admin
admin.site.register(Modele1)admin.site.register(Modele2)
Formation Django
Interface d’administration
1 Décommenter les lignes concernant l’interfaced’administration dans settings.py et urls.py
2 Mettre à jour les tables (syncdb)3 Pour chaque application, indiquer les modèles pris en
charge par l’interface d’administration via un fichieradmin.py comme suit :
from monapp.models import Modele1, Modele2from django.contrib import admin
admin.site.register(Modele1)admin.site.register(Modele2)
2013
-11-
07
Formation DjangoNotre premier projet
Interface d’administrationInterface d’administration
Générée automatiquement, customisable :)
>> exo
![Page 29: Formation Django - bde.enseeiht.fr · Présentation Notre premier projet Exercice final Formation Django Maxime Arthaud basé sur les slides de V. Angladon et V. Duvert Jeudi 7 novembre](https://reader036.vdocuments.mx/reader036/viewer/2022062413/5bf06d8709d3f2803f8c682a/html5/thumbnails/29.jpg)
PrésentationNotre premier projet
Exercice final
Exercice : FaceMash
Cahier des charges, fonctions à implémenter :ajouter/éditer un utilisateur (Nom, adresse mail, photo) viaun formulairevisualiser une liste des utilisateurs triée selon leur scorevisualiser le profil d’un utilisateurenregistrer les votes : date, vote, ip du votant (on estméchant)afficher la liste des votesvote : afficher les photos de 2 utilisateurs choisisaléatoirement, le vote s’effectue en cliquant sur l’une desphotosinterface d’administration
Formation Django
Exercice : FaceMash
Cahier des charges, fonctions à implémenter :ajouter/éditer un utilisateur (Nom, adresse mail, photo) viaun formulairevisualiser une liste des utilisateurs triée selon leur scorevisualiser le profil d’un utilisateurenregistrer les votes : date, vote, ip du votant (on estméchant)afficher la liste des votesvote : afficher les photos de 2 utilisateurs choisisaléatoirement, le vote s’effectue en cliquant sur l’une desphotosinterface d’administration
2013
-11-
07
Formation DjangoExercice final
Exercice : FaceMash
Vous pouvez partir si vous voulez, vous avez la correction. L’intérêt defaire l’exo ici est qu’on peut vous aider...FaceMash consiste à ...Une partie du code vous est donnée.environ 200 lignes de code PythonAttention, settings.py à compléter !script init.sh pour peupler votre base de donnée