⌘K
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- groups La communauté
- forum Questions
- live_tv Mentorats
Formations
Articles
Communauté

La certification qualité a été délivrée pour la catégorie d'actions « Actions de formation ».
⌘K
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- groups La communauté
- forum Questions
- live_tv Mentorats
Formations
Articles
Communauté

La certification qualité a été délivrée pour la catégorie d'actions « Actions de formation ».
Deviens membre Premium magic_button
Débloque cette session en devenant Membre Premium 🚀
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte person00:00:00 :Dans cette partie on va voir comment on peut utiliser l'API de Stripe pour modifier un clientet notamment modifier l'adresse de livraison qui est associée à ce client. Donc ce que je vais
00:00:10 :faire c'est rajouter une méthode après la méthode String ici, que je vais appeler tout simplementSetDefault et qui va me permettre d'indiquer en fait que cette adresse doit être l'adressepar défaut de l'utilisateur. Donc pour l'instant je vais mettre un pass et avant qu'on aille
00:00:23 :écrire du code ici je vais juste vous montrer en fait l'API de Stripe donc en fait je n'inventerien ici tout ce que je vais vous montrer ça vient directement de cette documentation del'API qui est quand même assez bien faite. Donc là vous voyez qu'on a les core resources ici et
00:00:38 :on peut aller voir tout ce qui est possible de faire sur les différents objets que Stripe nouspropose donc par exemple sur les produits, sur les coupons, les discounts, les bank accounts,cartes donc il y a plein de choses ici et nous ce qui va nous intéresser c'est les customers
00:00:52 :donc les customers qui veut dire clients en anglais. Donc vous voyez ici qu'on a différenteschoses qu'on peut faire déjà on a l'objet customer donc on va avoir un objet avec différentsattributs et nous ce qui va nous intéresser c'est cette partie ici update a customer puisqu'on veutmodifier le client et vous voyez qu'on a un exemple ici de ce qu'il faut faire pour modifier le client
00:01:12 :donc on va copier tout ça et il va falloir mettre également notre clé d'API à l'intérieur de notrescript. Donc dans ma fonction SetDefault ici je vais coller tout ça on va enlever le Stripe API
00:01:22 :Key puisque nous on avait déjà notre clé et on va le mettre ici tout en haut juste après lesimports on va faire donc Stripe.APIKey et c'est exactement la même chose que ce qu'on avait
00:01:31 :fait dans l'autre fichier qui était si je me souviens bien ça doit être le fichier de viewsdonc ce fichier effectivement où on fait la session de checkout si je reviens tout au-dessus ici onavait bien fait cette clé d'API également donc qui est à l'intérieur de settings donc on va devoir
00:01:45 :l'importer également ici donc on importe les settings Shop.Settings et on importe égalementStripe puisqu'on va utiliser l'API de Stripe. Donc je reviens dans ma fonction SetDefault ici
00:01:56 :et ce qu'on va faire c'est modifier donc l'utilisateur donc on ne va pas mettre cetidentifiant ici on va mettre à la place self.user.StripeID donc le user ici c'est l'utilisateur
00:02:08 :qui est ici et vous voyez que là on a PyCharm qui n'est pas très content il nous dit qu'iln'arrive pas à trouver en fait d'attribut StripeID pour un champ de type foreign key. Alors là ce
00:02:17 :qu'on peut faire rapidement c'est rajouter une annotation de type comme ceci en précisantdonc que cette clé donc que ce foreign key cette instance en fait de clé étrangère et bien enfait ça va être un objet de type shopper. Et si on retourne ici vous voyez que là l'avertissement
00:02:33 :en fait a disparu puisqu'il comprend maintenant que self.user c'est une instance de notre classeshopper et que les instances de shopper ils ont donc un attribut StripeID. Donc voilà petite
00:02:42 :précision des fois c'est assez embêtant d'avoir des avertissements comme ça et on n'a pas nonplus la complétion automatique alors que là maintenant je l'ai puisqu'il comprend bien icivous voyez que c'est de la classe shopper. Donc très pratique les annotations de type pour ça
00:02:55 :là je l'ai fait juste pour le user mais on pourrait le faire dans d'autres cas de figure.Donc ensuite qu'est ce qu'on va faire et bien on va déjà s'assurer qu'on a bien un StripeID puisqueça pourrait ne pas être le cas et si on n'a pas de StripeID ça voudrait dire que l'utilisateur
00:03:07 :n'est pas renseigné du côté de Stripe et on ne peut pas donc le modifier. Donc ce que je veuxdire c'est if not self.user.stripeid donc s'il n'y a pas d'identifiant Stripe on va lever une
00:03:17 :value error en disant tout simplement user et on va mettre le self.user.email donc on va mettrel'email de l'utilisateur en disant doesn't have a Stripe customer ID par exemple. Ensuite donc si
00:03:37 :on a un StripeID on va pouvoir le modifier et là qu'est ce qu'on va mettre et bien on va allervoir dans la documentation qu'est ce qu'il faut mettre pour modifier l'utilisateur. Donc je
00:03:46 :reviens ici qu'est ce qu'on peut modifier vous voyez que là on peut modifier l'adresse doncc'est l'adresse de l'utilisateur puisque si on retourne voir ici vous voyez qu'on a l'adressede facturation et l'adresse de livraison. Donc on a deux adresses qu'on peut modifier nous on va
00:03:59 :utiliser la même dans les deux cas de figure mais on pourrait utiliser une adresse différente pourl'une et pour l'autre. Donc on a cette première adresse ici et ensuite si je descends on a le
00:04:07 :shipping et dans le shipping à chaque fois donc vous pouvez voir que ce soit ici ou ici lesparamètres qui sont enfants donc qu'est ce qu'on va devoir passer à ces éléments. Donc là pour
00:04:17 :l'adresse on a directement city, country, line 1 etc donc ça c'est ce qu'on a de notre côté égalementet sur le shipping vous voyez qu'on a deux choses on a l'adresse qui elle aussi dispose de paramètresenfants et qu'il a encore son city, country etc donc ça fait shipping.address.city donc on a un
00:04:33 :niveau de plus que ce qu'on avait sur l'adresse ici on a directement les attributs et si jedescends on a également le name qu'on va devoir envoyer puisque si je retourne dans stripe vousvoyez que là en fait l'adresse de facturation on n'a pas de nom on a directement l'adresse
00:04:47 :et l'adresse de livraison elle dispose d'un nom en plus. Donc ça va faire pas mal d'informationsà envoyer et on va donner tout ça directement dans notre code python donc si je reviens icion va mettre le premier on va commencer par l'adresse donc on avait adresse directementici qui était égale à toutes les informations donc qu'on a sur notre instance donc ce qu'on
00:05:06 :va faire c'est donner un dictionnaire et on avait si je reviens sur l'API donc si je reviens dansadresse on avait city, country, il y a juste line 1 et line 2 qui diffèrent puisque nous on aadresse 1 et adresse 2 ici. Donc on va avoir la première chose c'est city qui va être égal à
00:05:22 :self.city ensuite on va avoir country qui là va être égal à self.country si j'arrive à bienl'écrire country comme ceci ensuite on a le line 1 qui est égal à self.address1, le line 2
00:05:34 :donc là c'est assez rébarbatif mais bon je vais peut-être accélérer cette partie au montage etensuite on a le postal code si je me souviens bien je crois que c'est aussi ce qui diffèrevoilà postal code et nous en fait on a zip code de notre côté donc postal code et on va mettre
00:05:50 :self.zip code comme ceci donc ça c'est pour l'adresse et ensuite on va voir le shipping quiest un petit peu plus complexe puisque le shipping on a déjà en fait un premier dictionnaire alors jevais juste directement mettre la virgule on a un premier dictionnaire en fait qui va contenir deux
00:06:05 :éléments donc si je reviens ici vous voyez qu'on a un premier donc des premiers attributs ici avecun premier dictionnaire qui contient l'adresse qui elle contient notre dictionnaire et on a lename ici qui est alors c'est marqué customer name en fait c'est juste le nom de l'adressedans ce cas ci donc je vais déjà commencer par le nom on va dire name et on va dire que c'est
00:06:24 :égal à self.name et pour le deuxième élément donc c'était address je crois tout simplementshipping.address c'est ça donc là on va mettre address et en fait on va avoir exactement la
00:06:35 :même chose que ce qu'on avait ici donc on va mettre un autre dictionnaire qui va contenirexactement tout ce qu'on a ici donc là plutôt que de répéter du code je vais faire une autreméthode qu'on va mettre juste au dessus ça va m'éviter de répéter du code en fait je vais
00:06:48 :l'appeler asDict par exemple et en fait ça va me retourner toutes les informations dont j'aibesoin sous forme de dictionnaire donc on va prendre tout ça ici et on va le mettre là eton va faire un return de tout ça tout simplement et il faut que je le mette bien entendu entre des
00:07:03 :accolades comme ceci donc comme ça je pourrais utiliser à la place de tout répéter en faitdeux fois ici je vais mettre self.asDict et comme ça ça m'évitera de répéter du code et je vais
00:07:12 :pouvoir passer le dictionnaire également ici directement donc normalement on a tout ce qu'ilfaut on a le stripe id de l'utilisateur si jamais il est setté s'il n'est pas setté on fait un valueerror ensuite on passe les informations donc avec le nom de l'adresse avec l'adresse en tant que
00:07:27 :telle et l'adresse directement donc on a l'adresse de livraison et l'adresse du client doncnormalement tout est bon on va pouvoir ainsi modifier l'adresse sur stripe alors pour l'instantje n'ai qu'une seule adresse dans ma base de données donc ce que je vais faire c'est alleren créer une autre pour qu'on puisse tester tout ça donc ajouter shipping address sur cette
00:07:46 :identifiant ici on va mettre 140 rue des champs-elysées et je sais jamais exactement comments'écrit champs-elysées j'ai même pas mis des majuscules on va essayer de décrire ça pas tropmal et je sais jamais comment s'écrit la fin ce n'est pas grave alors ça c'était le nom donc on
00:08:03 :va mettre le nom ici on va mettre domicile et city on va mettre paris zip code on va mettre 75000ça doit être 0 1 ou 0 2 et country on va mettre la france donc j'ajoute cette adresse et on vapouvoir tester en passant de l'une à l'autre donc pour ça je vais ouvrir un terminal et on va faire
00:08:22 :des tests à l'intérieur d'un shell donc ici je fais python manage.py shell on va ensuite importerles deux adresses donc on n'a que deux adresses ici donc je vais déjà importer from accounts.models
00:08:34 :on va faire import shipping address donc address comme ceci avec deux dés on va récupérer danss1 et s2 les deux adresses donc là on n'en a que deux dans la base de données donc en fait ce queje peux faire c'est comme ceci on va récupérer toutes les adresses il y en a deux donc on va
00:08:51 :associer la première à s1 et la deuxième à s2 je valide donc j'ai bien s1 qui est égale à travaildix rues du chemin bleu et s2 qui va être égal à domicile sur les champs-elysées donc ça fonctionneet on va aller voir donc sur stripe pour l'instant je suis dix rues du chemin bleu donc on va essayer
00:09:07 :de faire s2.set default je valide et là alors un hashable dict alors qu'est ce qui ne va pasarriver ici c'est qu'en fait je passe déjà un dictionnaire donc adresse en fait on a un dictionnaireen trop ici on va passer juste self.asdict et non pas un dictionnaire plus un dictionnaire puisque
00:09:27 :là on a déjà en fait un dictionnaire qui est retourné donc je vais sortir de cet interpréteuret le relancer pour qu'on ait bien les changements qui soient appliqués donc on va refaire fromaccounts.models import shipping address ensuite s1,s2 égale shipping address .objects.all
00:09:46 :et on fait s2.set default comme ceci je valide ça prend un petit peu de temps parce que làforcément il faut qu'il fasse un appel d'api à stripe donc il y a une connexion en fait quiest effectuée et si je reviens sur stripe et que j'actualise ça a fonctionné j'ai bien le
00:10:01 :domicile avec 140 rue des champs-elysées on va essayer dans l'autre sens s1.set default je valideje reviens j'actualise et on devrait revenir avec l'adresse au travail donc le 10 rue du chemin bleudonc ça fonctionne on arrive bien à mettre à jour l'adresse du côté de stripe et dans la
00:10:18 :prochaine partie on va voir comment on peut modifier notre modèle pour pouvoir en fait direquelle est l'adresse par défaut qu'on souhaite utiliser lorsqu'on passe une commande puisquepour l'instant en fait on n'a pas cette information là on commence à avoir plusieurs adresseset on va devoir donc spécifier quelle adresse de notre côté dans la base de données et celle