- 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 les parties qui suivent, je vais vous montrer tout ce que je vais faire à l'intérieur d'unterminal. Donc là, je suis dans un terminal qui est en dehors de PyCharm. Donc c'est un
00:00:08 :terminal très basique comme vous pouvez avoir sur Mac, Linux ou sur Windows si vous avez parexemple GitBash ou le Windows Subsystem for Linux. Donc là, ce terminal, je l'utilise non
00:00:19 :pas dans PyCharm puisque la police d'écriture est un peu plus sympa et un peu plus visible pour vous.Donc ne vous inquiétez pas, ça reste exactement la même chose que ce qu'on pourrait avoir dansPyCharm ou dans n'importe quel autre terminal. Donc ce que je vais faire, c'est qu'à l'intérieur
00:00:32 :du dossier source dans lequel je me trouve actuellement, dans mon dossier website, jevais utiliser le fichier manage.py pour rentrer dans un interpréteur Python interactif qui va
00:00:42 :être configuré pour mon projet Django. Donc c'est bien important d'utiliser cette commande, donc lacommande python manage.py shell pour utiliser un shell interactif qui va être au courant en fait
00:00:53 :de votre environnement Django. Si vous utilisez un interpréteur Python normal, donc en faisanttout simplement par exemple Python comme ceci, et bien vous n'aurez pas accès à par exemple toutesles valeurs dans le fichier de settings ou toutes ces choses qui sont définies à l'intérieur devotre projet Django. Donc c'est vraiment important d'utiliser le shell en passant par python manage.py
00:01:11 :donc on utilise la commande shell et là vous voyez qu'on se retrouve dans un interpréteurinteractif, tout ce qu'il y a de plus classique sauf qu'on va avoir accès à toutes les donnéesde notre projet Django. Donc ce que je vais faire à l'intérieur de cet interpréteur Python, c'est
00:01:25 :déjà importer mon modèle. Donc si je reviens à l'intérieur de PyCharm, en fait quand on utilisela commande manage.py pour lancer un interpréteur Python interactif, on va se retrouver au niveau
00:01:35 :du fichier manage.py donc dans le dossier source. Donc si on veut par exemple importer le fichiermodels.py ici, il faudra faire import blog.models. Moi dans ce cas-ci je vais importer directement
00:01:46 :cette classe ici qui est dans le fichier models. Donc je vais dire from blog.models import blogpost. Je valide en appuyant sur entrée et je n'ai aucune erreur donc ma classe a bien été importée
00:01:58 :dans mon interpréteur Python. Donc maintenant on va voir comment créer des objets dans notre basede données. On pourrait le faire directement à la main à l'intérieur de TablePlus. Donc si je
00:02:07 :retourne dans le logiciel TablePlus ici, dans ma table blog blog post, vous voyez ici tous leschamps de disponibles et je pourrais tout simplement double cliquer sur ces champs pourrentrer des valeurs. Donc je pourrais mettre une valeur par défaut pour l'id de 1, je pourrais
00:02:20 :mettre un titre ici, un slug, etc. Donc des valeurs et vous avez également la possibilité de le fairedirectement depuis le panneau à droite ici. Donc différentes façons de mettre des valeurs dans la
00:02:31 :base de données mais vous voyez que ce n'est pas forcément la meilleure façon de faire. En faiton peut le faire à la main pour quelques modifications des fois mais généralement on va vouloir faire toutça directement en code avec Python. Donc ce qu'il faut bien comprendre ici déjà c'est que la classe
00:02:45 :en tant que telle, donc dans ce cas-ci la classe blog post, ça représente en quelque sorte notretable. Donc la table blog post ici et ensuite toutes les instances de cette classe vont représenter
00:02:56 :des enregistrements. Donc quand je parle d'enregistrement en fait c'est tout simplementchaque ligne ici dans notre table. Donc toutes les instances de la classe blog post vont représenter
00:03:05 :des lignes ici à l'intérieur de la table. Et ensuite avec blog post, avec la classe, on va pouvoirrécupérer un ou plusieurs enregistrements ou objets. Donc on peut dire enregistrement ou objet dans le
00:03:16 :langage des bases de données on parle d'enregistrement mais à terme vous verrez qu'on parle plutôt d'objet.Quand vous allez récupérer par exemple le premier article ça va vous retourner un objet Python quiest donc une instance de la classe blog post. Donc si je reviens dans mon interpréteur Python, je vais
00:03:31 :pouvoir créer un enregistrement dans ma base de données tout simplement en créant une nouvelleinstance de blog post. Donc je vais la stocker dans une variable que je vais appeler blog post
00:03:41 :comme ceci tout en minuscule avec un tiret entre les deux mots. On peut l'appeler n'importe commentdonc là il n'y a pas je l'ai appelé comme ça on pourrait mettre tout simplement b, c'est pas uneobligation. Là c'est vraiment juste une variable qui va me permettre de récupérer mon instance.
00:03:53 :Donc je vais créer une instance de blog post et si on revient dans notre code vous vous rappelezqu'il y a certaines choses qui sont définies par défaut comme publish ici donc il aura déjà unevaleur par défaut donc on n'a pas forcément besoin d'en donner une nous-mêmes. Par contre pour le
00:04:07 :reste mis à part la date ici où on a spécifié qu'elle pouvait être blank, donc blank c'est àdire blanc en quelque sorte donc avec rien à l'intérieur, et bien tous les autres champs il vafalloir spécifier une valeur puisqu'on n'a rien par défaut et elle ne peut pas ne rien contenir.
00:04:20 :Donc on va devoir mettre un title, un slug, un content et un description. Donc tout ça ça vaêtre en fait tout simplement des paramètres qu'on va mettre ici à l'intérieur des parenthèses. Donc
00:04:31 :on va mettre un title donc pour l'instant je vais mettre juste des trucs qui ne font pas grand sensmais c'est juste pour ne pas passer trop de temps là dessus. Donc je vais mettre des tests un peu
00:04:39 :partout donc on a le title, le slug et ensuite on avait donc le content et le description. Donc jevais faire content égale à test également et le description qui est égal et là on va mettredescription pour avoir un truc un peu différent. Donc j'appuie sur entrée et pour l'instant on a
00:04:58 :créé une instance donc qui est disponible ici dans bloc post et par contre on n'a rien à l'intérieurde notre base de données. Si on actualise, donc là j'ai une petite fenêtre qui m'indique que je
00:05:07 :vais perdre les changements que j'avais commencé à effectuer dans ma base de données, donc je vaiscliquer sur discord puisque je n'ai pas envie de sauvegarder ces changements. Donc si j'actualise
00:05:16 :vous voyez que actuellement on n'a rien, on n'a aucune donnée dans la table bloc post. Donc çac'est parce qu'on n'a pas encore sauvegardé notre instance. Pour l'instant on l'a créé à
00:05:25 :l'intérieur de notre interprète piton interactif mais pour enregistrer ces modifications tout commedans table plus tant qu'on n'a pas sauvegardé et bien ces informations ne sont pas dans ma basede données et bien là dans mon instance ici il va falloir que je spécifie que je veux lasauvegarder. Donc ça on va faire tout simplement une sauvegarde avec la méthode save donc bloc
00:05:44 :post point save on met les parenthèses après puisque c'est une méthode et là vous voyez qu'ona une belle erreur donc ça c'est normal je sais pourquoi c'est parce qu'en fait sur notre champdate ici comme on a mis blank égal true il faut qu'on ajoute un autre paramètre donc le paramètre
00:06:00 :c'est nul égal true. Pourquoi ? Donc pour le faire vide c'est juste parce qu'ici on a un champ detype date et les dates donc c'est un format spécifique et comme on a spécifié que çapouvait ne rien contenir il faut également spécifier que on peut mettre une valeur qui
00:06:14 :est nulle puisque une date qui contiendrait par exemple une chaîne de caractère vide ou quelquechose du genre ce n'est pas possible. Donc on est obligé de spécifier que ici nul est égal à true
00:06:23 :également pour les objets de type date si vous avez mis blank égal à true. Donc je ne rentrepas dans les détails je voulais juste voilà vous expliquer quand même un petit peu et pas justerégler le problème et passer à la suite. Donc là j'ai modifié ici vous voyez mon modèle ça me
00:06:36 :permet de revenir encore une fois sur les migrations et de vous montrer que quand on faitune modification comme celle-ci il va falloir appliquer ces migrations donc déjà les créeret ensuite les appliquer. Donc je vais faire python manage.py make migrations blog je valide
00:06:51 :avec entrée là vous allez voir qu'on a une nouvelle migration ici donc la 0 0 3 et cettemigration tout simplement elle va modifier le champ date pour dire que maintenant en fait lenul est égal à true donc que l'on peut spécifier une valeur nulle dans notre base de données. Donc
00:07:07 :là je vais ensuite appliquer ces migrations dans ma base de données donc je vais faire pythonmanage.py migrate je valide avec entrée on a bien appliqué ces migrations et donc si je
00:07:17 :reviens dans mon interpréteur python que je fais un peu de ménage ici donc sur mac os en passantc'est commande k pour pouvoir facilement enlever tout ce que vous avez dans votre terminal puisqueà l'intérieur de l'interpréteur python on ne peut pas utiliser par exemple une commande de shell
00:07:32 :comme clear donc commande k ça vous permet de tout effacer. Donc après cette petite parenthèse jereviens sur mon blog post donc blog post.save je refais entrée pour valider et là vous voyez que
00:07:43 :cette fois ci ça a fonctionné. Donc si vous vous souvenez bien là on n'a plus l'historique maisj'avais tout simplement créé une instance de blog post donc comme ceci blog post égal à blog postj'avais spécifié ici tout ce qu'il fallait spécifier donc title, slug, content et descriptionet ensuite je fais donc tout simplement un blog post.save pour sauvegarder cette instance dans
00:08:03 :ma base de données. Donc désolé pour cette petite parenthèse je reviens dans ma base de données pourvous montrer ce que ça donne donc je fais un commande r pour actualiser et là on voit qu'on abien donc notre entrée qui a été sauvegardée. Donc on a le id qui automatiquement a été mis à 1 donc
00:08:18 :ça c'est géré automatiquement au niveau de la base de données puisque cette colonne ici est uneclé primaire donc on n'a pas besoin de s'en inquiéter c'est géré tout seul et ensuite on retrouve biendonc le test ici pour le titre pour le slug pour le content et pour la description on avait mis
00:08:32 :description et pour la date vous voyez qu'on a un gros nul ici donc null qui signifie que ce champne contient rien mais donc c'est l'erreur que j'avais tout à l'heure c'est que si on ne spécifiepas null égale true dans notre modèle et bien on ne peut pas avoir un champ de date qui est vide. Pour
00:08:48 :les chaînes de caractère ce n'est pas un problème puisque une chaîne de caractère on pourrait avoirici tout simplement comme vous le voyez empty donc c'est à dire une chaîne de caractère vide maispour les objets de type date on est obligé de mettre null puisqu'on ne peut pas avoir une chaîne
00:09:00 :de caractère vide dans une colonne de type date. Donc ici je vais remettre mon test et vous voyezque pour le published également on n'a ni true ni false on a tout simplement un integer donc letrue et le false sont représentés dans la base de données par un 0 ou un 1 donc 0 pour le false
00:09:16 :et 1 pour le true. Donc vous voyez là encore je vous montre ce que ça donne à l'intérieur de labase de données mais c'est très rare qu'on ait besoin d'aller fouiller directement dans la basede données ça peut être bien si on veut voir un peu plus visuellement ce qui se passe mais
00:09:29 :généralement on va récupérer nos modèles ou les créer directement avec du code python et ensuiteles afficher à l'intérieur bien entendu d'un fichier template html pour les afficher sur notresite. Donc ça c'est une façon de créer un objet en créant directement une instance donc avec
00:09:46 :blog post et ensuite en n'oubliant pas d'utiliser la méthode save sur cette instance. Il y a uneautre façon de faire on peut utiliser blog post et passer par ce qu'on appelle un manager qu'onverra plus en détail dans les autres parties donc ce manager il s'appelle object c'est un manager
00:10:00 :qui existe par défaut sur votre classe et qui va contenir tout un tas de méthodes qui vouspermettent d'effectuer des opérations sur les entrées de votre table. Donc une des opérations
00:10:10 :possibles c'est l'opération create et là on va avoir la même chose à l'intérieur des parenthèsesc'est à dire un titre, un slug, un content description donc là tous les champs en fait quisont obligatoires donc je vais remettre des choses par défaut donc par exemple là encore test on va
00:10:24 :mettre test 2 pour le slug on va mettre test 2 aussi content on va mettre content et descriptionon va mettre description aussi. Description 2 voilà et en passant par cette méthode en passant
00:10:39 :par create vous allez voir que cette fois ci l'objet est automatiquement créé à l'intérieurde notre base de données donc c'est la différence principale entre le fait de passer par la classeet ensuite object create qui elle va directement créer l'objet et le fait de créer une instanceoù là en fait tant qu'on n'utilise pas la méthode save notre instance n'est pas créée dans la base
00:10:57 :de données. Donc si je reviens dans table plus et que j'actualise là vous voyez qu'on a bien notredeuxième enregistrement qui est affiché ici. Donc voilà comment créer un objet à l'intérieur de
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.