29
Présentation Notre premier projet Exercice final Formation Django Maxime Arthaud basé 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 Arthaud basé 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

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

  • Upload
    buitruc

  • View
    221

  • Download
    0

Embed Size (px)

Citation preview

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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