Commit 63322dc5 authored by Bonnegent Sebastien's avatar Bonnegent Sebastien
Browse files

cours 3 ok

parent 0542fafa
......@@ -21,10 +21,11 @@ séance.
## Cours 3
* suite des modèles avec relations (Regle, Parefeu)
* logging
* messages
* 1er page web
## Cours 4
* logging
* messages
* frontend: manipulation des objets
* script des gestions
......
......@@ -199,6 +199,7 @@ Superuser created successfully.</code></pre>
<li>localhost 127.0.0.0/8</li>
<li>www.insa-rouen.fr 193.49.10.214/32</li>
<li>dsi.insa-rouen.fr 193.49.10.146/32</li>
<li>ns.insa-rouen.fr 193.49.10.126/32</li>
</ul></li>
</ul>
</section></section>
......@@ -325,22 +326,22 @@ $ pipenv run ./manage.py migrate</code></pre>
<a class="sourceLine" id="cb18-5" title="5"></a>
<a class="sourceLine" id="cb18-6" title="6">admin.site.register(Service, ServiceAdmin)</a></code></pre></div>
</section></section>
<section><section id="groupe" class="title-slide slide level1"><h1>Groupe</h1></section><section id="à-faire-1" class="slide level2">
<h2>À faire</h2>
<section><section id="groupe" class="title-slide slide level1"><h1>Groupe</h1></section><section id="à-modifier-5" class="slide level2">
<h2>À modifier</h2>
<h3 id="webuimodels.py-3">webui/models.py</h3>
<ul>
<li>nom</li>
<li>adresses: de 0 à N Adresse</li>
</ul>
</section><section id="à-faire-2" class="slide level2">
<h2>À faire</h2>
</section><section id="à-modifier-6" class="slide level2">
<h2>À modifier</h2>
<h3 id="webuiadmin.py-3">webui/admin.py</h3>
<ul>
<li>interface d’administration</li>
<li>colonne ‘liste_des_adresses’</li>
</ul>
</section><section id="à-faire-3" class="slide level2">
<h2>À faire</h2>
</section><section id="à-modifier-7" class="slide level2">
<h2>À modifier</h2>
<h3 id="administration-4">Administration</h3>
<ul>
<li>ajouter un groupe <strong>Serveurs Web</strong> contenant
......@@ -349,6 +350,19 @@ $ pipenv run ./manage.py migrate</code></pre>
<li>www.insa-rouen.fr</li>
</ul></li>
</ul>
</section><section id="à-modifier-8" class="slide level2">
<h2>À modifier</h2>
<h3 id="administration-5">Administration</h3>
<ul>
<li>ajouter un groupe <strong>Serveurs DNS</strong> contenant
<ul>
<li>ns.insa-rouen.fr</li>
</ul></li>
<li>ajouter un groupe <strong>Serveurs Ldap</strong> contenant
<ul>
<li>ldap.insa-rouen.fr 192.168.211.40/32</li>
</ul></li>
</ul>
</section></section>
<section><section id="fin" class="title-slide slide level1"><h1>Fin !</h1></section></section>
</div>
......
......@@ -115,6 +115,7 @@ admin.site.register(Port, PortAdmin)
- localhost 127.0.0.0/8
- www.insa-rouen.fr 193.49.10.214/32
- dsi.insa-rouen.fr 193.49.10.146/32
- ns.insa-rouen.fr 193.49.10.126/32
# Service
## Factorisation
......@@ -252,20 +253,28 @@ admin.site.register(Service, ServiceAdmin)
~~~
# Groupe
## À faire
## À modifier
### webui/models.py
- nom
- adresses: de 0 à N Adresse
## À faire
## À modifier
### webui/admin.py
- interface d'administration
- colonne 'liste_des_adresses'
## À faire
## À modifier
### Administration
- ajouter un groupe **Serveurs Web** contenant
- dsi.insa-rouen.fr
- www.insa-rouen.fr
## À modifier
### Administration
- ajouter un groupe **Serveurs DNS** contenant
- ns.insa-rouen.fr
- ajouter un groupe **Serveurs Ldap** contenant
- ldap.insa-rouen.fr 192.168.211.40/32
# Fin !
This diff is collapsed.
......@@ -4,9 +4,10 @@ author:
title: Django par la pratique 3/7
---
# Départ
## Fichiers
- support: cours3.html
## Support
- cours3.html
## Préparation
### L'ancien
~~~
$ cd fwm2
......@@ -21,23 +22,12 @@ $ pipenv install
## Au programme
- suite des modèles avec relations
- Regle
- Parefeu
- Regle
# Règle
## Attributs
- priorite: un entier positif
- groupe: un groupe d'Adresse
- services: une liste de Service
- interface: une chaine de caractères (25)
- actif: un booléen
- sens: un élément de la liste Input, Forward, Output
- parefeu: un Parefeu 'modèle'
# Clé étrangère
## ForeignKey
- cas de Groupe et Parefeu
- lien vers une seule instance d'une autre classe
- chargé par l'ORM (regle.groupe.nom)
- null: valeur nulle base de données
- blank: valeur nulle formulaire
- on_delete [^on_delete]: comportement lors de la suppression de la cible
......@@ -48,32 +38,18 @@ $ pipenv install
[^on_delete]: https://docs.djangoproject.com/fr/2.2/ref/models/fields/
## webui/models.py
~~~python
SENS = (("i", "Input"), ("f", "Forward"), ("o", "Output"))
class Regle(models.Model):
priorite = models.PositiveIntegerField(default=0)
groupe = models.ForeignKey(Groupe, blank=True, null=True,
on_delete=models.CASCADE)
services = models.ManyToManyField(Service)
interface = models.CharField(default="", max_length=25,
blank=True)
actif = models.BooleanField(default=True)
sens = models.CharField(max_length=1, choices=SENS,
default="i")
parefeu = models.ForeignKey(Parefeu, on_delete=models.CASCADE)
~~~
# Parefeu
## À faire
## À modifier
### webui/models.py
- nom
- modification: date/heure de dernière modification
- modele: héritage d'un Parefeu
- admin: administrateur du parefeu (User)
## webui/models.py
## À modifier
### webui/models.py
~~~python
from django.contrib.auth.models import User
class Parefeu(AvecNom):
......@@ -87,8 +63,50 @@ class Parefeu(AvecNom):
verbose_name_plural = "parefeux"
~~~
## webui/models.py
# Règle
## Attributs
- priorite: un entier positif
- groupe: un groupe d'Adresse
- services: une liste de Service
- interface: une chaine de caractères (25)
- actif: un booléen
- sens: un élément de la liste Input, Forward, Output
- parefeu: un Parefeu
## À modifier
### webui/models.py
~~~python
SENS = (("i", "Input"), ("f", "Forward"), ("o", "Output"))
class Regle(models.Model):
priorite = models.PositiveIntegerField(default=0)
groupe = models.ForeignKey(Groupe, blank=True, null=True,
on_delete=models.CASCADE)
services = models.ManyToManyField(Service)
interface = models.CharField(default="", max_length=25,
blank=True)
actif = models.BooleanField(default=True)
sens = models.CharField(max_length=1, choices=SENS,
default="i")
parefeu = models.ForeignKey(Parefeu, on_delete=models.CASCADE)
~~~
## Activation
~~~
$ pipenv run ./manage.py makemigrations
$ pipenv run ./manage.py migrate
~~~
# Administration
## Parefeu
### webui/models.py
Afficher le nombre de règles.
~~~python
class Parefeu(AvecNom):
...
def nombre_de_regles(self):
nb = self.regle_set.count()
if self.modele:
......@@ -96,7 +114,7 @@ class Parefeu(AvecNom):
return nb
~~~
## À faire
## Parefeu
### webui/admin.py
- interface d'administration
- colonnes:
......@@ -113,4 +131,241 @@ class ParefeuAdmin(admin.ModelAdmin):
date_hierarchy = 'modification'
~~~
## Parefeu
Créer un parefeu:
- nom: serveur web
- proprietaire: admin
## Règle
### webui/admin.py
Afficher les colonnes suivantes:
- parefeu
- priorite
- groupe
- interface
- sens
- actif
## Règle 1
Créer la règle:
- priorite: 10
- services: web
- sens: input
- parefeu: serveur web
## Règle 2
Créer la règle:
- priorite: 5
- groupe: Serveurs DNS
- services: dns
- sens: output
- parefeu: serveur web
## Règle 3
Créer la règle:
- priorite: 15
- groupe: Serveurs Ldap
- services: ldap
- sens: output
- parefeu: serveur web
## à modifier
### Classement
Modifier l'ordre de tri des Règles pour avoir:
- parefeu
- priorite
- groupe
## à modifier
### webui/models.py
Ajouter Regle.liste_des_services()
### webui/models.py
Ajouter la colonne "liste_des_services"
entre "groupe" et "interface"
# MVC
## Modèle Vue Contrôleur
### Modèle
- webui/models.py
- logique métier
- intelligence
## Modèle Vue Contrôleur
### Vue
- webui/views.py
- templates
- conf/urls.py
- webui/urls.py
## Modèle Vue Contrôleur
### Contrôleur
- Django
## Définition
### Wikipedia
~~~
https://fr.wikipedia.org/wiki/Modèle-vue-contrôleur
~~~
# 1er page web
## Vue
### webui/views.py
~~~python
from django.http import HttpResponse
def home_v1(request):
return HttpResponse('ça marche !')
~~~
## Routage d'URLs
### conf/urls.py
~~~python
from django.contrib import admin
from webui import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.home_v1, name='home'),
]
~~~
## Résultat
- http://localhost:8000/
## Bonnes pratiques
- Pensez à utiliser le mode développeur (F12)
- CDN, attention aux dépendances extérieures
- limité le chargement des JS
## Mise en forme
### Bootstrap
- https://pypi.org/project/django-bootstrap-static/
- https://getbootstrap.com/
## Mise en forme
### Installation
~~~
$ pipenv install django-bootstrap-static fontawesome
~~~
## Activation
### conf/settings.py
~~~python
INSTALLED_APPS = [
# ...
'bootstrap',
'fontawesome',
]
~~~
## Templates
### webui/templates/webui/home.html
~~~html
{% load static %}
<!doctype html>
<html lang="fr"><head>
<meta charset="utf-8">
<meta name="viewport"
content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<title>Garage</title>
<link rel="stylesheet"
href="{% static 'bootstrap/css/bootstrap.min.css' %}">
<script defer
src="{% static 'fontawesome/js/fontawesome-all.min.js' %}">
</script></head>
~~~
## Templates
### webui/templates/webui/home.html
~~~html
<body>
{% block content %}<p>Bienvenue !</p>{% endblock %}
<script src="{% static 'bootstrap/js/jquery.min.js' %}">
</script>
<script src="{% static 'bootstrap/js/bootstrap.min.js' %}">
</script>
</body>
</html>
~~~
## Modifier la vue
### webui/views.py
~~~python
from django.shortcuts import render
def home_v2(request):
return render(request, 'webui/home.html', {})
~~~
## Navbar
### webui/templates/webui/home.html
~~~html
<nav class="navbar navbar-expand-md navbar-dark bg-dark mb-4">
<a class="navbar-brand" href="/">WebUI</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarCollapse">
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="#">Parefeux</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Services</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Ports</a>
</li>
</ul>
</div>
</nav>
~~~
## Authentification
### conf/urls.py
~~~python
# ...
path('accounts/', include('django.contrib.auth.urls')),
# ...
~~~
### conf/settings.py
~~~python
LOGOUT_REDIRECT_URL = '/'
LOGIN_REDIRECT_URL = '/'
~~~
## Templates
### webui/templates/registration/login.html
- le template doit être présent
## Templates
### webui/templates/webui/home.html
~~~
{% if user.is_authenticated %}
...
{% if user.is_staff %}
...
{% endif %}
{% endif %}
~~~
# FIN !
{% extends "webui/home.html" %}
{% block titre %}Authentification{% endblock %}
{% block content %}
{% if form.errors %}
<p>Il y a une erreur dans votre identifiant/mot de passe. Réessayer.</p>
{% endif %}
{% if next %}
{% if user.is_authenticated %}
<p>Votre compte n'a pas accès à cette page. Pour continuer, merci de vous
identifier avec un compte ayant les droits suffisants.</p>
{% else %}
<p>Veuillez vous authentifier.</p>
{% endif %}
{% endif %}
<form method="post" action="{% url 'login' %}">
{% csrf_token %}
<table>
<tr>
<td>{{ form.username.label_tag }}</td>
<td>{{ form.username }}</td>
</tr>
<tr>
<td>{{ form.password.label_tag }}</td>
<td>{{ form.password }}</td>
</tr>
</table>
<button class="btn btn-primary" type="submit">Connexion</button>
<input type="hidden" name="next" value="{{ next }}">
</form>
{% endblock %}
<!doctype html>
<html lang="fr">
{% load static %}
<head>
<title>{% block title %}Parefeux{% endblock %}</title>
<link rel="stylesheet" href="{% static 'bootstrap/css/bootstrap.min.css' %}">
<script defer src="{% static 'fontawesome/js/all.min.js' %}"></script>
</head>
<body>
{% block content %}<p>Bienvenue !</p>{% endblock %}
<script src="{% static 'bootstrap/js/jquery.min.js' %}"></script>
<script src="{% static 'bootstrap/js/bootstrap.min.js' %}"></script>
</body>
</html>
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment