---
author:
- Sébastien Bonnegent
title: Django par la pratique 5/7
---
# Départ
## Support
- cours5.html
## Préparation
### L'ancien
~~~
$ git pull
$ cd fwm4
$ pipenv --rm
~~~
### Le nouveau
~~~
$ cd fwm5
$ pipenv install
~~~
## Au programme
- créer
- modifier
- les menus
- supprimer
- debugger
# Créer
## Parefeu
### webui/views.py
~~~python
from django.views.generic.edit import CreateView
class ParefeuCreate(CreateView):
model = Parefeu
fields = ['nom', 'modele']
template_name = "webui/object_create.html"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['menu_parefeu'] = 'active'
return context
def form_valid(self, form):
form.instance.admin = self.request.user
return super(ParefeuCreate, self).form_valid(form)
~~~
## Parefeu
### webui/templates/webui/object_create.html
~~~python
{% extends "webui/home.html" %}
{% block content %}
Création
{% endblock %}
~~~
## Parefeu
### webui/models.py
~~~python
from django.urls import reverse
class Parefeu(AvecNom):
# ...
def get_absolute_url(self):
# return reverse('parefeu-detail',
# kwargs={'pk': self.pk})
return reverse('parefeux')
~~~
## Parefeu
### conf/urls.py
~~~python
path('parefeu/add/',
login_required(views.ParefeuCreate.as_view()),
name='parefeu-create'),
~~~
## Parefeu
### webui/templates/webui/parefeu_list.html
~~~python
Ajouter
~~~
## Parefeu
### À faire
* ajouter un parefeu avec modèle **Serveur Web**
* afficher le modèle dans **parefeu_detail.html**
# Modifier
## Parefeu
### webui/views.py
~~~python
from django.views.generic.edit import UpdateView
class ParefeuUpdate(UpdateView):
model = Parefeu
fields = ['nom', 'modele']
template_name = "webui/object_update.html"
~~~
## Parefeu
### webui/templates/webui/object_update.html
~~~
{% extends "webui/home.html" %}
{% block content %}
Modification
{% endblock %}
~~~
## Parefeu
### conf/urls.py
~~~python
path('parefeu//update/',
login_required(views.ParefeuUpdate.as_view()),
name='parefeu-update'),
~~~
## Parefeu
### À faire
* ajouter un bouton de modification sur la page de détail d'un parefeu
# Menu
## Factorisation
### webui/views.py
~~~python
class ParefeuMenu(object):
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['menu_parefeu'] = 'active'
return context
~~~
## Factorisation
### webui/views.py
~~~python
class ParefeuCreate(ParefeuMenu, CreateView):
# supprimer get_context_data()
class ParefeuUpdate(ParefeuMenu, UpdateView):
# supprimer get_context_data()
class ParefeuDetail(ParefeuMenu, DetailView):
# supprimer get_context_data()
class ParefeuList(ParefeuMenu, ListView):
# supprimer get_context_data()
~~~
# Supprimer
## Parefeu
### webui/views.py
~~~python
from django.views.generic.edit import DeleteView
from django.urls import reverse_lazy
class ParefeuDelete(ParefeuMenu, DeleteView):
model = Parefeu
# lazy: interprétation plus tard
success_url = reverse_lazy('parefeux')
~~~
## Parefeu
### webui/templates/webui/parefeu_confirm_delete.html
~~~
{% extends "webui/home.html" %}
{% block content %}
Suppression
{% endblock %}
~~~
## Parefeu
### conf/urls.py
~~~python
path('parefeu//delete/',
login_required(views.ParefeuDelete.as_view()),
name='parefeu-delete'),
~~~
## Parefeu
### À faire
* ajouter un bouton de suppression sur la page de détail d'un parefeu
* créer un nouveau parefeu
* le supprimer
# Debugger
## Prérequis
~~~
$ pipenv install --dev Werkzeug
$ pipenv run ./manage.py runserver_plus --nopin
~~~
## Utiliser
~~~python
def home_v2(request):
a += 1
...
~~~
# FIN !