From 0f330e7872492377bb9fb5d13efc10ee61d8baca Mon Sep 17 00:00:00 2001 From: Dimitri Merejkowsky Date: Fri, 1 Mar 2019 21:50:14 +0100 Subject: [PATCH] Update session 07 --- sessions/img/client-serveur.png | Bin 0 -> 21097 bytes sessions/python-07.md | 289 +++++++++++++++++++++++++++++++- 2 files changed, 288 insertions(+), 1 deletion(-) create mode 100644 sessions/img/client-serveur.png diff --git a/sessions/img/client-serveur.png b/sessions/img/client-serveur.png new file mode 100644 index 0000000000000000000000000000000000000000..61445c078bec155f40f5f13011d249f9b5d236d6 GIT binary patch literal 21097 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 ZKfG43=%t;#4_u1Q;OXk;vd$@?2>=beMU(&l literal 0 HcmV?d00001 diff --git a/sessions/python-07.md b/sessions/python-07.md index 9b12b3b..0586d29 100644 --- a/sessions/python-07.md +++ b/sessions/python-07.md @@ -1,6 +1,29 @@ % Programmation avec Python (chapitre 7) % Dimitri Merejkowsky +# + +\center \huge Un nouveau mot-clé + +# Les mots-clés + +Des mots qui ne peut être utilisé pour des noms de variales. + +On a déjà vu: `def`, `class`, `import`, etc ... + +# Assertions + +* Arrêter immédiatement le programme avec un message +* Ressemble à `sys.exit()` +* Mais usage un peu différent + +# Les assertions sont là pour les dévelopeurs + +* Le message n'aura en général *aucun* sens si c'est un simple utilisateur + qui le lit. +* Il indique en général un problème *interne*, dans le code lui-même, + par opposition aux erreurs *externes* +Mais on en reparlera :) # @@ -18,7 +41,6 @@ class Counter: ``` - # Instantiation Construire une nouvelle *instance* de `Counter` @@ -53,3 +75,268 @@ class Counter: >>> counter.count 1 ``` + +# + +\center \huge Compléments sur les classes + +# Attributs d'instances + +En vrai les attributs qu'on a vu maintenant sont des +attributs d'instance. Ils sont liés à l'instance courante. + +Mais on dit souvent "attribut" tout court. + +Il existe un autre type d'attribut. + +# Attributs de classe + +Dans le bloc de la classe, mais à l'extérieur des +blocs de méthodes: + +```python +class Car: + total_number_of_cars = 0 + + def __init__(self, color="black"): + # attribut d'instance: avec self + self.color = color + # attribut de classe: avec le nom de la classe + Car.total_number_of_cars += 1 +``` + +# Attributs de classe - 2 + +Les attributs de classe sont partagés entre toutes +les instances: + +```python +>>> ford = Car() +>>> ferrari = Car(color="red") +>>> Car.total_number_of_cars +2 +``` + +# Méthodes de classes + +De même, techniquement les méthodes qu'on a vu sont des méthodes +d'instance, et il existe des méthodes de classe + + +# Méthodes de classes + + +Avec un joli `@classmethod` au-dessus + +```python +class Car: + total_number_of_cars = 0 + + + @classmethod + def print_number_of_cars(cls): + print(cls.total_number_of_cars, "have been made") + + + def print_color(self): + print("This car is", self.color) +``` + +Notez le `cls` + +# Méthodes de classes + +Pour appeler: + +```python +>>> ferrari = Car(color="red") +>>> ford = Car() +>>> Car.print_number_of_cars() +2 cars have been made +``` + +# On retrouve le même mécanisme + +* ce qu'on écrit + +``` +car.print_color() +``` + +\vfill + +* ce qui est appelé: + +``` +# self = car +def print_color(self): + print(self.color) + +``` + +# On retrouve le même mécanisme + + +* ce qu'on écrit + +``` +Car.print_number_of_cars() +``` + +\vfill + +* ce qui est appelé: + +``` +# cls = Car +@classmethod +def print_number_of_cars(cls): + print(cls.total_number_of_cars) +``` + +# + +\center \huge Les API Web + + +# Concepts + +# HTTP + +Une façon pour des machines différentes de parler entre elles. + +On fait toujours un aller-retour du *client* vers le *serveur*. + +![](img/client-serveur.png) + +# Requêtes + +Une requête part du client vers le serveur et consite en: + +* Une URL +* Un verbe (souvent GET) +* Des paramètres +* Et d'autres trucs + +# Réponses + +Une réponse revient du serveur vers le client et contient + +* Un code de retour +* Du contenu (très souvent, du texte) +* Et d'autres trucs + +# API Web et navigateurs + +Quand vous tapez une url dans votre navigateur ou que vous suivez +un lien, c'est votre navigateur qui fait la requête. + +Le serveur lui renvoie un contenu particulier (du HTML) +C'est ce que vous voyez quand vous faites "show source" + +Vous voyez parfois le code de retour (le plus connu étant 404) + +# API Web et navigateurs + +Grosso modo, quand vous visitez une page, vous faites un GET, +et quand vous remplissez un formulaire, vous faites un POST + +*C'est très simplifié* + +# Utiliser une API Web + +Grosso modo: + +* Lire les conditions d'utilisation (important!) +* Regarder les URLs possibles et les paramètres attendus +* Faire quelque chose avec la réponse + +Notez qu'on a *absolument* aucune connaissance du code qui tourne sur le serveur! + + +# JSON + +* Un format *texte*. +* *Très* utilisé justement pour échanger des données entre des machines différentes. +* Implémenté dans plein de langages. + + + +# JSON + +Examples: + +* Une liste: + +```json +["one", "two"] +``` + +* Un "objet": +```json +{ + "color": "blue", + "size": 3 +} +``` + +# JSON + +On peut imbriquer les objets les uns dans les autres: + +```json +{ + "a": 42, + "b": true, + "c": ["one", "two"], +} +``` + +On dit que JSON est un format *texte* par ce qu'on peut le mettre dans une string. + + +# JSON / Python + +Python | JSON +-------|----- +dictionnary | object +True | true +False | false +None | null + + +# Parser du JSON en Python + + +```python +>>> import json +>>> data = json.loads("...") +>>> data["a"] +42 +``` + +# Émettre du JSON à partir d'un objet Python + +```python +>>> import json +>>> my_object = { "key1" : ["one", "two"] } +>>> json.dumps(my_object, indent=2) +""" +{ + "key1": ["one", "two"] +} +""" +``` + + +# + +\center \huge Atelier + + +# Objectif + +* Partir d'un bout de code (moche) qui utilise l'API marvel +* Le nettoyer en introduisant des classes +* Le rendre plus flexible +* Etc ...