--- 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

{% csrf_token %} {{form.as_table}}
{% 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

{% csrf_token %} {{form.as_table}}
{% 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

{% csrf_token %}

Êtes-vous sûr de vouloir supprimer le parefeu '{{ object.nom }}' ?

Annuler
{% 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 !