Sébastien Bonnegent
The web framework for perfectionists with deadlines.1
$ git clone https://gitlab.insa-rouen.fr/bonnegent/cours_django.git
$ cd cours_django
$ mkdir fwm1
$ cd !$
$ pipenv --python 3.6
$ pipenv install django django-extensions ipython
Une application est une application Web qui fait quelque chose – par exemple un système de blog, une base de données publique ou une application de sondage. Un projet est un ensemble de réglages et d’applications pour un site Web particulier. Un projet peut contenir plusieurs applications. Une application peut apparaître dans plusieurs projets.3
$ pipenv run django-admin startproject conf .
$ pipenv run django-admin startapp webui
DEBUG = True
ALLOWED_HOSTS = []
ROOT_URLCONF = 'conf.urls'
LANGUAGE_CODE = 'fr-fr'
TIME_ZONE = 'Europe/Paris'
SECRET_KEY = 'Une_clef_secrete_et_longue!'
$ pipenv run ./manage.py generate_secret_key
f#wgrz$@#wh@*x5)_+(*$$^aw(c!q#a4)c0230bwp!iy
$ pipenv run ./manage.py makemigrations
$ pipenv run ./manage.py migrate
$ pipenv run ./manage.py shell
$ # shell avec chargement automatique des classes
$ pipenv run ./manage.py shell_plus
$ pipenv run ./manage.py createsuperuser
$ pipenv run ./manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
September 28, 2017 - 13:29:48
Django version 1.11, using settings 'conf.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Gestion des règles des parefeux à travers une interface web. On pourra créer des groupes de ports / services et gérer plusieurs parefeux différents.
Note: pas de clé primaire !
$ pipenv run ./manage.py makemigrations
Migrations for 'webui':
webui/migrations/0001_initial.py
- Create model Port
$ pipenv run ./manage.py migrate
...
$ cat webui/migrations/0001_initial.py
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [ ]
operations = [
migrations.CreateModel(
name='Port',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('protocole', models.CharField(choices=[('a', 'any'), ('t', 'tcp'), ('u', 'udp'), ('i', 'icmp')], default='a', max_length=1)),
('debut', models.PositiveIntegerField(default=0)),
('fin', models.PositiveIntegerField(default=0)),
],
),
]
Modifier l’affichage des instances.
>>> 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)>]>
Modifier l’ordre des instances.
>>> Port.objects.get(debut=22)
<Port: 22(any)>
>>> Port.objects.get(debut=80)
webui.models.Port.MultipleObjectsReturned: get() returned more than one Port
In [1]: Port.objects.filter(debut=80)
Out[1]: <QuerySet [<Port: 80(tcp)>, <Port: 80-88(tcp)>]>
In [2]: Port.objects.filter(debut=80).count()
Out[2]: 2
In [3]: Port.objects.filter(debut=80)[1]
Out[3]: <Port: 80-88(tcp)>
In [4]: Port.objects.filter(debut__gt=20)
Out[4]: <QuerySet [<Port: 22(tcp)>, <Port: 25(tcp)>,
<Port: 80(tcp)>, <Port: 80-88(tcp)>]>
In [5]: Port.objects.filter(debut__gt=20).filter(debut__lte=25)
Out[5]: <QuerySet [<Port: 22(tcp)>, <Port: 25(tcp)>]>
In [6]: Port.objects.filter(debut__gt=20, debut__lte=25)
Out[6]: <QuerySet [<Port: 22(tcp)>, <Port: 25(tcp)>]>
In [1]: Port.objects.all()
Out[1]: <QuerySet [<Port: 22(any)>, <Port: 25(tcp)>,
<Port: 80(tcp)>, <Port: 80-88(tcp)>]>
In [2]: Port.objects.get(fin=88)
Out[2]: <Port: 80-88(tcp)>
In [3]: Port.objects.get(fin=88).delete()
Out[3]: (1, {'webui.Port': 1})
In [4]: Port.objects.filter(debut__gt=22,
debut__lte=25).delete()
Out[4]: (1, {'webui.Port': 1})
In [5]: Port.objects.all().delete()
Faire la classe suivante
- nom: chaine de caractères (25)
- ip: une adresse IP
- masque: le masque réseau (défaut: 32)