- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
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 ajouter deux méthodes qui vont nous permettre de vérifier si le numéro detéléphone et le nom et le prénom de l'utilisateur sont valides. Pour l'instant, on utilise le module
00:00:10 :Faker qui nous permet de générer automatiquement des numéros de téléphone et des noms français,mais on pourrait très bien utiliser cette classe sans passer par Faker et donner des noms ou desnuméros de téléphone qui ne font pas de sens. Par exemple, si je mets une chaîne de caractère
00:00:24 :ici avec des nombres et des symboles, vous serez d'accord pour dire que ce n'est pas un prénomvalide. Pareil pour vérifier que le numéro de téléphone contient au moins dix caractères et
00:00:34 :qu'il ne contient que des nombres, puisque là encore si on donne un numéro de téléphone avecdes lettres ou des symboles par exemple comme ceci, eh bien ce n'est en toute logique pas un numéro detéléphone valide. Donc on va créer deux méthodes qui vont nous permettre de vérifier si ces données
00:00:48 :qu'on envoie lorsque l'on crée la classe d'utilisateur sont valides et si ce n'est pas le cas on va leverdes erreurs. Donc ce que je vais faire c'est créer une première méthode que je vais appeler
00:00:57 :CheckPhoneNumber et je vais la précéder d'un tiré du bas puisque c'est une méthode en fait qu'on vautiliser nous à l'intérieur de notre classe pour faire des vérifications mais ce n'est pas uneméthode que l'on souhaite rendre disponible directement à un utilisateur. Quelqu'un pourrait
00:01:10 :l'appeler bien sûr en faisant tiré du bas CheckPhoneNumber mais ce n'est pas à quelqu'unqui utiliserait notre classe de le faire, c'est nous qui allons le faire vraiment à l'intérieurde la classe. Donc pour indiquer cela on met un tiré du bas devant le nom de la méthode,
00:01:23 :ça permet de spécifier que cette méthode ne doit pas être utilisée directement. Donc on val'appeler CheckPhoneNumber, on va mettre le self bien entendu à l'intérieur des parenthèses et cequ'on va faire déjà c'est nettoyer un petit peu notre numéro de téléphone puisque dans le numérode téléphone qu'on va générer avec Faker par exemple vous allez voir qu'on a des numéros de
00:01:43 :téléphone qui sont valides mais qui contiennent certains symboles comme par exemple le plus quandon a un plus 33 pour indiquer l'origine de la France et bien on a pas mal de symboles comme çaqui sont un peu pénibles puisque nous ce qu'on veut vérifier c'est juste la longueur du numéro
00:01:58 :de téléphone, on veut vérifier qu'il y a au moins dix numéros et on veut vérifier également s'il n'ya que des nombres dans le numéro de téléphone. Donc ce qu'on va devoir faire c'est faire un peu
00:02:07 :de ménage pour enlever les espaces, le symbole plus et les parenthèses. Donc je vais vous montreravec Faker ce que ça nous donne si je fais PhoneNumber ici et on va générer, on va en faire25 pour essayer de tomber sur un numéro de téléphone et pour que je vous montre à quoi ça
00:02:21 :peut ressembler. Donc je lance le script et là vous voyez par exemple on a plus 33, on a des espaces,parfois vous allez voir on a des parenthèses donc si je remonte un petit peu voilà vous voyez icion a une parenthèse qui indique que le zéro est facultatif. Donc nous ce qu'on va devoir faire c'est
00:02:35 :en fait récupérer uniquement les nombres donc on va enlever le plus, on va enlever les espaces,on va enlever les parenthèses ouvrantes et fermantes et une fois qu'on aura enlevé tout çaon va vérifier si tout ce qui reste dans cette chaîne de caractères ici ce n'est que des nombres
00:02:49 :et s'il y en a au moins dix. Et si ça ne passe pas ces deux vérifications ça veut dire qu'onaura autre chose par exemple des symboles qui ne sont pas valides ou alors qu'on a moins dedix caractères. Donc je vais faire cette vérification à l'intérieur de cette méthode. Comme je vous
00:03:02 :disais la première chose c'est qu'il faut nettoyer un petit peu notre numéro de téléphone pour çaon pourrait faire des replace donc on pourrait sur notre chaîne de caractères PhoneNumber faireun replace pour enlever comme je vous disais par exemple le plus donc on pourrait faire plus iciet remplacer par une chaîne de caractères vide et on pourrait faire des replace comme ça à la
00:03:19 :chaîne pour enlever la parenthèse ouvrante par une chaîne de caractères vide etc etc. Ça peutfonctionner mais ce n'est pas très pratique. Ce qu'on va utiliser c'est le module RE donc le
00:03:29 :module pour les regex donc on va l'importer au dessus et on va utiliser une fonction de ce modulequi va nous permettre d'enlever directement toute une multitude de caractères qu'on va passer sousforme de regex. Donc on va utiliser la fonction sub et on va créer notre regex ici. Donc on va
00:03:45 :mettre un R, on met les guillemets pour ouvrir une chaîne de caractères et notre regex et lessymboles que l'on va chercher ça va être donc le plus, les parenthèses qui ouvrent, les parenthèsesqui ferment et tous les espaces. Donc les espaces on peut les cibler avec slash s comme ceci et ça
00:04:02 :on va le chercher dans toute notre chaîne de caractères un nombre infini deux fois donc je vaismettre tout ça entre crochets pour spécifier un groupe dans ma regex et pour spécifier qu'onpeut le chercher zéro ou plusieurs fois on va mettre l'astérisque comme ceci qui permet despécifier qu'on cherche zéro ou plusieurs occurrences de tous ces caractères ici. Et si on
00:04:21 :les trouve et bien on va les supprimer avec sub donc là la dernière chose qui nous manque c'estde spécifier par quoi on veut le remplacer. Donc on va le remplacer par une chaîne de caractères
00:04:30 :vide ce qui va avoir pour effet de supprimer tout ce qu'on a spécifié ici. Donc là on est dansquelque chose d'assez avancé c'est des regex comme je vous disais si vous êtes débutantprobablement que vous allez plutôt utiliser des replace mais petit à petit vous allez voir qu'il
00:04:43 :y a des méthodes plus faciles pour faire ce genre d'opération que de mettre plein de replace lesuns à la suite des autres notamment comme ici en utilisant les regex. Le dernier élément qu'on doit
00:04:53 :donner à cette fonction sub c'est la chaîne de caractères sur laquelle on souhaite effectuer cetteopération donc dans notre cas ça va être le phone number et on va récupérer tout ça dans unevariable que je vais appeler par exemple phone digits. Donc je vais pas aller plus loin je vais
00:05:06 :déjà faire un print de phone digits pour vous montrer ce que ça donne. Donc je vais enlever leprint de user et on va juste faire ici un user.checkPhoneNumber. Donc je sauvegarde, je lance
00:05:18 :le script et vous allez voir que ça devrait nous afficher ici voilà les numéros de téléphone avectous les éléments qui ont été enlevés. Et si on donne un numéro de téléphone qui n'est pas valide
00:05:28 :donc je vais vous montrer ici si on donne par exemple une chaîne de caractères avec des symbolescomme ceci avec plein de numéros, des lettres, donc un truc vraiment qui n'est pas valide. Si je
00:05:37 :relance le script donc là je vais mettre un range qui va être moins grand, on va mettre 5 pour nepas avoir trop de résultats. Donc je lance et vous voyez ici qu'on a enlevé donc si on avait des
00:05:46 :parenthèses ou des plus on les aura enlevés. Je vais vous montrer je vais mettre des plus parexemple on va mettre une parenthèse à la fin et on va mettre un espace également. Donc je
00:05:54 :sauvegarde, je relance, vous voyez ici qu'on a enlevé tous ces éléments. On a enlevé laparenthèse, on a enlevé l'espace et on a enlevé les plus. Et ce qui reste ici c'est tout ça et là
00:06:02 :ça va nous permettre de faire une vérification sur cette chaîne de caractères et dans ce cas-ciça ne fonctionnerait pas puisque le numéro de téléphone n'est pas valide puisqu'il ne contientpas que des nombres. Donc on va tester tout ça ici à l'intérieur de notre méthode. Alors qu'est-ce
00:06:14 :qu'on va tester ? On va tester la longueur déjà du numéro de téléphone. Donc on va dire if lende phoneDigits est plus petit que 10 ou que phoneDigits ne contient pas que des nombres. Donc
00:06:26 :avec la méthode ifDigits alors on va lever une erreur. Donc on va faire un raise de valueErrordans ce cas-ci. On va dire que c'est une erreur de valeur et on va mettre ici numéro de téléphone,
00:06:36 :donc numéro de téléphone comme ceci, invalide. Et on va insérer le numéro de téléphone ici pourindiquer quel numéro de téléphone est invalide. Donc self.phoneNumber et voilà je mets un point
00:06:47 :pour terminer ma phrase. Donc je reviens sur tout ce que j'ai fait ici. On vérifie avec if, doncif len de phoneDigits est plus petit que 10. Donc si cette condition est vérifiée ou que cette
00:06:58 :condition est vérifiée. Donc là quelle est cette condition ? C'est que not phoneDigits.isDigits.Alors accrochez-vous ici, qu'est-ce qu'on fait ? PhoneDigits ça va être ici notre chaîne de
00:07:08 :caractère qui ne contient normalement plus que des nombres. Et si on n'a pas un isDigits ici,donc si ça ça retourne false, ça veut dire qu'on n'est pas en présence d'un numéro qui ne contientque des nombres. Donc là c'est pour ça qu'on utilise le not. Si on n'a pas que des nombres,
00:07:22 :alors c'est un numéro invalide. Donc si ce n'est pas très clair pour vous, je vous conseilled'enlever cette première condition pour ne pas avoir le or, juste regarder ça comme ça. Donc
00:07:29 :if not phoneDigits.isDigits, là on pourrait également renommer notre variable pour quece soit peut-être un peu plus clair. On pourrait l'appeler phoneNumber parce que là on a beaucoup
00:07:38 :de digits à la suite. Donc if not phoneNumber.isDigits, donc là ça se lit si vous parlezl'anglais. Si on n'a pas un numéro de téléphone qui contient que des nombres, alors on lève un
00:07:49 :valueError. Et là je vais rajouter donc ce que j'avais ici, donc ma condition,lend phoneDigits, et on va remplacer tout simplement phoneDigits par phoneNumber commececi. Voilà. Donc phoneNumber égale à notre numéro de téléphone avec tous ses caractères
00:08:03 :en moins. Si après tout ça la longueur de notre numéro de téléphone est plus petite que 10 ouqu'elle ne contient pas que des nombres, alors on raise un valueError en disant que le numéro detéléphone n'est pas valide. Donc je sauvegarde, je vais enlever ma boucle ici, on va juste tester
00:08:17 :sur un seul utilisateur. Je sauvegarde, je relance et là on devra avoir une erreur qui estélevée. Voilà valueError, numéro de téléphone. Il nous indique le numéro de téléphone ici et il
00:08:27 :nous dit qu'il est invalide. On va essayer avec un numéro valide cette fois-ci. Donc je vais mettrepar exemple 0 1 2 3 4 5 6 7 8 9 tout simplement. Donc là normalement on a 10 chiffres. Donc là ça
00:08:38 :devrait être valide. Je sauvegarde et je relance et là on n'a pas d'erreur. Si par contre j'enlèveun nombre, donc si je ne mets que 9 chiffres ici, que je relance, là on a une erreur puisque on esttombé dans ce cas de figure, c'est à dire que le numéro de téléphone était plus petit que 10. Et
00:08:55 :si je mets un numéro de téléphone qui est suffisamment long mais que je rajoute des élémentsqui ne sont pas valides, donc par exemple une lettre, eh bien là encore on va lever une erreur.
00:09:04 :Voilà donc valueError, numéro de téléphone invalide. Donc c'est bon pour le numéro detéléphone et maintenant on va faire le check sur le prénom et le nom de famille. Donc on va faire
00:09:13 :une autre méthode ici que je vais appeler checkNames, on met le self et dans ce cas-ci on vavérifier déjà si on a bien un prénom et un nom de famille. Puisque là en fait on a deux paramètres
00:09:24 :qui n'ont pas de valeur par défaut, donc quelqu'un pourrait potentiellement donner une chaîne decaractère vide ici pour le prénom ou le nom de famille. Et nous on ne veut pas avoir potentiellement
00:09:33 :une chaîne de caractère vide, on veut avoir un prénom et un nom de famille. Donc la premièrechose qu'on va faire c'est vérifier si on a un prénom et un nom de famille. Donc on va dire
00:09:41 :if not self.firstName and self.lastName. Donc si on n'a pas un prénom et un nom de famille alorson lève une erreur. Raise et là on va lever une erreur de type valueError et on va dire dans une
00:09:56 :chaîne de caractère le prénom et le nom de famille ne peuvent pas être vides, tout simplement. Doncsi on n'a pas ces éléments, si on n'a pas ça et ça, alors on lève une valueError. Donc là je
00:10:10 :vais tester, je vais mettre une chaîne de caractère vide pour le firstName, je sauvegarde et je lancele script. Je vais enlever, alors là c'est pas le checkPhoneNumbers, on va faire le checkNames à
00:10:19 :la place. Je lance le script et là on a bien un valueError puisqu'on n'a pas donné de prénom. Sije mets une lettre ici, eh bien ça suffit, on aura bien un prénom et on n'a plus le valueError. Donc
00:10:30 :ça c'est la première vérification qu'on fait. La deuxième vérification qu'on va faire c'estvérifier si on n'a pas des caractères spéciaux à l'intérieur du prénom ou du nom de famille. Donc
00:10:39 :là ce qu'on souhaite faire c'est vérifier qu'on n'a pas des symboles comme ceci par exemple dansun prénom ou un nom de famille. Alors pour ça on va pouvoir utiliser un module qui est le module
00:10:47 :String. Donc je vais l'importer tout en haut de mon script, import String. Et ce module il estpratique puisqu'il va nous permettre de récupérer automatiquement tous les nombres et tous lessymboles de ponctuation. Alors je vais vous montrer à l'intérieur ici de ma structure, on va faire un
00:11:01 :print de String.punctuation et un print de String.digits. Et je vais tout simplement enleverça pour l'instant, je sauvegarde, je lance mon script et là vous voyez que ce module ça nouspermet d'avoir automatiquement accès à tous ces caractères spéciaux et à la liste de tous lesnombres. Donc là c'est juste un moyen rapide d'avoir à éviter de taper 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. C'est
00:11:22 :sûr qu'on pourrait également mettre une chaîne de caractères comme ceci et mettre les nombres. Il n'yen a pas tant que ça, il y en a juste 10 donc ça va. Mais tant qu'à importer le module String, autant
00:11:31 :utiliser cet attribut digits ici pour récupérer automatiquement tous les nombres. Donc là qu'estce qu'on va faire ? Je vais remettre mon script ici. On va faire une vérification pour vérifier
00:11:41 :qu'on n'a pas un caractère dans le prénom ou le nom de famille qui correspond à notre liste decaractères spéciaux. Je vais déjà créer une variable que je vais appeler specialcharacters
00:11:50 :qui va être égale à String.punctuation et String.digits. Donc là si je fais un print despecialcharacters, je vais mettre ici un fake.firstname pour que ça fonctionne. Donc je
00:12:04 :sauvegarde et je veux juste voir le print ici de mon specialcharacters pour vous montrer ceque ça donne. Donc là vous voyez qu'on a tout simplement une chaîne de caractères qui va
00:12:11 :contenir tous les symboles qui ne sont pas valides pour mon prénom ou le nom de famille. Donc nousce qu'on veut faire c'est vérifier est-ce qu'on a un caractère dans le prénom ou dans le nom defamille qui sont contenus à l'intérieur de cette chaîne de caractères. Donc ce qu'on va faire c'est
00:12:26 :qu'on va additionner le prénom et le nom de famille. Donc imaginez par exemple qu'on aitPatrick Smith comme ceci avec le prénom et le nom de famille. Nous ce qu'on va faire c'est qu'on
00:12:35 :va mettre tout ça collé. Donc on va coller le prénom et le nom de famille ensemble, ça va nousdonner cette chaîne de caractères et on va avoir notre chaîne de caractères ici avec tous lescaractères qui ne sont pas valides. Donc cette chaîne de caractères ici. Donc là ce qu'il faut
00:12:47 :faire en fait c'est vérifier est-ce que ce caractère est présent dans cette chaîne de caractères,est-ce que ce caractère est présent dans cette chaîne de caractères etc etc pour tous lescaractères dans cette chaîne de caractères. Donc là si vous êtes débutant, là encore vous allez
00:13:01 :probablement passer par une boucle. Donc par exemple faire une boucle en disant pour characterin et là on pourrait donc additionner comme je vous disais le firstname avec le lastname. Donc
00:13:10 :self.firstname plus self.lastname comme ceci. Donc on pourrait boucler sur tout ça et direque si on a un caractère dans notre liste de special characters et bien on va faire un raisede valueerror en disant non invalide et là on va tout simplement mettre le self.fullname. Donc
00:13:30 :self.fullname comme ceci puisqu'on l'a récupéré à partir de notre propriété. Pourquoi je n'utilisepas self.fullname ici puisque je ne souhaite pas avoir d'espace dans la chaîne de caractères que
00:13:40 :je veux vérifier. Donc je vais juste coller les deux ici dans ce cas-ci sans espace mais aprèsquand je fais mon raise de valueerror, là je peux afficher en fait le nom complet avec l'espaceentre les deux. Donc voilà pour la précision. Donc là on pourrait faire comme ça, ça fonctionnerait.
00:13:53 :On fait une boucle pour boucler sur tous les caractères de notre chaîne de caractères doncdu prénom et du nom de famille et si le caractère sur lequel on boucle est à l'intérieur de cettechaîne de caractères, donc là on utilise l'opérateur in, ça veut dire qu'on a un caractère qui n'est
00:14:07 :pas valide et on fait un raise de valueerror. Donc là on peut tester, je sauvegarde, je lancele script et là vous voyez que ça fonctionne. On va faire une boucle pour tester sur plusieurs
00:14:16 :éléments. Donc on va refaire notre boucle pour tirer du bas une range de par exemple 10. Je vaismettre tout ça à l'intérieur de ma boucle et on va faire un check names à chaque fois. Je vais
00:14:25 :faire un print de user.fullname pour qu'on voit à peu près à quoi correspond le name. Donc jelance tout ça et là vous voyez, alors je vais enlever mon print de special characters aussiqui ne me sert plus. Donc je lance tout ça et là vous voyez qu'on n'a pas de raise valueerror et
00:14:38 :c'est normal puisque à chaque fois ici on a des noms de famille qui sont valides. Par contre si àla place du first name je mets donc Patrick et que je rajoute quelque chose qui n'est pas validecomme un symbole pourcentage, je sauvegarde, je lance le script et là on a bien un valueerror
00:14:53 :puisque quand on va arriver au caractère pourcentage dans notre boucle ici, on va avoirle pourcentage qui va être dans special characters et on va donc lever cette erreur. Donc ça c'est
00:15:03 :une façon de faire qui comme je vous dis c'est probablement la façon de faire des débutants.Il y a une autre façon de faire qui va notamment utiliser la fonction any mais je ne vais pas enparler pour l'instant dans cette vidéo parce que ça risquerait d'être assez long mais sinon cette
00:15:18 :façon de faire fonctionne très bien avec tout simplement une boucle et une structure conditionnelle.Vous avez vu que ça nous permettait de vérifier qu'on n'avait pas de caractères spéciaux àl'intérieur du prénom et du nom de famille de notre utilisateur. Donc voilà pour les deux méthodes
00:15:31 :qui nous permettent de vérifier le numéro de téléphone et le nom et le prénom de nosutilisateurs. La dernière méthode qu'on va faire c'est tout simplement une méthode que je vais
00:15:39 :appeler checks et qui va appeler ces deux méthodes. Donc comme ça ça va nous permettre de faire laliste de toutes les vérifications automatiquement sans avoir besoin de les appeler une par une. Pour
00:15:48 :l'instant on n'en a que deux donc ce n'est pas grand chose mais si on avait d'autres vérifications àfaire plutôt qu'à chaque fois d'appeler check phone number, check names, imaginez qu'on aitaussi check address, check et je sais pas quoi d'autre et bien ce sera un petit peu long à
00:16:01 :appeler à chaque fois. Donc ce que je vais faire ici c'est une fonction checks qui va appeler checkphone number et check names donc qui va appeler les deux comme ça si on souhaite vérifier quenotre utilisateur est valide plutôt que de faire comme je vous disais à chaque fois .check names
00:16:16 :et ensuite check phone number et éventuellement donc comme je vous disais on pourrait en rajouterune autre on pourrait faire un check address. Voilà vous voyez ça fait trois méthodes à
00:16:25 :chaque fois à appeler et bien à la place on fait tout simplement notre check comme ceci et cecheck ici il va appeler les deux autres fonctions de vérification. Donc là je vais le mettre au
00:16:35 :pluriel du coup comme ça ce sera un peu plus clair qu'il y a plusieurs vérifications à fairedonc checks comme ceci et donc en appelant cette méthode checks ça va appeler la méthode checkphone number et la méthode check names et si à un moment dans ces deux méthodes on a quelque
00:16:47 :chose qui n'est pas valide on utilise raise ici pour lever une erreur valueerror et indiquer àla personne qui utilise notre script que les valeurs qu'il utilise ne sont pas correctes.
00:16:57 :Voilà pour cette partie un petit peu longue mais qui est très importante c'est très important devérifier les données on ne peut jamais faire confiance à l'utilisateur donc il faut toujoursvérifier que quand on crée une instance on a bien quelque chose qui est valide selon ce que vous
Ce n'est pas fini...
✋
Tu as complété % du parcours 🔥
Termine l'intégralité de la formation pour pouvoir débloquer ton attestation de réussite.