Bootstrap définit des styles et le formatage de contenu de texte par default comme les titres, paragraphes, blocs de citation, etc
Cet article explique comment utiliser le panneau d'administration de Django pour créer, mettre à jour, supprimer ou récupérer les enregistrements d'un modèle et diverses opérations similaires
Jusqu'à présent, nous avons créé une table Membres dans notre base de données et nous avons inséré cinq enregistrements en écrivant du code dans le shell Python.
Nous avons également créé un modèle qui nous permet d'afficher le contenu de la table dans une page Web.
Maintenant, nous voulons être en mesure de créer de nouveaux membres à partir d'une page Web.
<!DOCTYPE html> <html> <head> <title>Liste des membres</title> </head> <body> <h1>Mes membres</h1> <table border="1" style="border-collapse: collapse;"><tr><th> ID </th> <th> Prénom </th><th> Nom </th><th>Email</th></tr> {% for x in mesmembres %} <tr> <td>{{ x.id }}</td> <td>{{ x.prenom }}</td> <td>{{ x.nom }}</td> <td>{{ x.mail }}</td> </tr> {% endfor %} </table> <p> <a href="ajout/">Ajouter membre</a> </p> </body> </html>
<h1>Ajouter un membre</h1> <form action="ajouterrecord/" method="post"> {% csrf_token %} Prénom:<br> <input name="prenom"> <br><br> Nom :<br> <input name="nom"> <br><br> <input type="submit" value="Envoyer"> </form>Le modèle contient un formulaire HTML vide avec deux champs de saisie et un bouton d'envoi.
Remarque : Django exige cette ligne dans le formulaire :
{% csrf_token %}
C'est pour gérer injections(les requêtes des attaques intersites) dans les formulaires où la méthode est POST
from django.http import HttpResponse from django.template import loader from .models import Membres def index(request): mesmembres = Membres.objects.all().values() template = loader.get_template('index.html') context = { 'mesmembres': mesmembres, } return HttpResponse(template.render(context, request)) def ajout(request): template = loader.get_template('ajout.html') return HttpResponse(template.render({}, request))
from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), path('ajout/', views.ajout, name='ajout'), ]Vous pouvez voir la page ajouter un membre dans le navigateur, tapez l'url :http://localhost:8000/membres/ ou http://127.0.0.1:8000/membres/ dans la barra d'adresse puis cliquez sur le bouton "Ajouter un membre"
from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), path('ajout/', views.ajout, name='ajout'), path('ajout/ajouterrecord/', views.ajouterrecord, name='ajouterrecord'), ]
from django.http import HttpResponse, HttpResponseRedirect from django.template import loader from django.urls import reverse from .models import Membres def index(request): mesmembres = Membres.objects.all().values() template = loader.get_template('index.html') context = { 'mesmembres': mesmembres, } return HttpResponse(template.render(context, request)) def ajout(request): template = loader.get_template('ajout.html') return HttpResponse(template.render({}, request)) def ajouterrecord(request): x = request.POST['prenom'] y = request.POST['nom'] z = request.POST['mail'] membre = Membres(prenom=x, nom=y, mail=z) membre.save() return HttpResponseRedirect(reverse('index'))Changements apportés dans le fichier views.py :
<!DOCTYPE html> <html> <head> <title>Liste des membres</title> </head> <body> <h1>Mes membres</h1> <table border="1" style="border-collapse: collapse;"><tr><th> ID </th> <th> Prénom </th><th> Nom </th><th>Email</th><th> </th</tr> {% for x in mesmembres %} <tr> <td>{{ x.id }}</td> <td>{{ x.prenom }}</td> <td>{{ x.nom }}</td> <td>{{ x.mail }}</td> <td><a href="delete/{{ x.id }}">supprimer</a></td> </tr> {% endfor %} </table> <br> <button> <a href="ajout/">Ajouter membre</a> </button> </body> </html>
from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), path('ajout/', views.ajout, name='ajout'), path('ajout/ajouterrecord/', views.ajouterrecord, name='ajouterrecord'), path('delete/<int:idégt;', views.delete, name='delete'), ]
from django.http import HttpResponse, HttpResponseRedirect from django.template import loader from django.urls import reverse from .models import Membres def index(request): mesmembres = Membres.objects.all().values() template = loader.get_template('index.html') context = { 'mesmembres': mesmembres, } return HttpResponse(template.render(context, request)) def ajout(request): template = loader.get_template('ajout.html') return HttpResponse(template.render({}, request)) def ajouterrecord(request): x = request.POST['prenom'] y = request.POST['nom'] z = request.POST['mail'] membre = Membres(prenom=x, nom=y, mail=z) membre.save() return HttpResponseRedirect(reverse('index')) def delete(request, id): membre = Membres.objects.get(id=id) membre.delete() return HttpResponseRedirect(reverse('index'))Ce que fait la fonction de suppression delete :
<!DOCTYPE html> <html> <head> <title>Liste des membres</title> </head> <body> <h1>Mes membres</h1> <table border="1" style="border-collapse: collapse;"><tr><th> ID </th> <th> Prénom </th><th> Nom </th><th>Email</th><th> </th</tr> {% for x in mesmembres %} <tr> <td><a href="update/{{ x.id }}">{{ x.id }}</a></td> <td>{{ x.prenom }}</td> <td>{{ x.nom }}</td> <td>{{ x.mail }}</td> <td><a href="delete/{{ x.id }}">supprimer</a></td> </tr> {% endfor %} </table> <br> <button> <a href="ajout/">Ajouter membre</a> </button> </body> </html>Nous avons créé un lien sur l'ID de chaque membre.
from django.http import HttpResponse, HttpResponseRedirect from django.template import loader from django.urls import reverse from .models import Membres def index(request): mesmembres = Membres.objects.all().values() template = loader.get_template('index.html') context = { 'mesmembres': mesmembres, } return HttpResponse(template.render(context, request)) def ajout(request): template = loader.get_template('ajout.html') return HttpResponse(template.render({}, request)) def ajouterrecord(request): x = request.POST['prenom'] y = request.POST['nom'] z = request.POST['mail'] membre = Membres(prenom=x, nom=y, mail=z) membre.save() return HttpResponseRedirect(reverse('index')) def delete(request, id): membre = Membres.objects.get(id=id) membre.delete() return HttpResponseRedirect(reverse('index')) def update(request, id): monmembre = Membres.objects.get(id=id) template = loader.get_template('update.html') context = { 'monmembre': monmembre, } return HttpResponse(template.render(context, request))La fonction de mise à jour editer() effectue les opérations suivantes :
<h1>Mise à jour d'un membre</h1> <form action="editer/{{ monmembre.id }}" method="post"> {% csrf_token %} Prenom:<br> <input name="prenom" value="{{ monmembre.prenom }}"> <br><br> Nom :<br> <input name="nom" value="{{ monmembre.nom }}"> <br><br> Email :<br> <input name="mail" value="{{ monmembre.mail }}"> <br><br> <input type="submit" value=" Mètre à jour "> </form>Le template contient un formulaire HTML avec les valeurs du membre sélectionné.
Remarque : Django exige cette ligne dans le formulaire :
{% csrf_token %}
pour gérer les attaques de type intersites (Cross Site Request Forgeries) dans les formulaires où la méthode est POST.
from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), path('ajout/', views.ajout, name='ajout'), path('ajout/ajouterrecord/', views.ajouterrecord, name='ajouterrecord'), path('delete/<int:idégt;', views.delete, name='delete'), path('update/<int:idégt;', views.update, name='update'), ]Dans le navigateur, cliquez sur l'ID du membre que vous voulez modifier et vous êtes rediriger vers la page membre/update/ qui comme nous l'avons vu contient un formulaire avec les données du membre choisi . Vous pouvez changer comme vous voulez les informations dans ce formulaire et cliquer sur envoyer pour mètre à jour les informations dans la base de données .
from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), path('ajout/', views.ajout, name='ajout'), path('ajout/ajouterrecord/', views.ajouterrecord, name='ajouterrecord'), path('delete/<int:id>', views.delete, name='delete'), path('update/<int:id>', views.update, name='update'), path('update/editer/<int:id>', views.editer, name='editer'), ]
from django.http import HttpResponse, HttpResponseRedirect from django.template import loader from django.urls import reverse from .models import Membres def index(request): mesmembres = Membres.objects.all().values() template = loader.get_template('index.html') context = { 'mesmembres': mesmembres, } return HttpResponse(template.render(context, request)) def ajout(request): template = loader.get_template('ajout.html') return HttpResponse(template.render({}, request)) def ajouterrecord(request): x = request.POST['prenom'] y = request.POST['nom'] z = request.POST['mail'] membre = Membres(prenom=x, nom=y, mail=z) membre.save() return HttpResponseRedirect(reverse('index')) def delete(request, id): membre = Membres.objects.get(id=id) membre.delete() return HttpResponseRedirect(reverse('index')) def update(request, id): monmembre = Membres.objects.get(id=id) template = loader.get_template('update.html') context = { 'monmembre': monmembre, } return HttpResponse(template.render(context, request)) def editer(request, id): prenom = request.POST['prenom'] nom = request.POST['nom'] mail = request.POST['mail'] membre = Membres.objects.get(id=id) membre.prenom = prenom membre.nom = nom membre.mail = mail membre.save() return HttpResponseRedirect(reverse('index'))La fonction editer() mettra à jour l'enregistrement dans la table des membres pour l'ID sélectionné.