From f9b7688be09720426ba957110e4587aad9aed75c Mon Sep 17 00:00:00 2001 From: Julien Palard Date: Tue, 21 Sep 2021 09:34:16 +0200 Subject: [PATCH] WIP django --- .github/workflows/build.yml | 8 +- django-initiation/Makefile | 33 + django-initiation/README.md | 27 + django-initiation/django.md | 945 +++++++++++++++++++++++++++++ django-initiation/static/stats.png | Bin 0 -> 83696 bytes django-initiation/test.py | 40 ++ 6 files changed, 1050 insertions(+), 3 deletions(-) create mode 100644 django-initiation/Makefile create mode 100644 django-initiation/README.md create mode 100644 django-initiation/django.md create mode 100644 django-initiation/static/stats.png create mode 100755 django-initiation/test.py diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1fc92e6..1bf85af 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -22,6 +22,8 @@ jobs: export deploy_key="" python3 -m pip install --user --upgrade pip python3 -m pip install --user mdtoreveal - PATH="$HOME/.local/bin/:$PATH" make -C initiation rsync - PATH="$HOME/.local/bin/:$PATH" make -C avancé rsync - PATH="$HOME/.local/bin/:$PATH" make -C drf-initiation rsync + export PATH="$HOME/.local/bin/:$PATH" + make -C initiation rsync + make -C avancé rsync + make -C drf-initiation rsync + make -C django-initiation rsync diff --git a/django-initiation/Makefile b/django-initiation/Makefile new file mode 100644 index 0000000..52099c4 --- /dev/null +++ b/django-initiation/Makefile @@ -0,0 +1,33 @@ +.PHONY: help +help: + @echo "Usage:" + @echo " make static # to build static version." + @echo " make test # to run tests." + @echo " make rsync # rsync to prod" + @echo " make clean" + +.PHONY: static +static: output/index.html + +.PHONY: check +test: + python test.py *.md + +%.html: %.md + mdtoreveal $< --output $@ + +output/index.md: django.md + mkdir -p output + cat $< > $@ + +.PHONY: rsync +rsync: static + rsync -vah --delete output/ mdk_fr@mdk.fr:/var/www/mdk.fr/django-initiation/ + +.PHONY: clean +clean: + rm -fr output/ + +.PHONY: serve +serve: + python -m http.server -d output/ diff --git a/django-initiation/README.md b/django-initiation/README.md new file mode 100644 index 0000000..6a7bbc1 --- /dev/null +++ b/django-initiation/README.md @@ -0,0 +1,27 @@ +# Contenu + +Side project : https://github.com/JulienPalard/drf-demos + +- Revue des bases et consolidation Python et Django +- Présentation des types d'API, approfondissement de REST/HATEOAS +- Rappels autour de la sémantique HTTP +- django-rest-framework: La sérialisation +- django-rest-framework: Les différents types de vues +- django-rest-framework: Les permissions +- django-rest-framework: Les relations +- Les tests et la maintenabilité + + +# Objectifs pédagogiques + +- Pouvoir démarrer rapidement un projet DRF. +- Savoir designer une API. +- Implémenter un service headless en utilisant DRF. + + +# TP + +- Projet 1 : API « Horloge parlante ». +- Projet 2 : API « memcached ». +- Projet 3 : API « file system ». +- Projet 4 : API « uptime manager ». diff --git a/django-initiation/django.md b/django-initiation/django.md new file mode 100644 index 0000000..6a0ca6c --- /dev/null +++ b/django-initiation/django.md @@ -0,0 +1,945 @@ +# Django Initiation + +par + +Julien Palard + +https://mdk.fr + +::: notes + +Introduce yourself! + + +# Django + +Django est une infrastructure d'applications web populaire et robuste. + +> The web framework for perfectionists with deadlines. + + +## Django : qui l'utilise ? + +- Instagram, Pineterest, Mozilla, Disqus, BitBucket, … + +![](static/stats.png) + + +# Les bonnes bases : Python + +On travaillera toujours dans un `venv` : + +```python +python -m pip install django +``` + +# La théorie — Projet + +Pour démarrer un projet, une commande : + +```python +django-admin startproject project +``` + +## La théorie — App + +Une fois dans le projet, pour créer une application, une commande : + +```python +python manage.py startapp watch +``` + +::: notes + +(et ajout dans `settings.py`) + + +## La théorie — Modèle + +Un « modèle » est la description d'une table. + +Ça rappelle un ORM, mais ça permet beaucoup plus de choses en Django. + +::: notes + +- admin +- forms +- serializers (API) +- class based views + + +## La théorie — Modèle + +Par exemple : + +```python +class Website(models.Model): + host = models.CharField(max_length=512) + is_up = models.BooleanField(null=True, blank=True) + last_check = models.DateTimeField(auto_now_add=True) +``` + +::: notes + +Prendre le temps d'expliquer les fields (leur relation avec la DB), et +les differents endroits ou Django peut reutiliser cette information +(widgets, validation, ...). + + +## La théorie — Première interface d'admin + +En une ligne, pourquoi pas : + +```python +admin.site.register(Website) +``` + + +## La théorie — la DB + +- PostgreSQL +- MySQL +- sqlite +- ... + +::: notes + +Leur faire croire 2 secondes qu'on va devoir s'installer et se +configurer un serveur de base de donnée :D + + +## La théorie — La DB + +```bash +python manage.py makemigrations +python manage.py migrate +``` + +::: notes + +On expliquera plus tard, leur dire que ça crée la DB et que le but +maintenant c'est surtout d'aller tester ça :) + + +## La théorie — L'interface d'administration + +On a une DB, mais pas encore d'utilisateur admin dedans : + +```bash +python manage.py createsuperuser +``` + +## La théorie — L'interface d'administration + +On a terminé, on peut démarrer le serveur : + +```bash +python manage.py runserver +``` + +# La pratique + +```bash +django-admin startproject project +cd project +python manage.py startapp watch +``` + +::: notes + +Biiien prendre le temps d'expliquer l'arborescence, de se promener, +d'y lire les commentaires. + + +## La pratique + +Ajout de l'app `watch` dans `project/settings.py` : + +```python +INSTALLED_APPS = [ + "watch", + ..., + ..., +] +``` + + +## Les modèles + +On va mettre celui-ci dans `watch/models.py`. + +```python +class Website(models.Model): + host = models.CharField(max_length=512) + is_up = models.BooleanField(null=True, blank=True) + last_check = models.DateTimeField(auto_now_add=True) +``` + + +## Première interface d'admin + +Et ça dans `watch/admin.py`. + +```python +from watch.models import Website + + +admin.site.register(Website) +``` + + +## Création de la DB + +```bash +python manage.py makemigrations +python manage.py migrate +``` + +::: notes + +Expliquer les deux étapes. + + +## L'interface d'administration + +On a une DB, mais pas encore d'utilisateur admin dedans : + +```bash +python manage.py createsuperuser +``` + +## L'interface d'administration + +On a terminé, on peut essayer maintenant ? + +```bash +python manage.py runserver +``` +::: notes + +Leur faire faire ça dans un **autre** shell. + +puis les laisser jouer avec l'interface d'admin, créer quelques sites... + + +## L'interface d'administration + +Les modèles, leurs `fields` ne servent donc pas qu'a l'ORM, cette +interface d'admin nous à demandé une ligne de code. + +::: notes + +Si ce n'est pas déjà fait, leur faire ajouter des `__str__`. + + +## Astuce + +On peut passer beaucoup de temps à peaufiner l'interface d'admin, +repoussez ça après avoir livré une première version. + + +# Manipulation des modèles + +## Mise en pratique + +Créez le modèle `Check` avec les champs `is_up`, `date`, `website`, et +`message`. + +::: notes + +Pour le champ `website` vous aurez besoin d'un `models.ForeignKey`, RTFM. + + +## L'admin + +Ajoutez une interface d'admin pour ce modèle, et ajoutez à la main quelques « *checks* ». + + +## L'ORM + +C'est l'occasion de sortir un `python manage.py shell`. + +```pycon +>>> from watch.models import Website +>>> Website.objects.all() +``` + +Essayer `.all`, `.filter`, `.get`, `.order_by`, et les slices. + + +# Les URLs + +Changons de sujet et rajoutons des URLs et des vues. + + +## Les URLs + +Dans `urls.py` on va se rajouter une URL pour la page d'accueil : + +```python +from votre_app import views + +urlpatterns = [ + ... + ... + path("", views.index, name=index), +] +``` + +## Les vues + +Dans `views.py` de l'app : + +```python +from django.http import HttpResponse + +def index(request): + html = "

