Skip to content
GitLab
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
5b1803f6
Commit
5b1803f6
authored
Dec 19, 2018
by
Bonnegent Sebastien
Browse files
cours 7 ok
parent
51d9f1f7
Changes
3
Hide whitespace changes
Inline
Side-by-side
cours_07.md
View file @
5b1803f6
% Django par la pratique #07
% Sébastien Bonnegent
%
https://framagit.org/bonnegent/cours
\_
django
%
version 2018
# Gabarits avancés
## Pour la séance
### Objectifs
# Prérequis
## Base de départ
### Virtual Env
*
source /opt/venv/django/bin/activate
*
pipenv shell
*
pipenv install djangorestframework
*
inclusion de gabarit avec paramètre
*
édition des règles d'un parefeu
# À faire
## La classe Regle
### webui/models.py
*
set
\_
actif(self):
*
change 'self.actif'
*
save() pour la date de dernière modif
*
set
\_
priorite(self, nb):
*
affecte une priorité
*
test si c'est un nombre entier
*
et qu'il est strictement positif
## Formulaires
### webui/forms.py
*
écrire RegleForm
*
champs: priorite, groupe, services, interface, sens
## Les vues
### webui/views.py
### Sources
~~~
$ #!! settings.py et db.sqlite3 dans le dépôt !!
$ git clone \
https://gitlab.insa-rouen.fr/bonnegent/vehicules.git
$ cd vehicules
$ git checkout cours_7_debut
~~~
*
def regle
\_
create(request, parefeu
\_
id)
*
création d'une nouvelle règle
*
redirect vers la page du parefeu
*
def regle
\_
activable(request, pk)
*
état actif / inactif
*
def regle
\_
priorite(request, pk, remove, nombre)
*
pk: clé d'une règle
*
remove: booléen (True on soustrait)
*
nombre: le nombre a enlevé/ajouté
*
def regle
\_
delete(request, pk)
*
suppression d'une règle inactive
*
redirect vers la page du parefeu
## Configuration
### conf/settings.py
~~~
python
INSTALLED_APPS
=
(
...
'rest_framework'
,
)
REST_FRAMEWORK
=
{
# Use Django's standard `django.contrib.auth`
# permissions, or allow read-only access for
# unauthenticated users.
'DEFAULT_PERMISSION_CLASSES'
:
[
'rest_framework.permissions.'
\
'DjangoModelPermissionsOrAnonReadOnly'
]
}
~~~
# Accès aux utilisateurs
## Routage
### garage/api.py (supports_cours_07/api_v1.py)
~~~
python
class
UserSerializer
(
serializers
.
HyperlinkedModelSerializer
):
class
Meta
:
model
=
User
fields
=
(
'url'
,
'username'
,
'email'
,
'is_staff'
)
router
=
routers
.
DefaultRouter
()
router
.
register
(
'user'
,
UserViewSet
)
~~~
## Liens URI / views
### webui/urls.py
## URLs
### conf/urls.py
~~~
python
from
garage.api
import
router
*
rendre disponible les fonctions créées précédemment
urlpatterns
=
[
path
(
'api/'
,
include
(
router
.
urls
)),
]
~~~
## Gabarits #1: afficher les régles d'un parefeu
## Utilisation
~~~
$ curl -H 'Accept: application/json; indent=4' \
-u admin:admin http://127.0.0.1:8000/api/user/
~~~
### webui/templates/webui/regle\_list.html
. . .
*
créer un tableau
*
affiche les règles se trouvant dans la liste regle
\_
list
*
utiliser regle
\_
list.html dans parefeu
\_
detail.html
~~~
$ curl -H 'Accept: application/json; indent=4' \
http://127.0.0.1:8000/api/user/1/
~~~
. . .
### webui/templates/webui/parefeu\_detail.html
~~~
{% include "webui/regle_list.html" with
regle_list=parefeu.modele.regle_set.all only %}
{% include "webui/regle_list.html" with
regle_list=parefeu.regle_set.all %}
$ curl -X POST -d username=new -d email=new@example.com \
-d is_staff=false -H 'Accept: application/json; indent=4' \
-u admin:admin http://127.0.0.1:8000/api/user/
~~~
## Gabarits #2: mode édition
. . .
*
interface web: http://127.0.0.1:8000/api/ :)
### webui/templates/webui/regle\_list.html
## À faire
*
Vehicule
*
Garage
*
prise en compte de la variable can
\_
edit
*
mode édition
*
ajout d'une nouvelle règle
# Limitation des droits
## Vehicule
### garage/api.py
~~~
python
from
rest_framework
import
...,
permissions
# Fin
## FireWall Manager
class
IsOwnerOrReadOnly
(
permissions
.
BasePermission
):
def
has_object_permission
(
self
,
request
,
view
,
obj
):
# Read permissions are allowed to any request
if
request
.
method
in
permissions
.
SAFE_METHODS
:
return
True
https://framagit.org/bonnegent/fwm
# Write permissions are only allowed to the owner
return
obj
.
proprietaire
==
request
.
user
~~~
## Vehicule
### garage/api.py
~~~
python
class
VehiculeViewSet
(...
permission_classes
=
(
permissions
.
IsAuthenticatedOrReadOnly
,
IsOwnerOrReadOnly
,)
~~~
pdf/07.pdf
View file @
5b1803f6
No preview for this file type
supports_cours_07/api_v1.py
0 → 100644
View file @
5b1803f6
"""API Rest"""
from
django.contrib.auth.models
import
User
from
rest_framework
import
serializers
,
viewsets
,
routers
# Serializers define the API representation.
class
UserSerializer
(
serializers
.
HyperlinkedModelSerializer
):
class
Meta
:
model
=
User
fields
=
(
'url'
,
'username'
,
'email'
,
'is_staff'
)
# ViewSets define the view behavior.
class
UserViewSet
(
viewsets
.
ModelViewSet
):
queryset
=
User
.
objects
.
all
()
serializer_class
=
UserSerializer
# Routers provide a way of automatically determining the URL conf.
router
=
routers
.
DefaultRouter
()
router
.
register
(
'users'
,
UserViewSet
)
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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