Session du 15 mars 2024 à 19h00
Développement Web & Frameworks
DevOps & Environnement
Initiation à Django pour débutant
Introduction à Django
-
Histoire et philosophie de Django
-
Installation et configuration de l'environnement de développement
-
Structure d'un projet
Les bases de Django
-
Vue d'ensemble de l'architecture MVT (Modèle-Vue-Template)
-
Création d'un premier projet simple
00:00:00 :Si vous avez des questions, n'hésitez pas à m'interpeller par oral, c'est plus sympa je trouve, et je verrai mieux.Je verrai mieux parce que l'écran Discord est un petit peu caché, j'irai voir si tu entends, mais...
00:00:13 :Je pense qu'on va pouvoir commencer, j'aurais bien attendu une minute ou deux, mais...Attends une petite minute, puis on va y aller.Ah, il y a Fab qui est là, allez...
00:00:28 :Ok, on y est Pierre, il y en a que je ne connais pas forcément...Bon, on commence, allez.Ce soir, du coup, on va parler de Django, mais comme je disais, c'est une session vraiment débutante.
00:00:43 :On va parler un peu de Django, faire quelques requêtes pour comprendre un peu le système.Si vous voulez qu'on ne fasse pas de requêtes et que vous connaissez, on peut passer ce passage-là.
00:00:53 :Mais vu qu'il y a...Non, je veux dire, par exemple, je sais que tu n'as pas fait de Django, donc ça peut être intéressant quand tu vois ça.
00:01:00 :Du coup, Django, c'est un framework qui date déjà de 2003 et qui a été rendu public en 2005.Par contre, il y a un micro, je crois, qui est ouvert.
00:01:12 :Fab, je ne sais pas si tu peux couper ton micro, je suis désolé, sauf si tu as besoin de parler.Il y a un son...
00:01:20 :Je ne sais pas s'il m'entend, Fab.Non, ce n'est pas...Attendez, si il y en a plus qui plaît...Du coup, ce soir, on va parler de Django.
00:01:39 :Django, c'est un framework qui a été développé en 2003, mais qui a été rendu public en 2005.Et aujourd'hui, on sait que c'est quand même un framework qui est extrêmement réputé.
00:01:52 :Salut Dux, on en est déjà à la version 5.La philosophie de Django, c'est en gros un couplage faible.En gros, tous les éléments vont être séparés et indépendants les uns des autres.
00:02:11 :Voilà, ça permet une meilleure flexibilité, une meilleure utilisation du code.Et Django, ça permet aussi d'éviter de répéter du code, de développer rapidement.Et il y a beaucoup de classes qui sont incluses dans Django.
00:02:25 :Donc, en fait, on peut vraiment faire plein plein de choses de manière assez simple.Il faut les connaître, mais ce n'est pas si compliqué que ça.
00:02:34 :On connaît le framework.Donc, Django, c'est le principe MVT.Donc, c'est modèle, vue, template.Le modèle, c'est ce qui va représenter la structure de la base de données.
00:02:50 :On peut le dire comme ça.La vue, c'est ce qu'on va présenter à l'utilisateur.On va créer des vues.Et les templates, ça va être la représentation visuelle des données.
00:03:02 :Voilà.Alors, ça c'est bon.Excusez-moi, j'ai ma fille.Donc, on va commencer par des...On va pas parler de la structure, on va parler plutôt des requêtes, je pense, pour commencer.
00:03:26 :Donc ici, j'ai une base de données.Je crée une base de données qui est là, avec des clients.Voilà. J'ai leur nom, j'ai des âges, et je sais s'ils sont actifs ou non.
00:03:40 :Je ne sais pas si on va pouvoir déjà faire un petit peu de langage SQL.Mais, hop là.De langage SQL.En gros, Django possède son ORM.
00:03:53 :Et en fait, ça permet d'effectuer des requêtes en Python.Et comme ça, on a pas besoin de taper avec du SQL Brute.Mon Dieu.On verra le maniagement des requêtes plus tard.
00:04:06 :Par exemple, ici.Alors ça, c'est un truc que j'ai fait vite fait tout à l'heure.Ça s'appelle comment ? Je l'ai appelé example.Example.Nouveau, base.
00:04:18 :Custom.User.Oula, celui-là il est sec.Attends, on va se mettre un peu plus tard.C'est quoi ? On se verra.Attendez.Hop là.Ah oui, d'entrée.
00:04:33 :Je me suis loué.Et hop là.Enfin, excusez-moi.J'ai appelé comment ? Tu t'amuses ?Qu'est-ce qui se passe ? Attends, je suis loué.Example.
00:04:54 :En tout cas, on se vient.J'ai ouvert la manchette et ouvert.J'ai pas eu le compte d'ailleurs.Example.Models.Et j'ai custom.Ah, customaire, je l'ai appelé, excusez-moi.
00:05:08 :C'est bon.Donc, from example.Models.Import.Voilà.Par contre, c'est compliqué.Alors, là par exemple, si je veux récupérer tous les clients de la base de données.
00:05:26 :C'est misérable.On va dire custom.Hop là.Customaire.Object.Total.Voilà.Et voilà.Là, on voit bien que j'ai tous les utilisateurs de la base de données.
00:05:42 :Donc, j'ai fait aucune requête SQL.En fait, j'ai pas utilisé de langage SQL.C'est traduit, en fait, c'est Django qui s'occupe de ça.Donc, après, je peux très bien récupérer le premier utilisateur.
00:05:55 :Donc, le premier utilisateur, c'est custom.Hop là.Première point.Object.First.Ici, c'est first.Voilà.Donc là, j'ai bien le premier utilisateur de la base de données.
00:06:10 :Et je peux appliquer des chiffres.Donc, on va faire juste un filtre pour voir comment ça fonctionne.Donc là, je vais faire, je ne sais pas, on va appeler Young et les plus jeunes.
00:06:21 :On va faire customaire.Point.Point.Point.Point.Object.Point.Filter.Donc là, on va faire un filtre.Et on va mettre l'âge.Deservent Tech est égal à, je ne sais pas, les plus jeunes.
00:06:38 :Allez, on va dire qu'ils ont moins de 30 ans.Hop.Ici, je fais Young.Donc, j'ai bien ceux qui ont moins de 30 ans.Voilà.
00:06:46 :Donc, vous voyez, on peut appliquer des filtres comme ça.On peut très bien.Je pourrais très bien faire un filtre avec Active.Faire un filtreur avec Active égale False.
00:06:54 :Et ça me récupère toutes les personnes qui sont inactives.Voilà.C'est un peu, voilà.Ça, c'est le RL de Django.Donc, on peut faire des requêtes sans utiliser de SQL.
00:07:05 :Ça, c'est géré pour nous.Donc, nous, on a juste à taper en Python.Oula.On a juste à taper en Python et Django gère pour nous.
00:07:14 :Donc, on va créer notre projet.Donc, ce soir, ce que je voulais qu'on fasse, c'est qu'on parte sur un projet simpleet qu'on développe avec des applications et des vues génériques.
00:07:31 :Donc, les vues génériques.Je vais ouvrir mon dossier où je voulais qu'on fasse ça.Open.Je vais l'appeler animation.On va l'appeler blog.Je vais l'appeler blog.
00:07:42 :Je vais faire une ouverture déjà activée.Hop.Hop.C'est bon.OK.Donc, c'est parti.On va pouvoir attaquer.Est-ce qu'il y a des questions pour l'instant ou vous pouvez me dire si ça va ou si je ne vais pas trop viteou que je parte sur la requête.
00:08:07 :Mais pour moi, c'est bon.C'est bon.OK.OK.Tac.Donc, là, ce qu'on va faire, c'est qu'on va se créer un petit blog juste pour le fun.
00:08:17 :On s'intéresse au back-end.On va faire un petit template mais vraiment très basique.On va se faire un petit blog pour le fun.Alors, déjà, Django, forcément, il faut l'installer.
00:08:29 :Donc, on va installer Django, la dernière version.Hop.Donc, là, c'est installé.C'est bon.Tac.C'est ça.Voilà.Donc, on va initier le projet.Voilà.
00:08:46 :Après, on commence avec la commande Django admin.Start.Tac.Project.On va l'appeler Project.Hop.Voilà.Donc, qu'est-ce qu'il s'est passé ici ?Je n'ai plus de table.
00:09:04 :Voilà.On a un projet qui s'est créé, un projet Django qui est ici avec nos différents fichiers.Donc, les settings et les fichiers URL.C'est surtout ces deux-là pour le moment.
00:09:22 :Qu'est-ce qu'il se passe, du coup ?En fait, si vous voyez mal, vous me le dites.Avec Django, dans les settings, il y a beaucoup, beaucoup de choses.
00:09:31 :Il y a toutes les applications qu'on va utiliser, les middlewares, mais ça, on ne va pas prendre le détail.Les dossiers de template, ça va être les dossiers où on va avoir nos fichiers HTML.
00:09:40 :La base de données qu'on va utiliser, donc là, en développement, ça va être du SQLite.Qu'est-ce qu'il y a encore ?Alors, on va faire maintenant ça.
00:09:51 :On va parler en français.Parce qu'en fait, avec Django, on peut définir un langage et ensuite, il y a la traduction qui se fait.Il y a un module pour faire la traduction.
00:10:02 :Et ça, c'est les time zones, c'est les fuses de horreur.Ce n'est pas plus intéressant ici, mais on va en parler.Donc, voilà pour l'aboréscence quand on lance un projet.
00:10:14 :Maintenant, dans un projet, il faut des applications.On va créer des applications.Donc, par exemple, pour les confinisateurs, on peut très bien faire une application account.
00:10:27 :Pour la partie blog, on va créer une application blog.Moi, par exemple, j'ai créé une application marketplace.J'ai créé une application account pour les utilisateurs, une application shop pour la marketplace pure,une application SAV pour tout ce qui est gestion des demandes d'utilisateurs.
00:10:48 :C'est bien de tout découper comme ça.Quand on veut créer une application, on va utiliser le manager de Django qui est ici.Il nous permet d'utiliser pas mal de sous-commandes.
00:11:02 :C'est d'ici qu'on va pouvoir... J'en parlerai après des modèles.J'en parlerai plus quand on va en créer un.Pour l'instant, on va créer notre application.
00:11:13 :Donc, start app.On va l'appeler transport utilisateur.Account.Donc là, vous voyez, on a un dossier qui est apparu.Et ça va être notre première application.
00:11:28 :Il faut savoir que du coup, l'utilisateur de Django, il y a déjà un modèle qui existe de base dans Django.Mais le problème, c'est que si le jour où vous le faire évoluer, ce modèle,ça peut être compliqué si vous le faites en plein cours de projet.
00:11:47 :Après, ça peut être chiant de rattraper le coup.Du coup, même si vous faites un modèle de base utilisateur, c'est bien de le définir d'office tout de suite.
00:11:54 :Donc c'est pour ça que je crée des applications et qu'on raconte d'office dans les applications.Ce qu'on va faire sur le blog de l'instant à faire ce soir, c'est que par contre,on ne va pas laisser la possibilité aux utilisateurs de s'inscrire.
00:12:09 :On va justement faire un blog pour nous où nous, on publie.Mais au moins, c'est évolutif.Si on a besoin de créer des comptes utilisateurs, au moins, on aura notre modèle tout fait.
00:12:18 :Mais là, on referait une session exprès pour les outils d'authentification.Donc là, j'ai créé une application.Dès qu'on crée une application, si on veut qu'elle soit prise en compte,on va dans les settings de Django, ici, et on la renseigne.
00:12:35 :Donc je vais appeler Accode.Et tout simplement, les utilisateurs.On va commencer du coup les settings tech.Je voulais voir un truc avant, par contre.
00:12:50 :Ce que je voulais vous dire avant, avec Django, il y a tout ce qui est gestion des fichiers statiques.Les fichiers statiques.Les fichiers statiques, ça va être les fichiers CSS, JavaScript, les images,et les autres fichiers qui ne vont pas être créés dynamiquement.
00:13:09 :Après, il y a les fichiers médias.Les fichiers médias, ça va être des fichiers téléchargés.Oui, on peut téléverser.Par exemple, un utilisateur qui va vouloir reclover une image, ce sera un media file.
00:13:25 :Django a une façon de gérer ça.Dans les settings, ce qu'il faut faire,c'est qu'il faut toujours définir une URL pour les fichiers statiques.Les fichiers statiques, c'est vraiment les fichiers qui ne sont pas créés dynamiquement.
00:13:47 :Pour ça, on définit une URL.En production, c'est un peu différent, il faut rajouter autre chose,mais là, on est en développement, donc ce n'est pas embêtant.
00:13:56 :Et les fichiers statiques, ils sont automatiquement servis par RunServer.On verra après, quand on lance le serveur,c'est automatiquement géré par une application qui est StaticFile.
00:14:11 :Pour ça, on n'a rien à faire.On a juste ça, c'est bien, ça fonctionne.Par contre, pour les fichiers médias, on va rajouter deux lignes.
00:14:19 :Et ces deux lignes, du coup,on va avoir donc MediaURL pour avoir l'URL des fichiers médias.Donc là, on va l'appeler Media.Et il va falloir qu'on définisse un chemin pour nos fichiers médias.
00:14:38 :Donc MediaRoute.Et je ne sais pas si on a eu le pass libre,mais BaseDir, en fait, c'est un objet de passe, donc c'est un chemin.
00:14:51 :Et en fait, c'est résolve par an, point par an.Donc dans Settings, par an, point par an.Vous allez comprendre juste après.Donc BaseDir, et on va appeler notre dossier.
00:15:04 :On va l'appeler, je crois, MediaFiles.Voilà.Ça, c'est déjà pas mal.Donc, on a créé une application Account.Maintenant, on va définir, du coup, un modèle.
00:15:22 :Donc là, on n'a toujours pas de base de net créée, à ce niveau-là.On va créer un modèle, donc on va l'appeler CustomUser.Je crois qu'il y a du monde qui arrive, non ?
00:15:41 :J'ai des bruits bizarres qui se font sur le...C'est pas grave.Donc, CustomUser, voilà.Donc, Django, ça marche beaucoup avec les classes, forcément.C'est du code réutilisable.
00:15:56 :Donc, pour travailler avec les utilisateurs,ce qu'on va faire, c'est que, c'est pareil, tout est inclus avec Django.Donc, dans Django.contrib.host.models,on va importer AbstractUser et BaseUserManager,parce que notre modèle utilisateur, pour fonctionner, il a besoin d'un manager.
00:16:19 :Et c'est pareil pour tous les modèles, en général,ils ont tous un manager pour fonctionner.Donc, on va commencer par créer notre classe utilisataire.Je ne comprends bien pas ce qu'il se passe.
00:16:30 :C'est CustomUser qui va hériter, du coup, d'AbstractUser.Et AbstractUser, quand on regarde dans le code source,on se rend compte qu'il y a déjà un username, un firstname,un lastname, un email, voilà.
00:16:49 :Donc, dans notre modèle, nous, on va redéfinir, en fait, l'email,parce que moi, j'aime bien, par exemple, ce que vous regardez.L'email, ici, il n'y a rien qui indique qu'il peut être unique.
00:17:04 :C'est-à-dire que là, on peut créer plusieurs comptes avec le même email.Donc, moi, j'aime bien souvent faire définir, ici, le champ email.Donc, là, je fais Models.EmailField,
00:17:17 :donc c'est un champ à base donnée pour accepter les emails.Unique, ça veut dire que, du coup, l'email, il est forcément unique.S'il y a un utilisateur qui veut créer un deuxième compte avec mon email,c'est pas possible, il n'y aurait rien à voir.
00:17:35 :Maintenant, du coup, on va garder l'username.On hérite ce username.C'est pour ça qu'on en parlait tout à l'heure,la PO, là, c'est important de connaître, quand même,parce que le username, je ne le définis pas, parce que je vais en hériter.
00:17:53 :Et vu que l'attribut est très bien fait, il ne se touche pas,pareil, FirstName, LastName, il ne se touche pas.Je laisse tel quel.Par contre, ce qu'il va se passer, c'est que, moi, j'ai envie de me connecter avec mon email.
00:18:08 :Parce que, par défaut, avec Django, on se connecte avec l'username.Alors, on peut faire cet username.Field est égal à email, simplement.C'est avec notre champ email qu'on va se connecter.
00:18:22 :Les champs requis.Là, c'est vraiment les champs obligatoires lors de la création des utilisateurs.FirstName, LastName, on s'en fiche.On va juste définir l'username, en fait, qui va être un champ obligatoire.
00:18:38 :L'email est de suite obligatoire, puisqu'il est un username.Field.Donc, pas besoin de le remettre ici.De toute façon, si vous le remettez dedans, il n'y aura pas d'erreur.
00:18:45 :Et je disais que, du coup, pour gérer notre classe utilisateur ici,il va falloir une autre classe qui s'appelle CustomUserManager.Donc, BaseUserManager.On m'en hérite.
00:19:08 :Et ici, on va définir les méthodes de création d'un utilisateur.Donc, on va la redéfinir.Donc, ça, c'est des choses qui sont assez standard avec Django.
00:19:18 :Ça, ce que je fais, là, c'est j'invente rien, par contre.C'est dans tous les docs, tous les exemples, les tutos, ça vous retrouvez.Donc, nous, on veut avoir l'email.
00:19:29 :On avait dit username, le password.Et on va laisser, du coup, les textes.Excusez-moi, j'ai un texte.Je lance juste quelque chose avec mon...Hop là, voilà.
00:19:52 :Excusez-moi.Donc, quand la méthode avait été appelée, s'il n'y a pas d'email,du coup, on va dire qu'il nous faut forcément un emailparce que l'email, il est obligatoire.
00:20:04 :Donc, if not.Ici, je ne vais pas entreprendre le détail parce que c'est encore autre chose.On va se baser plus après sur l'application blog.
00:20:12 :Donc, if not email.On va élever une erreur qu'on va appeler email obligatoire.Si je n'ai pas username, c'est pareil.Hop là.Et là, on va utiliser les objets de Django.
00:20:39 :Donc, ici, l'utilisateur, il va être égal à...Alors, ça, c'est des choses aux objets de Django.Un modèle, self.model.Email va être égal à self.normalizeEmail.
00:20:54 :On va repasser l'email.Donc, c'est vraiment que l'APO.Ça peut paraître un peu abstrait comme ça,mais c'est vraiment que les objets de Django qu'on utilise.
00:21:02 :L'username, on ne va pas s'embêter.Ça va être notre username.Et on ne va pas oublier...Donc, voilà un exemple.Et ici, du coup, il nous manque quelque chose.
00:21:15 :C'est le mot de passe, mais Django a prévu ça.C'est setupPassword.C'est ça, setupPassword.Donc là, le mot de passe, du coup, il est géré.
00:21:29 :Et maintenant, on se regarde l'utilisateur.Et on retourne l'utilisateur.Maintenant, on se rend compte que du coup,il faut que notre modèle utilisateur soit lié à ce manager.
00:21:44 :Donc, ce qu'on va faire, c'est qu'on va faire juste object.Object, voilà, qu'on a ici.Ça va être le customUserManager.Voilà.Il manque une dernière chose.
00:21:57 :Donc là, on peut créer des utilisateurs,mais il nous manque une autre chose.On ne peut pas créer des administrateurs, des super-utilisateurs.Il n'y a rien de très compliqué.
00:22:06 :On va reprendre quasiment la super-user, la même chose.Donc là, on va repartir sur les mêmes...Je vais juste les copier-coller.Ouais, il y en a qui doivent se dire que j'ai terminé de répondre copie-copie.
00:22:22 :Ici, ce qu'on va faire, c'est que du coup,on va se faire User.Utégala.Self.ClientUser.Encore une fois, orienterObject.On reprend l'email.UserName.Le password.
00:22:44 :Et le coax.Voilà.Et ce qui va se passer,c'est que le super-utilisateur, ça, vous allez voir pourquoi après.User.Is.Staff.Donc, il fait partie du staff.
00:22:53 :Il peut accéder à l'admin.C'est true.Parce que par défaut, ici, ça va être en false.Et User.Is.SuperUser.Donc là, on verra que ça va être vraiment le super-utilisateur.
00:23:07 :C'est vraiment l'admin.Allez, on sauvegarde.On appuie sur Save et on retourne l'User.Voilà.Donc là, on a fini.On a modélisé notre utilisateur dans notre base de données.
00:23:25 :Et avec Django, vous allez voir.Si j'ai pas d'erreurs, on est sur pyMakeMigration.Donc là, on va créer des fichiers de migration pour modéliser notre base de données.
00:23:41 :Je sais quoi.Ah, je me souviens de l'accord.Python.Configuration.C'est peut-être rapide.PyMakeMigration.Et il y a un petit problème.Je me suis bourré sur quelque chose.
00:23:55 :Ouh là.Si je les avais, je suis là.Non, attendez.Qu'est-ce que j'ai fait ?CreateSuperUser.CustomUserManager.C'est le BaseUserManager.OK.CreateUserManager.Ils ont un password.
00:24:10 :OK.Ça, je l'ai.Ils en aiment.Ah, OK.Peut-être que oui.Dans les settings, quand on crée un modèle d'utilisateur personnalisé, il faut le définirdans les settings.
00:24:29 :J'espère que l'erreur vient de là.Dans tous les cas, il faut le faire.C'est AuthUserModel.Et c'est une chaîne de caractère.On va passer le nom de l'application.
00:24:40 :Donc, ça va être Account.CustomUser.Voilà.Normalement, si je n'ai pas fait de...C'est AuthUserModel.Je suis là-dessus.On va réessayer la migration.Bon, alors si je n'ai rien oublié.
00:25:00 :Mon account direct, c'est Make.C'est bon.C'est ça qui bloquait.Donc, vous voyez, les settings, c'est vraiment le cœur du projet.Il faut penser vraiment à tout bien paramétrer dedans.
00:25:13 :Sinon, il n'y a rien qui se fait.Par exemple, si je n'avais pas eu Account, ça aurait été compliqué.Donc là, ce qu'on a fait dans l'application de migration, on a notre modèle qui a étécréé.
00:25:23 :Très bien.Et il y a ce fichier-là qui s'est créé tout seul avec la commande MakeMigration.Et quand on regarde ici, quand on va envoyer ce fichier-là pour la base donnée, Djangova nous créer la base donnée et créer tous les champs qu'il faut avec tous nos paramètresqu'on a demandé.
00:25:42 :Bon, là, il y a les paramètres parce que vu que j'ai géré de GasprectUser, il y abeaucoup plus de champs que ce que moi j'ai défini, mais c'est un live tout à l'heure.
00:25:51 :C'est de le remettre à objet.Donc maintenant, si je faisIconet que je fais un Migrate, là, on va envoyer tout.On va tout envoyer dans la base donnée.
00:26:05 :On va modéliser la base donnée.Là, on va la créer en même temps.Boum.Tout est OK.Et on a un petit fichier.DDB SQLite 3.
00:26:14 :Donc, si je l'ai mis où ? J'ai un petit DBB.C'est pour ça que je voulais l'ouvrir.On s'en fiche.Je voulais l'ouvrir.Il est où ?
00:26:28 :DBBrowser, voilà.Je pense que vous voyez.Enfin, j'espère.Ouvrez une base donnée.C'est dans Dev.Animation.Blog.Voilà.Donc, là, on voit le parcours des données.
00:26:41 :Donc, là, ici, Crystal User, on voit bien qu'on a une table Crystal User.On a plusieurs.Django crée automatiquement des tables.Voilà.Mais nous, c'est celle-là qu'on a créée avec notre modèle.
00:26:54 :Donc, pour l'instant, les 8, c'est normal.Et nous, on a créé, du coup, cette commande-là.Cette méthode-là.Donc, ce qu'on va faire, on va créer un super utilisateur, un administrateur.
00:27:07 :Donc, on va faire un createSuperUser.Donc, je vais mettre mon nom d'adresse email.Ok.Alors, voilà.Gmail.com.Allez.Tac.Voilà.Donc, là, c'est bon.J'ai été créé.
00:27:30 :Est-ce qu'on peut racheter avec celui-là ?Je ne sais plus.C'est bon.C'est ça.Et voilà.Et là, on voit que je suis, du coup, dans la base de données.
00:27:42 :Voilà.C'est un site d'actifs.Donc, je suis un super utilisateur.Je suis bien.J'ai accès à l'admin.Voilà.Il n'y a pas de problème.Tac.
00:27:51 :Est-ce que, pour l'instant, ça va ou c'est un peu trop abstrait ?Parce que là, on va peut-être filer vraiment des modèles après.C'est clair pour moi, perso.
00:28:03 :Bon, après, j'ai quand même quelques notions.Mais je pense qu'il faudrait que tu reviennes un peu plus sur les modèles, du coup.Oui.Oui.Oui.
00:28:12 :C'est vrai que je suis direct dans les utilisateurs.Et c'est vrai que ce n'est pas forcément le plus cool pour commencer.Donc, on va revenir sur les modèles.
00:28:23 :Tac.Voilà.Du coup, c'est pour ça qu'on va…Ça, c'est bon.Tac.On va revenir.Tac.Ça, c'est bon.Ça, c'est bon.Je vais fermer les fenêtres que j'ai dans mon…Et ça, c'est OK.
00:28:44 :Hop.Donc là, on a…Notre utilisateur, on l'a fait.Pour continuer sur les modèles, du coup, je vais créer l'application blog.On va créer l'application blog et comme ça, on va attaquer sur les modèles.
00:28:58 :Vraiment, on va expliquer ça.Donc…Donc, start app.Et on va l'appliquer.Blog.Voilà.Et donc là, on a un nouveau dossier qui s'appelle blog et c'est la même structure.
00:29:17 :Quand on regarde, c'est pareil.Donc, on n'oublie pas ici, dans les applications, de le rajouter.Et on va commencer, du coup, à réfléchir, à modéliser un peu par un article.
00:29:33 :Comment il va être créé dans notre blog ?Comment on va faire ?Alors, on va ouvrir notre fichier.Modèles, dans blog.Voilà.Donc, ça c'est bon.
00:29:50 :Ça c'est OK.Ça c'est OK.Ça c'est OK.Le modèle.Pour moi, un blog, je ne sais pas, on peut avoir une date.Ça me paraît logique d'avoir une date de parution d'un article.
00:30:02 :Une date de mise à jour peut-être.Un titre.Un slug.Est-ce qu'il y a un slug ou pas ?Dites-moi si jamais vous ne savez pas, mais un slug pour l'URL.
00:30:13 :Le texte.L'article en lui-même.L'auteur.Peut-être une image.Et ça me paraît pas mal pour l'instant.Donc, on va revenir, du coup, sur les relations, justement.
00:30:32 :Voilà.Alors, ça c'est bon.On repart sur les modèles, du coup.On va créer notre modèle de blog.Donc, les modèles, c'est ce qui va modéliser notre base de données, comme on l'a vu tout à l'heure.
00:30:55 :Donc, classe, on va l'appeler blog post, parce que ça va être un…On va créer un modèle d'article.Blog post.Et on hérite.Donc, ça c'est direct, c'est fait avec Dango.
00:31:05 :Ils le mettent d'office, cet objet-là.Donc, on va hériter des modèles.Modèle.Donc, on a dit qu'on voulait, je ne sais pas, une date.Donc, on va utiliser modèles.
00:31:20 :DateField.Donc là, dans la base de données, on aura un champ avec une date.En paramètre, je vais mettre un verbose name.Verbose name, c'est juste pour que ça soit plus sympa dans l'administration.
00:31:33 :On va l'appeler date de publication.Voilà.On va…Une date de mise…Enfin, ouais, un champ pour les mises à jour.Donc, modèles.dateField.Donc là, c'est vraiment quand on mettra à jour notre article.
00:31:50 :On l'aura ici.Donc, on va l'appeler mis à jour.Voilà.Et ça, je vais vous expliquer ce que c'est.Autono égale to.Autono égale to, c'est qu'à chaque enregistrement de…Donc, quand on va créer un article,quand on va le modifier, quand on va le sauvegarder,à chaque fois, la date va se mettre à jour toute seule.
00:32:12 :Voilà.Avec ce paramètre.Par contre, ici, ça sera à nous de choisir la date.Avec ce que là, je n'ai rien spécifié.On continue.On veut un titre.
00:32:23 :Un titre, ça va être un…On va utiliser un champ pour du texte.Donc, pour un champ pour du texte,on a ce qu'on appelle le cartField.
00:32:30 :Donc, un cartField,on va forcément définir une longueur maximum.Je ne sais pas, un titre,on va mettre de son caractère comme si on élarge.
00:32:38 :Hop.Titre.Ensuite, on va avoir ce que je disais,on va appeler le texte,le corps de l'article en question,on va appeler texte.Texte.
00:32:56 :Là, par contre, on va avoir un textField.Voilà.Donc là, on peut vraiment écrire notre article.Il n'y a pas de limite.Donc, on va l'appeler le contenu.
00:33:08 :Par contre, moi, j'aime bien pour mes URL,c'est avoir un slug.Donc, c'est vraiment…Dans l'URL, si l'article s'appelle…Article sur Django,j'aime bien dans mon URL avoirGabrielle.fr
00:33:20 :slash blogslash article sur Django.Article sur Django, quoi.Parce que l'URL, elle a vraiment moins de sens.Donc, on va faire Models.slugField.Blank égale to.
00:33:37 :Alors,Blank égale to,c'est-à-dire qu'ici,on peut le laisser vide.Quand on va soumettre notre article,c'est un champ qu'on va pouvoir laisser vide.Là, il faudra forcément qu'on renseigne ici,qu'on renseigne ici,qu'on renseigne ici.
00:33:50 :Parce que je n'ai pas mis de Blank égale to.Mais vous allez voir pourquoi,parce que le slugField ici,on va faire en sortequ'il se dévenir automatiquementen fonction de notre titre.
00:34:01 :Donc, j'ai le slug.L'auteur, c'est important aussi.Alors,là, intéressant.On va utiliser ce qu'on appelleune ForNK.Parce qu'en fait, l'auteur,l'auteur, ça va être...
00:34:18 :Bon, du coup,on va faire un exemple.J'ai créé mon compte,donc ça va être toujours moi.Mais il faut bien spécifier à Djangoque l'auteur,ça va être un utilisateur.
00:34:27 :Donc, ça va être un autre modèle,en fait, en soi.Une autre classe,un autre modèle.Donc, on va utiliser une ForNK.Une ForNK,c'est une relation de un à plusieurs.
00:34:42 :Donc,ce n'est pas forcément évident,ça, au début,à l'intégrer.On a des ForNK,c'est une relation d'un à plusieurs.J'avais écrit un petit...Voilà.
00:34:54 :Je ne sais pas si on va voir assez.ForNK.Donc, un à plusieurs.C'est peut-être petit.Je ne sais pas si on voit...Joner,est-ce que tu vois assez,toi, par exemple,ici, la classe ou pas ?
00:35:07 :Non.Voilà.Bon.Par exemple, imaginezque vous avez un modèle,dans votre base donnée,une classe et un modèle élève.Donc, il représente à chaque fois un élève.
00:35:22 :Ici,vous allez avoir votre ForNK.Donc, un élève,il va appartenir à une classe.Mais une classe,elle peut avoir plusieurs élèves.Voilà.C'est tout bête,mais au début,ça peut être un peu lourd à intégrer.
00:35:39 :Il y a les champs.Je vous parle des trois champsque j'utilisais en relation,comme ça.Il y a le many-to-many.Là, on ne va pas l'utiliser.
00:35:45 :Je ne sais pas si j'en parle.Même le one-to-one,on ne va pas l'utiliser.On va aller vite là-dessus.Many-to-many.Par exemple, ici,on va avoir une activité.
00:35:55 :On va avoir des élèves.Ça veut dire que, du coup,les...Voilà, un élève peut s'inscrireà plusieurs activités.Et chaque activité a plusieurs élèves.
00:36:06 :Voilà.Donc, ça va être...On va avoir plusieurs élèves ici.Le one-to-one,celui-là, il est vraiment très pratique aussi.J'aime bien.Une carte d'identité.Ici, forcément,on va l'associer à un élève.
00:36:20 :Un élève ne peut avoir qu'une carte d'identité.Une seule carte d'identité.Une carte d'identité, en fait,ne peut avoir qu'un élève, en gros.Voilà.C'est comme ça que ça...
00:36:29 :que ça marche.Du coup, on a été où ?On a été à...Voilà.Donc là, le but, c'est de se direimaginons qu'il y ait plusieurs utilisateurs.
00:36:41 :Là, dans ce cas, on n'aurait qu'un seul.C'est que, du coup,un article,il est associé à un utilisateur,mais l'utilisateur pourra avoirplusieurs articles.
00:36:52 :Comment on fait ?Donc, ici, il faut qu'on importenotre modèle utilisateur.Donc, il y a une façonde le faire avec Djangoqui est assez standard.
00:37:05 :Ce qui est conseillé, c'estdjango.confimport settings.Et si vous vous souvenez, en fait,dans notre fichier de settings,on avait définiautre user model.
00:37:19 :Eh bien, en fait, c'est ça qu'on va utiliser.Je ne fais pas un...Ici, je ne fais pas unfrom project.settings importparce qu'avec Django,c'est toujours conseillé de faire...
00:37:30 :de passer par ce...par conf.Voilà.Avant, je faisais un peu à l'amour.Je faisais un from project.settings import.Voilà.Je ne sais plus.Je n'ai pas eu de problème en soi,mais ce n'est pas conseillé.
00:37:43 :Donc, c'est autre user model.Donc, ça, ça va êtrenotre modèle utilisateur.Un paramètre obligatoire,c'est le onDelete.Donc, qu'est-ce qui se passesi notre utilisateur est supprimé ?
00:37:59 :On peut dire que le...L'article, on le supprime en même temps.Donc, là, on ferait un cascade.Donc, là, c'est-à-direqu'on supprime l'utilisateur,on supprime l'article.
00:38:10 :Ça va en cascade.On peut très bien dire aussiun modèle.setNull.Donc, là, on va le définir sur nul.Voilà.On a notre hauteur.Donc, si on fait ça,du coup, il faut qu'on dise...
00:38:27 :Il faut que...Il faut autoriser, en fait,ce champ-là à être nul.Si on ne fait pas ça,on ne peut pas mettre ce paramètre-là.
00:38:34 :On ne peut pas mettre le setNull ici.Voilà.Est-ce que je fais une...Je pense qu'on ne va peut-être pas le fairece soir, du coup,parce que ça a pris du temps.
00:38:45 :On va s'arrêter, là, pour le modèle.Donc, ce que je disais, maintenant,c'est qu'on va pouvoir envoyerces modèles-là,comme on a fait tout à l'heure.
00:38:56 :Donc, on va mettre les champs que j'ai crééssur notre chaîne.On a créé notre modèle, ici.C'est notre submigration qui estblog et ici.
00:39:06 :Voilà.Donc, on retrouve bien les champs que j'ai créés.OK.Et maintenant,on fait un migrate.Ici, je vais voir dans ma base de données.
00:39:20 :On va refaire un petit refresh.Ici, je ne la vois pas.Donc, j'ai le nom de l'applicationet le nom de la table.Donc, là, je vais direid, date, update, title, texte,slug,auteur id.
00:39:30 :Voilà.Donc, ça, c'est l'auteur, en fait.Donc, j'aurai l'accès primaire de l'auteur.Ça fera quand même des flèches,après, aussi, du coup.Bon, on verra quand ça aura créé un article.
00:39:40 :Donc, c'est bien.On peut commencer à écrire des articles,mais le problème, c'est qu'ici,je veux avoir un slug.Et le slug,je n'ai pas envie de me mettre à le taperà chaque fois,pour qu'il soit automatiquement généréen fonction de mon titre.
00:39:53 :Donc, ce qu'on peut faire,il y a une fonction qui est vraiment pas mal.C'est com.django.utils.text.On va importerslugify.Voilà.On va faire un deadfield.
00:40:11 :On va surchanger la méthode save de Django.Self, j'ai mis automatiquement.Parce que save,on peut lui passer d'autres paramètres,comme des comités et tout.
00:40:23 :Mais ça, on va en parler ce soir.If not,donc si on n'a pas,c'est orienté au G1.Donc, si on n'a pas de slug de renseigner,au moment de sauvegarder,donc if not self.slug,
00:40:34 :sinon, par instance,self.slugva être égalàslugifyself.util.En fait, on va justesluggifier le titre, en gros.Voilà.Et en fait, sluggifier,c'est dans notre titre qu'il y a des espaces,des points, j'en sais rien.
00:40:52 :Il va nous mettre des petites séries du 6automatiquement.Voilà.Donc, pour l'URL.Maintenant, une chose,il faut qu'on appelle la méthode superpour que le save se fasse.
00:41:04 :Tac.Voilà.Voilà.Donc, on va regarder.Je ne pense pas qu'on nous en refait une.J'ai un doute.Un make.Non, c'est bon.Maintenant, on va aller voir ce qu'il se passe.
00:41:24 :Du coup, on va...Alors, excusez-moi,ça c'est un truc que je vais fairelà vite fait,avec pas de charme.Et je vous explique tout de suite.
00:41:33 :RunServer.Mon script, il est dansblog.C'est ça.Donc, si vous avez compris, en fait,RunServer.Si vous avez compris,ce que je fais là,c'est pour éviter d'avoir à faireautant managerRunServer.
00:41:55 :Donc, ça c'est pour lancer mon serveur,pour pouvoir tester mon projet.Voilà.Moi, en fait, ce que je fais,c'est que je me crée ici,comme ça, ça se fait tout seul.
00:42:04 :Alors.Voilà.Donc là, on voit quenotre projet Djangoqui s'est lancéavec le RunServer.Maintenant, chose importante,les URL.Pour l'instant,on n'a qu'une URL.
00:42:20 :Et l'administration,on n'a pas encore défini d'URLpour aller surpour aller sur les articles,l'index du blog,parce qu'on a encore rien fait en fait.
00:42:28 :Mais on voit bien,donc du coup, on a admin.Donc, si je vaissur l'admin,voilà, on voit qu'on aune administrationqui est générée par Djangoautomatiquement.
00:42:39 :Je me connecte.Et authentification,autorisation,donc ça c'est les groupes,c'est un truc qui est géré par Django.Par contre, ce qui est embêtant,c'est que je ne vois pasmes utilisateurset je ne vois pasmes modèles d'articles.
00:42:52 :Parce qu'en fait,avec Django, ici,il faut faire une petite chose.Donc,on va importer,c'est le custom.Ah, je suis dans blog.Importe, on l'a fait.
00:43:06 :On avait appelé blog post.On avait appelé blog post.Il faut faire une chose,c'estqu'on va utiliser admin.Ça, Django,il l'a émis tout seul.
00:43:18 :Admin.site.register.Et là, on met blog post.Comme ça,on va le voir dans l'admin.Et pareil,pour account,on a notre admin ici.Donc, c'est trois.
00:43:30 :Pour les modèles,import custom user.Je ne vois pas qui est ici.Admin.site.register.Et on va mettrecustom user.Voilà, on varevenir sur notre.
00:43:49 :Voilà,et ici,on a bien l'application account,l'application blog,utilisateur.Je suis bien ici.Mon mot de passe est acheté.Voilà,j'ai toutes les infos.
00:44:00 :Je suis super utilisateur.Je suis actif.Je suis statut équipe.Et pour l'instant,on n'a pas encored'article de blog.Voilà.Tac.Tac.Ce que je voulais faire.
00:44:15 :Attendez,mon écran est vachement grossi ici.Voilà.OK.Donc,ce qu'on va faire,c'est que maintenant,on va revenir surle modèle ici.Voilà,qui est là.
00:44:32 :On va d'abord créer un article.Je vais faire comment ?Voilà,on va créer un article d'abord.On va créer un article.Je teste.Ici.
00:44:42 :Donc,ajouter un article.La date d'application,on va être 15.On va l'appelersuper.On met l'article.Le contenu,on va,je ne sais pas,il y a plein d'horaires,mais ici,c'est ça.
00:44:58 :On va prendre un trucqui remplit des textes au hasard.C'est sympa ça.Bon,on va réfléchir après.Je galère.Hop.Hop.Là,c'est du texte.
00:45:12 :Le slug,on ne met rien.On va dire qu'il serait tout seul.Et ici,voilà,je peux choisir du coupmon outil d'affaire.Là,c'est moi.
00:45:21 :J'enregistre.Maintenant,si je reviens dessus,voilà,j'ai bien mon slugqui serait tout seulavec mes,comment dire,avec mes petites cirées.Par contre,on voit que ce n'est pas top iciparce quequand on regarde blogspot,voilà,je préfère ici avoir le titrede mon article,par exemple.
00:45:38 :Ça ne rend pas bien flou.Donc,ce qu'on peut faire,c'est pareil.Dans les modèles de l'article,on va fairesurcharger la méthodestret on va retournersimplementtext.title.
00:45:49 :Et là,vous allez voirque dans l'admin,hop là,je vais prendre le bourre.Boom.Là,j'ai mon premier article.Super premier article.Ça a changé.
00:45:59 :Euh,on commenceà être pas trop malau niveau du modèle.Je penseque ça me plaît.OK.Euh,je vaiscréereuh,on a crééun article.
00:46:12 :Euh,OK.Maintenant,on aimerait bienfaire du coupde l'article,on va en créer un deuxièmebien d'ailleurspour avoirun peu de contenu.On va créerun autre article.
00:46:24 :Tac.Pareil,on va le mettreeuh,je sais pas,on va le mettre au 14.Bon,on va laisser au 15sinon ça va plantercomme l'update.
00:46:34 :On va l'appelereuh,deuxième article.Voilà,je mets là,j'ai,donc,j'ai,super,deuxième article.Voilà,blablabla,on s'en fiche.Hop.On enregistre.On va faire un pli dernier.
00:46:50 :Hop là.On va faire,donc là c'est le troisième.J'ai fait une faute.Ouais,bon c'est pas grave.Troisième article.On va reprendreun autre l'origine ici.
00:46:59 :C'est très bien d'avoir,d'avoir du contenu.Boum,boum,boum.Voilà,donc là j'ai trois articles.Euh,maintenant ce qui se passec'est que je vais vouloircommencer à avoir un,quand les gens vont sur mon blog,à commencer à affichertous mes articles.
00:47:14 :Euh,ce qui va se passer du coup,hop là,je vais couper le serveurpour l'instant,c'est qu'il nous fautau moins un template de base.
00:47:24 :Donc on va pas faireautant sur les templatesde HTMLparce que c'est pas le butde ce soir,mais ce qu'il fautquand même comprendreavec Django,c'est que tous les templatesque vous allez créeren fait dans vos applications,ils vont être reconnuspar Djangoautomatiquement.
00:47:38 :Si vous faites icitemplates,tous les fichiers,tous les fichiers HTMLque vous allez mettre dedans,ils vont être connusautomatiquementparce que app.dirs ici,
00:47:49 :donc les templates,app.dirsest true,ça veut dire que du couptout ce qui,tout ce qui est dans les applications,dans les dossiers templatesest reconnu.
00:47:57 :Par contre,si on a des dossiers templatesque l'on veut mettrehors des applications,il faut les spécifier ici.Donc là,on vabase.dirhop là,c'est un objetun objetpasse,comme je l'ai dit tout à l'heure,template,ça veut dire qu'icion peut maintenant créerun dossier
00:48:21 :à la racinede notre projetet il sera reconnupar Djangoparce qu'on l'a renseigné ici.Ici on va l'appelerbase.htmlvoilà.Je vais tout effacer,par contre,je vais en prendre un copier-collerparce que ça,les templates HTMLce n'est pas ce qui va meintéresser le plus ce soir.
00:48:43 :Je ne veux pas qu'on perdetrop de temps là-dessus.Je vais juste vous montrercomment ils ressemblent.Hop, hop.En gros,c'est bootstrappour ceux qui ont reconnuou pas.
00:48:52 :L'autre,static,c'est pour chargerdes fichiers statiques.Si jamais on ades fichiersstatiques,je ne sais pas,du CSS par exemple,donc ça je le mets d'office.
00:49:02 :Là,j'ai mon menu.J'ai un petit moteurde recherche ici.Et tout simplement,tout ce que j'ai ajouté ici,en fait,c'est des blocsqu'on appelle des blocs.
00:49:11 :Et ça,c'est des blocsqu'on va pouvoir,le template qu'on a là,on va le réutiliser partoutdans notre projet.On n'aura pas besoinde créer les menusdans chaque fichier HTML.
00:49:20 :On aura justeà faire un extendici,sur le fichierqu'on va étendre,extendbase.html.On va mettrenos fichiers,nos balises blocs.Donc là,on a le bloctitlele bloc bodyet puis on mettranotre contenu dedanset c'est tout.
00:49:38 :Voilà,tout simplement.Vous allez voir,ce sera plus simplede comprendrequand on sera dessus.Là,c'est le menu.Donc,ce que j'ai fait pour le menu,c'est que j'ai l'accueil.
00:49:49 :Pour revenir à l'accueil,voilà forcément.Contact,on ne se servira pas ce soirparce qu'on n'aura pas le temps.Voilà.Et là,c'est tout ce que voitl'utilisateur.
00:49:58 :Accueil et contact.On peut utiliserun langage de gabaritavec Django.En fait,ici,on peut utiliserenfin,c'est comme du Python,en fait,dans les templates.
00:50:10 :Donc là,à chaque requête HTTP,on va avoirenfin,on va avoir l'objetrequest.Et si je faisrequest.user,c'est qu'il y a forcémentun utilisateur,en fait.
00:50:21 :Donc,c'est soitenfin,soit il n'y en a pas,mais c'est qu'il y en a unmais il n'est pas connecté,voilà.Pour dire simplement,on ne va pas rentrerdans le détail ce soir.
00:50:31 :Donc,c'est user.On pourra mettreuser.authenticate.C'est un petit utilisateurconnecté.Voilà,vu que je suis tout seulsur mon projet,je ne vais pas m'embêter,je vais être super user.
00:50:42 :Donc,si c'est moi,si moi,en tant qu'admin,je suis ici,eh bien,j'ai un menu qui apparaîtavec nouvel articleet un menu qui apparaîtadministration.
00:50:52 :Voilà,simplement.Bon.C'est pas mal.Maintenant,on va pouvoir commencerà créernotre première paged'index.Euh,notre première page d'indexsur le blogavec nos articles.
00:51:05 :Euh,du coup,euh,ok,je vais créerma première vue.Alors,excusez-moi,tac,c'est bon.Là,je l'ai fait.Je me mets les petites notesen même temps,des fois,parce que je ne sais paspourquoi j'ai mis une merde.
00:51:22 :Tac.Alors,avec Django,du coup,on a parlé tout à l'heuredu modèle vue template.Le modèle,les vues,ça va être utilepour,euh,justement,rendre ce qu'on a,de présenter ce qu'on va se donner,en fait.
00:51:37 :C'est comment on va le,le,qu'est-ce qu'on va vouloirreprésenter l'utilisateuret le template,c'est vraiment le fichier HTMLoù on va,où on va exposer nos données.
00:51:45 :Vous allez comprendrequand on va être dedans.Euh,le blog vue,ici,tac.Donc,modèle vue template.Les modèles,on a vu.Maintenant,on est dans la vue.
00:51:57 :Avec Django,on va utiliser,euh,ce qu'on appelle des,soit des vues fondéessur les,des fonctions.Donc,on va écrire des fonctionspour écrire nos vues.
00:52:07 :Soit des vues fondéessur les classesoù on va réutiliserdes,des modèles de Django.Alors,avec Django,il y a un principede ce qu'on appelledes mixins.
00:52:17 :C'est qu'on peut utiliserplein de classesqui font différentes choses.Donc,par exemple,il va y avoir des classesqui vont permettred'utiliser des,des formulaires,euh,pour créer des mixins.
00:52:28 :Voilà.Donc,on peut utiliser des classespour créer des vues.Donc,on va avoir des loginspour les mixins.Ça va être une classequi va nous permettrede demander,euh,le login de l'utilisateurpour accéder à une vue.
00:52:41 :Il va y avoir le for mixinqui va, par exemple,permettre d'afficherdes,des formulaires.Voilà,et ainsi de suite.Nous,ici,on va rester simple.
00:52:51 :On va utiliser,avec Django,donc,c'est from,euh,générique.Donc,là,on va avoir la listede tous les articles.Donc,on a une liste vue.
00:53:03 :Donc,là,c'est pour vous montrerqu'on peut créer vraimentun petit blog,euh,sans beaucoup de code.Vous allez voir,c'est assez magique.Donc,on va créer notre,euh,vue.
00:53:16 :Donc,là,ça va être une classe.On va l'appeler blog index.On va hériter de liste vue.Hop.Le modèle qu'on utilise,eh bien,c'est notre,les articles blog post.
00:53:26 :Donc,from,point,ou là,hop là,point,models,import,blog post.Hop,on ale blog post.Euh,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,
00:54:11 :hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,
00:55:02 :hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,hum,um,um,um,um,um,um,um,um,um,um,
00:55:53 :um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,
00:56:51 :um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,
00:57:42 :um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,
00:58:34 :um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,um,
Aucune occurrence trouvée pour « ».
00:00:18
Introduction
00:00:38
Présentation de Django pour débutants
00:01:02
Historique de Django
00:02:03
Philosophie de Django
00:02:40
Principe MVT
00:04:06
Introduction aux requêtes avec Django
00:05:17
Exemple de requêtes ORM
00:08:02
Installation de Django
00:11:02
Création d'une application Django
00:15:18
Définir un modèle utilisateur personnalisé
00:19:10
Gérer les mots de passe utilisateurs
00:23:19
Migrations et gestion de la base de données
00:27:51
Création et gestion des utilisateurs admins
00:34:27
Modélisation de la table des articles de blog
00:36:53
Relations entre les modèles
00:48:47
Créer le template de base HTML
00:51:01
Configuration des URLs dans Django
01:00:05
Création de la vue pour l'index du blog