Website Watcher

" + return HttpResponse(html) +``` + + +::: notes + +C'est bien mais écrire du HTML dans du Python c'est pas élégant. + + +## Les vues + +```python +from django.http import HttpResponse + +def index(request): + return render(request, "watch/index.html") +``` + + +## Les templates + +Dans `watch/templates/watch/index.html` ... + +Mais pourquoi `watch` deux fois ?? + + +## Les templates + +Dans `watch/templates/watch/index.html` : + +```html + + + + + Website Watch + + +

Website Watch

+ + +``` + +## Les vues + +Et si on ajoutais de la données provenant de la DB dans le template ? + + +## Les vues + +```python +from django.http import HttpResponse + +def index(request): + return render(request, "watch/index.html", {"websites": Website.objects.all()}) +``` + +## Les templates + +```html + +

Website Watch

+ + +``` + + +## La Debug Toolbar + +# Les tests + +## Les fixtures + + + +# L'ORM + +## Les *Managers* + +Exposent les opérations de requête de base de donnée, c'est le `.objects`. + +Ces opérations (des méthodes) renvoient des `queryset`s. + +## Les *Queryset* + +Introduction aux concepts Manager et Queryset, RelatedManager +Méthodes simples de requêtage en base de données + + +# Les URLS + +## path +## include +## namespaces + +# Les vues +## Function based views +## Class based views + +# Templates (Jour 2) +## filters, tags +## extends + +# Forms +## Forms fields +## Widgets +## ModelForm +## Validation + +# Modèles +## Relations +## ForeignKey +## ManyToManyField +## OneToOneField +## InlineModeladmin + +# Users +## Groups +## Permissions +## Authentication +How to protect views + +# Static assets (day 3) +# Deployment +## gunicorn + +# Les bonnes bases : Python + +`*args, **kwargs` + + +## Les bonnes bases : Python + +La MRO. + + +## Les bonnes bases : Python + +La gestion des dépendances avec `pip-compile`. + + +## Pratique + +Rédiger un script, en ligne de commande, permettant de tester si un +site internet est en bonne santé : + +```bash +$ python checkurl.py mdk.fr +Redirection HTTPS: OK +Status: OK (200) +Response time: OK (0.125s < 1s) +Certificate: OK (expires in 68 days) +HSTS: OK (max-age=63072000; always) +``` + +::: notes + +versionnez ! + + +## Les bonnes bases : Django + +```bash +python -m pip install Django +django-admin startproject demo +cd demo +./manage.py migrate +``` + +::: notes + +Leur faire faire le tour du propriétaire. + + +## Vocabulaire + +Dans Django on va avoir des `models`, des `vues`, et des `urls`. + +::: notes + +Peut être aussi des templates, et l'admin. + + +## Debug toolbar + +```bash +python -m pip install django-debug-toolbar +``` + +L'ajouter dans `settings.py` et `urls.py`. + + +## Un compte administrateur + +```bash +./manage.py createsuperuser +``` + +Vous devez maintenant avoir une interface d'administration qui +fonctionne, avec la Debug Toolbar à droite. + + +## Bonnes pratiques + +On versionne et on prend le temps de poser un `.gitignore`. + + +## Bonnes pratiques + +On en mettra le moins possible dans le dossier du projet, on +utilisera des applications pour le reste du code. + + +## Bonnes pratiques + +Une bonne gestion des dépendances avec `pip-tools`. + + +## Bonnes pratiques + +On surcharge l'objet `User`, même si on pense ne pas en avoir besoin : + +```python +class User(django.contrib.auth.models.AbstractUser): + ... +``` + +et : + +```python +AUTH_USER_MODEL = ... +``` + +## Les URLs + +```python +urlpatterns = [ + path("admin/", admin.site.urls), + path("__debug__/", include(debug_toolbar.urls)), +] +``` + +## Les vues + +```python +def index(request): + return HttpResponse("Hello world") +``` + +## Pratique + +Faire une page d'accueil pour votre Django. + + +## Les modèles + +Désambiguons `makemigrations` et `migrate` d'abord. + + +## Les modèles + +Personalisez le modèle `User` : + +```python +class User(django.contrib.auth.models.AbstractUser): + ... +``` + +## Les modèles + +Créez un modèle `Domain` : + +```python +class Domain(models.Model): + domain = models.CharField(max_length=253) + is_up = models.BooleanField(null=True, blank=True) +``` + +## L'admin + +Indiquez l'existance du modèle domaine à l'admin : + +```python +admin.site.register(Domain) +``` + +## Testez + +## Les bonnes bases : DRF + +```bash +python -m pip install djangorestframework + # Ajouter l'app rest_framework +``` + + +## vocabulaire + +Dans DRF on va avoir des `serializers`, des `routers`, des `views` et des `permissions`. + + +## Le routage de Django + +La requête parcourre les `urlpatterns` du projet, c'est donc à lui +d'inclure les `urlpatterns` des différentes applications. + + +## Resources + +Pour Django on avait : https://ccbv.co.uk/ (Memo: « Classy Class-Based-View »). + +Pour DRF on a : https://www.cdrf.co/ (Memo: « Classy DRF »). + + +## Les media types + +Pour représenter des données on utilise un *media type* il existe +plusieurs écoles : + +- Tout est liste (`Collection+JSON`, ...). +- Tout est article (`atom+xml`, ...). +- Snowflakes (`application/json`). + +(On ne parle donc pas de RPC, on parle de **représentation**). + + +## Les media types + +Certains *media type* sont plus « tout terrain » que d'autres : + +- `JSON-LD`, avec Hydra : le plus générique. +- `HAL` : Pour la lecture seule. +- `application/problem+json` +- `application/json-patch+json` +- `application/json-home` +- ... + +::: notes + +Pensez au web actuel : il mélange text/html, application/javascript, text/css, ... + + +# Mais qu'est-ce que REST ? + +C'est un ensemble de contraintes : + +- Client-Serveur +- Sans état +- Une URI identifie une resource +- Les resources sont manipulées via leurs représentations +- ... + +::: notes + +Pensez au web actuel pour chaque contrainte : ça marche. + + +## Client-Serveur + +✓ + + +## Sans état + +Attention à l'interprétation : on ne parle pas d'un site statique pour autant. + +Le serveur a un état, et cet état est amené à changer (un `PUT`, un +`POST`, un `DELETE` vont typiquement changer quelque chose). + + +## Sans état + +Quand on dit « *stateless* » on pense au niveau d'une requête : + +> L'interprétation d'une requête ne doit **pas** dépendre des requêtes précédentes. + +C'est tout. + +::: notes + +Prendre l'exemple du client qui s'endort, puis qui revient 8h plus +tard pour terminer. Ou de plusieurs backends derrière un LB. + + +## Sans état + +Donc pas de : + +```text +PUT /workon/user/1 +PUT /user -d '{"name": "Alan"}' +PUT /workon/user/2 +PUT /user -d '{"name": "Ada"}' +``` + +## Sans état + +Mais : + +```text +PUT /users/1 -d '{"name": "Alan"}' +PUT /users/2 -d '{"name": "Ada"}' +``` + +::: notes + +Si le serveur a oublié la première requête quand elle arrive, pas de souci. + +Si les deux requêtes sont gérées par des serveurs différents, pas de souci. + + +## Coopération avec les caches intermédiaires + +C'est surtout respecter la sémantique HTTP. + +Avec HTTPS les problèmes causés par des proxy inconnus, éventuellement +ne respectant pas la sémantique HTTP ont disparu. + + +::: notes + +Attention, certains réseaux, de fait, ne respectent pas la sémantique +HTTP : un POST pourraît être exceptionnellement rejoué, sur un réseau +mobile, lors du roaming. + + +## Une URI identifie une resource + +> Cool URIs don't change. + +REST ne nous impose pas des URL sémantiques / expressives. + +Cependant les humains les apprécient, une URL bien choisie c'est comme +un nom de variable bien choisi, c'est agréable. + +::: notes + +La slide n'en parle pas mais bien en parler: +- Une URI == une resource. +- Une resource == une URI. + + +## Manipulation par la représentation + +```text +GET /users/1 +{"name": "Alan", "birthdate": "1912-06-23"} +PUT /users/1 -d '{"name": "Alan Turing", "birthdate": "1912-06-23"}' +``` + +::: notes + +Faire une parenthèse sur les etags, `If-Match`, `If-None-Match`. + + +## Messages auto-descriptifs + +Toutes les informations nécessaires à l'interprétation du message +doivent être dans le message. + +Je n'ai rien contre un lien vers la doc. + + +## HATEOAS + +C'est celui qui fait peur. + +TL;DR: data + interactions + +::: notes + +Prendre l'exemple d'une boutique avec le bouton "acheter" qui n'est +présent que s'il y a du stock. + + +## HATEOAS + +Le mauvais exemple : + +```json +{ + "@id": "/products/123", + "name": "Brioche", + "in_stock": false, + "buy": { + "@id": "/cart/", + "@type": "hydra/CreateResourceOperation", + "method": "POST", + "expects": {"@id": "/products/123"} + } +} +``` + +::: notes + +Ce n'est pas vraiment du JSON-LD+Hydra, mais ça loge das la slide... + +## HATEOAS + +> support on building Hypermedia APIs with REST framework is planned for a future version. + + +## En parlant de sémantique HTTP + +TL;DR + +## GET / HEAD / OPTIONS + +- `safe` +- `idempotent` + +## PUT + +- `idempotent` + +## DELETE + +- `idempotent` + +## POST + +# La configuration de Django + +## Trois solutions + +- `include local_settings.py` +- `django-configurations` +- `django-environ` + +# Et si on revenait à DRF !? + +## Les serialiseurs + +Leur rôle est de transformer un objet Python en un objet Python +facilement sérialisable (en JSON typiquement). + +Il va donc, par exemple transformer objet datetime en chaîne, puisque +JSON ne spécifie pas de représentation pour les dates. + +::: notes + +Et vice versa. + + +## Les URLs + +Pour commencer : aucune différence avec Django. + + +## Les vues + +```python +from rest_framework.decorators import api_view +from rest_framework.response import Response + +@api_view(["GET"]) +def hello(request): + return Response({"Hello": "world."}) +``` + + +## Pratique + +Avec juste un path dans `urlpatterns` et une vue, faites une API qui +donne l'heure : + +``` +$ curl 0:8000/horloge/ +{"datetime":"2021-05-31T12:24:04.534708"} +``` + + +## Les autres méthodes + +``` +@api_view(["GET", "PUT", "DELETE"]) +``` + + +## Pratique + +Sur une autre `url`, par exemple `/cache/`, implémentez un +`memcached`, testez-le avec `curl`. + + +## Serializers + +- serializers.BaseSerializer +- serializers.ModelSerializer + + +## BaseSerializer + +`to_representation` / `to_internal_value` + +```python +class DateSerializer(serializers.BaseSerializer): + def to_representation(self, instance): + return instance.isoformat() +``` + +## Pratique + +Implémentez un `FileSerializer` prenant un `Path` de `pathlib` et +renvoyant : +```json +{ + "self": "http://127.0.0.1:8000/files/.", + "name": "drf-demo", + "path": ".", + "size": 4096, + "ctime": "2021-05-30", "mtime": "2021-05-30", "atime": "2021-04-22", + "mode": "0o40755", + "is_dir": true, + "files": [ + { +``` + + +## Permissions + +```python +class IsOwner(permissions.BasePermission): + def has_object_permission(self, request, view, obj): + return request.user == obj.owner +``` + +## HyperLinkedModelSerializer + +```python +class DomainSerializer(HyperlinkedModelSerializer): + class Meta: + model = Domain + fields = ["domain", "is_up", "checks_url", "url"] +``` + +## ViewSets + +```python +class DomainViewSet(ModelViewSet): + queryset = Domain.objects.all() + serializer_class = DomainSerializer + permission_classes = [IsOwner] +``` diff --git a/django-initiation/static/stats.png b/django-initiation/static/stats.png new file mode 100644 index 0000000000000000000000000000000000000000..92aa888fb946eeb1dc130e1ca452c792f32e8907 GIT binary patch literal 83696 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 "): + if '"""' in example: + f.write(f"""def _{function_name}():\n r'''""" + example + """\n'''\n\n""") + else: + f.write(f'''def _{function_name}():\n r"""''' + example + '''\n"""\n\n''') + else: + f.write(example + "\n\n") + f.flush() + if args.debug: + with open(f.name) as py_source: + print(py_source.read()) + spec = importlib.util.spec_from_file_location("to_test", f.name) + to_test = importlib.util.module_from_spec(spec) + spec.loader.exec_module(to_test) + doctest.testmod(to_test, verbose=args.verbose)