Formation Django - Portail des ©tudiants de l'ENSEEIHT
Transcript of Formation Django - Portail des ©tudiants de l'ENSEEIHT
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
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.
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 ?
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
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 ?
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 ?
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 ?
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.
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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