Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Bonnegent Sebastien
cours_django
Commits
63322dc5
Commit
63322dc5
authored
Nov 19, 2019
by
Bonnegent Sebastien
Browse files
cours 3 ok
parent
0542fafa
Changes
7
Expand all
Hide whitespace changes
Inline
Side-by-side
README.md
View file @
63322dc5
...
...
@@ -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
...
...
cours2.html
View file @
63322dc5
...
...
@@ -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>
...
...
cours2.md
View file @
63322dc5
...
...
@@ -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 !
cours3.html
View file @
63322dc5
This diff is collapsed.
Click to expand it.
cours3.md
View file @
63322dc5
...
...
@@ -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 !
fwm3/webui/templates/registration/login.html
0 → 100644
View file @
63322dc5
{% 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 %}
fwm3/webui/templates/webui/home.html
0 → 100644
View file @
63322dc5
<!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>
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment