Commit df5f317a authored by Bonnegent's avatar Bonnegent
Browse files

cours 1 ok

parent 37ceaec2
DEP=$(wildcard *.sty images/*.jpg images/*.png)
THEME=Custom
PDF=evince --presentation
CM=impressive -t Crossfade --nologo
pdf/01.pdf: cours_01.md $(DEP)
pandoc -st beamer -V theme:$(THEME) -V lang:fr-FR cours_01.md -o pdf/01.pdf
1: pdf/01.pdf
#impressive -t Crossfade --nologo pdf/01.pdf
evince pdf/01.pdf
$(PDF) pdf/01.pdf
cm1: pdf/01.pdf
$(CM) pdf/01.pdf
pdf/02.pdf: cours_02.md $(DEP)
pandoc -st beamer -V theme:$(THEME) -V lang:fr-FR cours_02.md -o pdf/02.pdf
2: pdf/02.pdf
$(PDF) pdf/02.pdf
cm2: pdf/02.pdf
$(CM) pdf/02.pdf
pdf/03.pdf: cours_03.md $(DEP)
pandoc -st beamer -V theme:$(THEME) -V lang:fr-FR cours_03.md -o pdf/03.pdf
3: pdf/03.pdf
$(PDF) pdf/03.pdf
cm3: pdf/03.pdf
$(CM) pdf/03.pdf
pdf/04.pdf: cours_04.md $(DEP)
pandoc -st beamer -V theme:$(THEME) -V lang:fr-FR cours_04.md -o pdf/04.pdf
4: pdf/04.pdf
$(PDF) pdf/04.pdf
cm4: pdf/04.pdf
$(CM) pdf/04.pdf
pdf/05.pdf: cours_05.md $(DEP)
pandoc -st beamer -V theme:$(THEME) -V lang:fr-FR cours_05.md -o pdf/05.pdf
5: pdf/05.pdf
$(PDF) pdf/05.pdf
cm5: pdf/05.pdf
$(CM) pdf/05.pdf
pdf/06.pdf: cours_06.md $(DEP)
pandoc -st beamer -V theme:$(THEME) -V lang:fr-FR cours_06.md -o pdf/06.pdf
6: pdf/06.pdf
$(PDF) pdf/06.pdf
cm6: pdf/06.pdf
$(CM) pdf/06.pdf
pdf/07.pdf: cours_07.md $(DEP)
pandoc -st beamer -V theme:$(THEME) -V lang:fr-FR cours_07.md -o pdf/07.pdf
7: pdf/07.pdf
$(PDF) pdf/07.pdf
cm7: pdf/07.pdf
$(CM) pdf/07.pdf
clean:
rm -rf pdf/*.pdf
Objectifs
=========
Support de cours pour 7 créneaux de 1h30 sur le format 30mn de CM / 1h de TP
par séance.
Installation sur une fedora 26
==============================
......@@ -13,6 +19,6 @@ Ensuite, il y a un Makefile par sous répertoire.
Outils utilisés
===============
* vi
* vim
* pandoc
* https://blog.rom1v.com/2014/02/des-slides-beamer-en-markdown/
% Django par la pratique #01
% Sébastien Bonnegent
% version du 22 octobre 2017
% version 17.10.22
# Prérequis
## Virtual Env 1/2
## Virtual Env #1
Un environnement virtuel pour l'exécution de python.
### Création
~~~
$ python3 -m venv venv
~~~
## Virtual Env 2/2
## Virtual Env #2
### Utilisation
~~~
$ # Entrée
$ source venv/bin/activate
......@@ -28,15 +26,13 @@ $ desactivate
. . .
### Suppression
~~~
$ rm -rf venv
~~~
## Python In Python 1/3
## Python In Python #1
### Commandes de base
~~~
$ pip search django
$ pip install Django==1.11.5
......@@ -46,7 +42,6 @@ $ pip uninstall django
. . .
### Paquets intéressants
~~~
$ pip install django
$ pip install django-hijack django-hijack-admin
......@@ -54,10 +49,9 @@ $ pip install sphinx sphinx-bootstrap-theme
$ pip install django-extensions
~~~
## Python In Python 2/3
## Python In Python #2
### État des paquets installés
~~~
$ pip freeze
alabaster==0.7.10
......@@ -74,21 +68,42 @@ django-hijack==2.1.4
. . .
### Enregistrement de l'état
~~~
$ pip freeze > requirements.txt
~~~
## Python In Python 3/3
## Python In Python #3
### Installer / mettre à jour
~~~
$ pip install --upgrade --requirement requirements.txt
~~~
# Django
### Définition
> The web framework for perfectionists with deadlines.[^dj]
[^dj]: \tiny https://www.djangoproject.com/
## About
### Qu'est ce que c'est ?
- framework pour applications web
- en python
- ORM
- moteur de templates
- MVC
. . .
### Avantages
- gestion des migrations
- rapidité de mise en place
- factorisation du code
- ...
## Création du projet
~~~
......@@ -100,7 +115,7 @@ $ mv conf fwm
\center\includegraphics[height=2.5cm]{images/tree-fwm.png}
## Création de l'application 1/2
## Création de l'application #1
Différences entre un projet et une application:
......@@ -115,7 +130,7 @@ Différences entre un projet et une application:
[^ted]: \tiny https://docs.djangoproject.com/fr/1.11/intro/tutorial01/
## Création de l'application 2/2
## Création de l'application #2
Application de gestions des parefeux.
......@@ -128,7 +143,6 @@ $ ./manage.py startapp webui
## Activation de l'application
### vi conf/settings.py
~~~python
INSTALLED_APPS = [
'django.contrib.admin',
......@@ -146,6 +160,9 @@ INSTALLED_APPS = [
### conf/settings{\_common,}.py
~~~
$ ./manage.py generate_secret_key
f#wgrz$@#wh@*x5)_+(*$$^aw(c!q#a4)c0230bwp!iy
$
$ mv conf/settings.py conf/settings_common.py
$ cat conf/settings.py
from .settings_common import *
......@@ -154,7 +171,7 @@ ALLOWED_HOSTS = ['*']
SECRET_KEY = 'Une_clef_secrete_et_longue!'
~~~
. . .
## Pour git
### .gitignore
~~~
......@@ -169,7 +186,6 @@ db.sqlite3*
## Configuration initiale
### Préparation de la BD
~~~
$ ./manage.py makemigrations
$ ./manage.py migrate
......@@ -178,24 +194,24 @@ $ ./manage.py migrate
. . .
### Création d'un compte admin
~~~
$ ./manage.py createsuperuser
~~~
. . .
## Commandes de base
### Accès au shell
~~~
$ ./manage.py shell
$ # shell avec chargement automatique des classes
$ ./manage.py shell_plus
~~~
## Lancement du serveur de développement
. . .
### ./manage.py runserver
### Lancement du serveur de développement
~~~
$ ./manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
......@@ -203,14 +219,167 @@ September 28, 2017 - 13:29:48
Django version 1.11, using settings 'monsite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
~~~
# Modèles
## Nos classes d'objets
- Port
- Service
- Adresse
- Groupe
- Regle
- Modele
- Parefeu
## Port #1
### Doit contenir
- protocole: tcp, udp, ...
- début: entier, 0 par défaut
- fin: entier, 0 par défaut
. . .
### webui/models.py
~~~{.py .numberLines}
class Port(models.Model):
protocole = models.CharField(default="any",
max_length=5)
debut = models.PositiveIntegerField(default=0)
fin = models.PositiveIntegerField(default=0)
~~~
## Port #2
### Appliquer les modifications
~~~
$ ./manage.py makemigrations
$ ./manage.py migrate
~~~
. . .
### webui/migrations/
~~~
$ ls webui/migrations/
0001_initial.py
0002_auto_20171003_0823.py
~~~
# FW
## Port #3
### ./manage.py shell_plus
~~~{.py .numberLines}
>>> p = Port()
>>> p.protocole
'any'
>>> p.debut
0
>>> p.fin
0
>>> p.debut = 22
>>> p.save()
>>> p
<Port: Port object>
~~~
## Port #4
### Modifier l'affichage
~~~{.py .numberLines}
def __str__(self):
msg = "%d" % self.debut
if self.debut < self.fin:
msg += "-%d" % self.fin
return "%s(%s)" % (msg, self.protocole)
~~~
## Règles
## Port #5
- toto
- titi
### ./manage.py shell_plus
~~~{.py .numberLines}
>>> p = Port(debut=80, protocole="tcp", fin=88)
>>> p
<Port: 80-88(tcp)>
>>> p.save()
>>> p = Port(debut=80, protocole="tcp")
>>> p
<Port: 80(tcp)>
>>> p.save()
>>> Port(protocole="tcp", debut=25).save()
>>> Port.objects.all()
<QuerySet [<Port: 22(any)>, <Port: 80-88(tcp)>,
<Port: 80(tcp)>, <Port: 25(tcp)>]>
~~~
## Port #6
### Modifier l'ordre d'affichage
~~~{.py .numberLines}
class Port(models.Model):
class Meta(object):
ordering = ("debut", "protocole")
~~~
. . .
sphinx
### ./manage.py shell_plus
~~~{.py .numberLines}
>>> Port.objects.all()
<QuerySet [<Port: 22(any)>, <Port: 25(tcp)>,
<Port: 80(tcp)>, <Port: 80-88(tcp)>]>
~~~
## Port #7
### ./manage.py shell_plus
~~~{.py .numberLines}
>>> Port.objects.get(debut=22)
<Port: 22(any)>
>>> Port.objects.get(debut=80)
...: get() returned more than one Port
>>> Port.objects.filter(debut=80)
<QuerySet [<Port: 80(tcp)>, <Port: 80-88(tcp)>]>
>>> Port.objects.filter(debut=80).count()
2
>>> p = Port.objects.filter(debut=80)[1]
>>> p
<Port: 80-88(tcp)>
>>> p.delete()
(1, {'webui.Service_ports': 0, 'webui.Port': 1})
~~~
## Port #8
### ./manage.py shell_plus
~~~{.py .numberLines}
>>> Port.objects.filter(debut__gt=20)
<QuerySet [<Port: 22(any)>, <Port: 25(tcp)>,
<Port: 80(tcp)>]>
>>> Port.objects.filter(debut__gt=20)\
.filter(debut__lte=25)
<QuerySet [<Port: 22(any)>, <Port: 25(tcp)>]>
>>> Port.objects.filter(debut__gt=20, debut__lte=25)
<QuerySet [<Port: 22(any)>, <Port: 25(tcp)>]>
>>> Port.objects.filter(debut__gt=22,
debut__lte=25).delete()
(1, {'webui.Service_ports': 0, 'webui.Port': 1})
~~~
## À faire
### https://docs.djangoproject.com/fr/
- Service
- nom: chaine de caractères (25)
- ports: liste de Port
- Adresse
- nom: chaine de caractères (25)
- ip: une adresse IP
- masque: le masque réseau (défaut: 32)
- Groupe
- nom: chaine de caractères (25)
- adresses: une liste d'Adresse
Supports Markdown
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