Session du 18 juin 2025 à 21h00
Développement Web & Frameworks
Deviens membre Premium magic_button
Cette session de mentorat est réservée aux membres Premium. Rejoignez-nous pour accéder à toutes les rediffusions des sessions de mentorat !
Premium
- check +100h de formations
- check +180 exercices de code
- check +100h de mentorats en rediffusion
- check 20 projets
- check Mentorats groupés hebdomadaires
- check Support individuel avec nos mentors
Session de mentorat Django
Nous allons revenir sur les paramètres d'url pour afficher une instance de modèle, et en profiter pour créer un petit moteur de recherche.
00:00:00 :Et il y a Arcel qui nous rejoint normalement et voilà c'est bon on est on est combien on est bon c'est bon on est pas malBonjour salut ArcelBah du coup j'ai dit en off mais je voudrais dire là pour un peu de programmeOn parlait ce matin avec Eric en fait des vues donc on va revoir ça aujourd'hui un peu des choses basiques
00:00:25 :Alors bon il y en a qui savent déjà mais vu que c'est pas le seul qui m'en parlait on va refaire des choses basiquesEt puis au passage on va faire un petit passage sur la méthode getAbsoluteErlEst-ce qu'il y en a qui l'utilise régulièrement ça ou pas ?
00:00:44 :Non ok elle est pas hyper connue mais super pratiqueDonc cette méthode là et on va se faire un petit moteur de recherche rapide en utilisant ce qu'on appelleDonc là c'est un peu plus avancé l'objQ comme ça on va jouer un peu avec les paramètres d'URLPartager l'écran déjà ça sera pas mal
00:01:09 :On va faire ça un peu on voit mon écran là ou pas ?OuiOk bon je viens de me créer un dossierOn vient d'invertir les détectésOula qu'est-ce qu'il me fait mon V11 ?
00:01:21 :Pourquoi il me le voit pas ?Normalement ça c'est tout seulOuais c'est bonTu sais ce qu'il me fait ? Pourquoi il me voit pas Django ?
00:01:31 :Pourtant je l'ai bien installé là-dedansAh il me prend mon... Attendez je regarde quelque chosePourquoi il me prend pas mon V11 ?Est-ce qu'il me le voit mon V11 ici ?
00:01:43 :Bin... Je le vois pas du toutAh si celui-làOk là il le voitOuah c'est bizarreJe reteste justeEn général il ne m'est jamais arrivéIl me le voit tout seulHop et si je lance ?
00:01:58 :Ok c'est mon V11Bon on se parleOk rien d'importantJe parle tout seulDu coup on va partirJ'ai créé un dossier blog assez basiqueOn va partir du coup sur un projet de blogOn va vraiment faire un truc bidonAvec un seul modèleC'est juste comme ça Eric
00:02:15 :Tu vas pouvoir voir pour les vuesEt pour ceux qui ne connaissent pasOn va pouvoir faire la méthodeGetSourceSolutionsURLQui est assez pratiqueQui peut donner un petit côté WordPressQuand on peut cliquer sur voir en liveJe sais plus comment ils appellent çaEt on va finir par l'objQ
00:02:35 :Pour faire un petit moteur de rechercheMaisonOn va rien installerOn va le faire à la mainEt puis si on a le tempsPour ceux qui veulent un petit texte sympaOn va l'installerJ'accepte, il y a quelqu'un qui arriveDonc voilàDéjà pour commencer du coup
00:02:54 :On va se faireUne application de blogVous pouvez m'arrêter dès qu'il y a un problèmeEric tu m'arrêtes dès que tu as un douteOuiDonc on a l'application blogMaintenant il faut penser à la référencer iciDans les applicationsDonc là j'ai mon application blogÇa va me saouler par contre
00:03:21 :Il m'en rajoute trois à chaque foisDonc voilà on a rajouté l'application blogEt je vais me la mettre en françaisL'application est oùOkComme ça tout sera traduit en françaisTout à l'heure je parlais de Wagtail avec BaptisteCe qui est marrant c'est quand tu fais le setting de Django
00:03:50 :Ça va te mettre en français même tout ce qui est chez WagtailC'est pour ça que c'est lié, je disais ça tout à l'heureC'était le petit passageDu coupBlogModèlesDonc les modèles c'est Eric tu me dis dès que c'est alléOuiOn va se faire un modèle qu'on va appeler post
00:04:10 :Basiquement ça va être un article on va direBon il n'y a pas d'auteur on va juste faire ça avec un seul modèleÇa sera plus simpleIl y aura un titreOn va se faire un petit carte-fieldOn va se dire il va se faire aller 200 caractères maximum
00:04:28 :Il nous fautContent on aurait pu l'appeler body je sais pasContent c'est pareilOn va se faire un text-fieldVoilàEt on va se mettre un slugOuais c'est pas malVous savez comment on fait pour sluggifier ou pas ?
00:04:47 :Automatiquement en fonction d'un champNonIl y avait une fonction sluggifyOuaisOn peut sluggifier facilement effectivement avec çaQuelqu'un qui arriveDonc oui on peut facilement sluggifier en faitAvec DjangoOn va se faire pour l'instant notre méta de swinging iciEt on va retourner self.title
00:05:24 :Ça c'est déjà pas malEt maintenantOn va se faire notre classe méta quand mêmeParce qu'on veut que dans l'adminÇa soit affichéArticleLà c'est pas malLa méta de saveOuais on va se faire la méta de savePour la méta de saveIl faut penser
00:05:50 :Aux arguments positionnelsEt tout ce qui peut être nomméIci tacÇa me paraît pas malEt puis on va se faire un super iciHopTacAngles et décorationsTacEt donc pour sluggifier en faitPour ceux qui ne connaissent pasJe galère à chaque foisC'est utile mais
00:06:20 :Point texte je croisEt on importeSluggifyHop làEt ici on peut dire par exempleIf not self.slugDonc s'il n'y a pas de slug et qu'on n'a pas mis nous mêmeEt bien ce qu'on va faireSelf.slug
00:06:37 :Est égalEt ici on appelle la fonction sluggifyEt on va se dire par exempleOn va sluggifier ici le titreHop comme ça ça se fait un slugQui va se faire en fonction de notre titreAutomatiquementDéjà ça c'est la baseÇa me paraît pas malEt on va importer sur l'administration
00:06:55 :Donc on va faire from.modelsOn importPostHopEt c'est admin.site.registerEt postComme ça on l'aura dans l'adminOn va pouvoir créer des articles pour les exemplesEuhOkOn vaEric ça va pour l'instantTu me dis un petit merciHopOk donc là on a fait la migration
00:07:32 :On va se créerOn va se créer un super utilisateur comme d'habQui est super userEst-ce que vous voulez que jeJ'agrandisse l'écran peut-êtreC'est peut-être petit là non ?
00:07:46 :Je regarde un peuÇa vaPar contre EricA eu un problème je penseIl est plus làAh minceEuhEn plus c'était surtout possible pour luiSon problème de vueEst-ce que je l'ai làEuh nonAlors attendezQu'est-ce qui s'est passéC'est pas lui qui s'est déconnecté
00:08:18 :Eric EricEuhJe regarde les choses il faitJe vais envoyer un message surRapidementEuh il est oùJe le trouve plusOkBon je pense qu'il va essayer de nous rejoindreJe sais pas s'il a un problèmeC'est assez bizarre ce qui arriveOkIl y a qui qui débute ici déjà avec Django
00:08:55 :Par hasardMoi je débute avec DjangoKPLOkEst-ce que les vuesLes paramètres du RL ça va ça ou pasPour l'instant tout ce que t'as montré ça vaOkBon je vais continuer sur ma lancéeParce qu'en plusComme je disais il y avait EricC'était pas le seul qui avait des problèmes sur les vues
00:09:21 :Donc je vais continuer sur ma lancée comme ça il est en hors diffusionEuhEt puis bon ça peut servir pour les paramètres du RLDe toute façon on va enchaîner après sur un petit moteur de rechercheDonc ça vaOn va rester dans le thème quoiDonc je vais peut-être égrossir un peu l'écran
00:09:35 :Je sais pas si c'est mieuxHop làHop et mot de passeTacTac ok c'est bonDonc là c'est bon c'est crééOn va tenter le run serveur et on va voir ce qu'il se passeOk c'est bonJe vais aller sur l'adminOk j'ai mes articlesOn va ajouter
00:10:11 :Un article je sais pas on va mettreOn va faire les conférences pour que je fasse çaDonc un articleQui parle du jauneBla bla super articleOkAh mince j'ai oublié de faire un trucGénialHop làJe vais devoir lancer une migrationJe l'avais pas en
00:10:39 :Ok génialJe pense que c'est bon pour tout le monde le blancOkOk c'est bonJ'étais là est-ce que ça va prendre en compte directOk c'est bonDonc là ça me laisse le DC automatiquementDonc là on a un article qui parle du jauneMaintenant je vais refaire un article
00:11:07 :On va faire je sais pasUn articlePar exempleJ'ai fait une faute on s'en ficheEt là je vais mettreCet articleVa parler du jauneJe sais pas si il y en a qui veulent voirOù je vais en venir pour l'instantJe vous laisse devinerOn va en faire un autre
00:11:31 :Je sais pasArticleOn s'en ficheOkDonc là on a un article qui parle du jauneIci on l'aOkOn l'a dans leOn l'a dans le titre mais ici on a un article qui parle du jauneMais on l'a dans le corps du texte mais on l'a pas dans le titre
00:11:55 :VoilàPour l'instantJ'arrête de créer des articlesJe vais continuerIciOn va se faire çaOn va se créer nos vuesOn va se créer des vuesOn va commencer par faire çaAlorsIciDonc là on va se faire deux vuesOn va se faire deux vues
00:12:25 :On va se faire une vue de listeOn va faire ça en fonctionOn va pas faire de classeAprès on aura l'objectifEt c'est pas malOn va déjà faire deux vues basiquesAlorsOn va se faire une post listeRequestTacAlorsOkDonc là tous mes articles ici du coup ça va être
00:12:51 :Donc déjà si on importe pasModelsOn importePostPointMerdePoint objectOn récupère tous les articlesIciEt tout simplementOn va les retourner iciDans un templateDonc requestLe template il sera dansL'application qui s'appelle blogOn va direPost listPost listPoint html
00:13:29 :Et puis on va mettre en contexte du coupHopLe post ici ça sera le postPour l'instant pour tout le monde ça vaJe penseJe pense que tout le monde ça vaAlorsVous allez voir qu'après ici on va se faire un emplacementOn aura l'objectifAvec moteur de
00:13:51 :Je le mets maintenant pour pas oublierAvec moteur de recherchePar rapport aux questions qu'on m'a poséDernièrement sur lesPour répondre aux questions sur les vuesDonc là on a déjà une vueAlors c'est pas bienJe vais mettre ça tout dans urlJ'aime bien faire des url séparés par application
00:14:09 :Mais làJe vais pas séparer les chosesC'est juste pour l'exempleFrom blogPoint viewsOn importe et c'est post listHopEt iciOn va avoir post listEt puisÇa me paraît pas malEt puis on va mettre un nameOn va mettre postPost listVoilà
00:14:39 :Ce qui veut dire que maintenant il nous fautDans blogUn dossierQu'on va appeler templatesPuisque les dossiers templatesDans les applications sont automatiquement reconnusEt on va l'appeler blogDonc comme DjangoReconnait ici templatesEn fait lui il prend à partir de blogDonc c'est pour ça qu'ici dans la vue je retourne à partir de blog
00:15:01 :VoilàAu cas où vous savez comment on fait pour référencer les templatesA d'autres endroits dans l'application ou pas ?Autre que les...NonC'est qui qui a parlé ?
00:15:13 :J'ai pas vuEricAh t'es revenu EricJ'ai eu un problèmeJ'ai eu internet qui est tombéAprès le micro c'est internetC'est la chaleur çaJe m'étonneDonc pourPour ceux qui me demandentSi quelqu'un veut un dossier template à la racineCe qui m'arrive des foisVous pouvez
00:15:39 :Ici dans templateDéfinir en faitDes cheminsEn disantA la base duComment direHopComme ça en gros ça veut dire que c'est base dirBase dir donc c'est la racineDossier templateDonc là vous créez un dossier template à la racine quoi duDu dossierC'est bon à savoir
00:16:07 :Vous pouvez en fait overridez le fait que DjangoNe veut que du template dans les applicationsMais vous pouvez overridez ça iciVoilàBon c'était une petite parenthèseEt bah du coupJe sais plus où j'en étaisJe sais pas si vous avez un trucEst-ce que l'application est tournée
00:16:27 :Non bah forcément j'ai pas fait le templateC'est bien ce qui me semblaitJ'en étais là voilàDonc on a dit ça seraPostlist.htmlEst-ce que j'ai pas un truc templateTout fait par sur mon pcDu html de baseAh j'ai Copilot activé pour çaDoncIl est activé pour le html
00:16:49 :Ouais nickelBonCa m'arrangeTacDoncC'est partiHopOn va le mettre en français quand mêmeEt puis du coupIl me propose quoiIl me fait quoiPas de problèmeJe regarde si il a raisonAlors pour l'instant çaJe veux pasJe veux pasC'est ce que j'ai mis
00:17:23 :J'ai mis postIl me boucle sur les post ou pasOuais c'est çaOkNormalement c'est bonJe vérifie tout de fait et je réexplique aprèsDonc là j'ai tous mes articles qui apparaissentLes liens fonctionnent pasLes liens AIl n'y a pas d'url dedansPetite techniqueQui est pas forcément connue
00:17:47 :IciVous pouvez faireAlors je sais pas si vous connaissezAlors c'est quoiTacAu lieu de faire if postOn peut faire ça en petitComme ça lui il sait que s'il n'y a pas d'articleIl va mettre aucun article où il a la placeDonc ça évite de faire une condition if en plus
00:18:07 :VoilàÇa c'est pour ceux qui sont un peu plus avancésDoncAh il y a une question ou pas ?Ouais c'est pratique ouaisJ'ai une questionHop là il est où mon chat ?
00:18:23 :VoilàOkDonc làEric il a fait pour les autresOn a bien une vue iciQui on récupèreOn récupère tousNos articlesOn les renvoie iciDans un template qui s'appelle postlist.html
00:18:43 :Et donc on a bien un dossier templateDans blogDonc dans templateJ'ai refait un dossier blogQue j'ai mis et j'ai mis mon fichierPostlist.html dans blog
00:18:55 :Donc template, blog, postlistEt donc là j'ai mon cheminEt donc là automatiquementJ'ai mon url que j'aiSi j'ai ma vue, mon urlEt tout va bienVoilà donc mon templateJ'envoie mes informationsPour chaque poste iciJe boucleJe récupère le posteEt j'affiche à chaque fois ici les titres
00:19:19 :Est-ce que c'est bon pour l'instant ?Ouais mais moi de mon côtéC'est plutôtJe vais pas taper en faitIl me sembleQue le programme va pas chercherPostlist.html
00:19:33 :Il reste bloquéSur la premièreDéfinition que j'avaisC'est blogRequest, retourne, http,Respondre avec doncLe message qu'on afficheEt il va pas sur la deuxième définitionLà il y avait blog post sans sPour différencier par rapport au premierAvec un request et un slugDedans et donc
00:19:57 :En fait cette def làIl retourne pasParce qu'il va pas du tout allerChercher les informationsDans le poste htmlIl faudrait que je vois ton codeParce que là en faitTout simplement on a bien une vueSi on voit sur un fichier htmlMais moi je l'ai fait tourner
00:20:17 :Tout seul aussi c'est à dire que j'ai enlevéLa ligne du dessus pourRester qu'avecUne définition blog postJ'ai été changer aussiJ'ai gardé uniquementCelui qui était actifEt j'ai lancé là j'ai eu des erreursCa a pas voulu fonctionnerIl dit qu'il trouve pas les fichiers
00:20:37 :C'est bizarre ouaisJe vais continuer mais là pour l'instant ça marche bienTu vois j'ai mon renderEnsuite t'avais un problème aussi sur la vue de détailSur l'articleDonc làJ'en ai souvent vu qui sont trompésIci au débutOn va rester en fonctionOn va rester en fonction pour rester simple
00:20:57 :C'est pas forcément plus simple maisIciPour avoir une vue deOn va aller voir un articlePour ça comme d'habitude on passe la requestEt on vaAvoir en paramètre slugOn pourrait bien avoir la clé primaireOn va laisser le slug parce que c'est plus sympaC'est plus sympa d'avoir le slug
00:21:17 :AlorsQu'est ce que j'aime bienOn peut très bien dire ton article iciDonc ça va êtrePost.objects.getEt tu récupèresDonc le champ slug tu récupères le slug qui va t'envoyerAlors moi ici j'aime bien faire un trucJe pense qu'il y en a qui vont me voir venir
00:21:41 :HopRenderMoi ce que je fais c'est que je préfèreRenvoyer une 404 si jamais il trouve pasParce que je crois que quand tu faisJe crois que c'est une 500 que ça renvoie si ça trouve pasDonc là moi je renvoie une 404 plutôtJe spécifie mon modèle
00:22:01 :Post et je dis qu'on va chercher le slugDonc c'est soit le slugSoit le pk mais vu que là on a plus le slugOn va rester avec le slugDonc là on a notre article qui va être récupéréEt là c'est pareilOn va se faire un render
00:22:15 :EtBaptisteOuais j'ai une questionLe slug est pas unique qu'est ce qu'il se passeSi jamais t'as deux slugsC'est le bazarNormalement le slug je le mets en unique tout le tempsAlors ce que je fais souventCe qui arrive souventDans l'URLAlors pas pour tout
00:22:37 :Des cas particuliers je vais avoir genreLe slugEt je peux avoir le pk aussiMais ce que je fais souvent c'est queQuand même je mets le slug en uniqueEt où ?
00:22:49 :IciAlors tu te mets une contrainte comme çaEt puis c'est mieuxEt je comprenais pas ce qu'il se passaitEt en fait j'avaisDeux fois le même slugOuaisNon oui c'est chiantDonc ouais faut le mettre uniqueDonc là j'ai monArticleEt donc là même schéma
00:23:17 :On va aller chercher dans blogOn va l'appeler postAllez post.htmlEt puis on va envoyer du coupNotre postMinceDedansOk hopSi quelqu'un voit une erreur vous le ditesParce que je parle en même temps et j'ai du mal à faireQuelque chose à la fois moi c'est pas mon truc
00:23:39 :Donc voilàEnsuite je vaisCréerUn post.htmlAlors avant çaJe préfère faire ça avantDans l'ordre hopMon post detail iciEt ici hopEuhJe vais l'appelerMinceAh hop postEt donc làEric est pour les autresT'as là on a dit qu'on voulait un slug
00:24:11 :Donc làHumIci on veut un slugOn oublie pas de le mettreEuh avant je mettaisEuh je mettais çaNon il y a un strOuais c'est ça strPour les slugs tu peux te faire chier et mettre ça aussiC'est comme çaMoi j'ai un str
00:24:33 :De point slugOuais ça va marcher aussi t'inquièteOn va faire ta version à toiMais str ça marche très bien aussiOkMais tu peux mettre slug aussiEuhDonc le post detail iciEt en name on va direVoilà je suis pas trop créatifGénial détail ok
00:24:55 :EtIls sont là mes postDonc comme euh ouaisHop qu'ils me fassent un petit htmlCe serait coolMerciHopWowOk coolOkEuh j'avoue pour l'htmlJ'aime bien voir qu'on piloteDonc euhLà on retourne doncOn a bien le titreDonc làNormalement si je retourne ici
00:25:29 :Je sais pas où t'avais le problèmeMais tu peux aller spécifierMerciEuhJe sais presque çaJ'ai appelé post detail je crois et pas blogDu coup ici hop hopJe crois que je vais l'enleverParce que là ça commence à me saoulerSlug post slug post point slug
00:25:49 :OkOkNon il me force à faire çaOk je vais lancer mon serveurJe vais regarder si j'ai passé n'importe quoiHop làEuhL'urlC'est quoi son problèmeOk j'ai mis quoi en urlC'est le détail okC'est le détailHopC'est pour ça qu'il trouvait pas
00:26:19 :HopEt normalementVoilà ok donc là maintenant tu vasCliquer et logiquement ça fonctionneVoilàOn voit que j'aiEuhJ'ai post et le slugIci j'ai bien postEt le slugC'est bon ça Eric ou pasOuais ouais je vois maisOui okDis moi qu'est ce qui te
00:26:47 :Non mais je vois par rapport à ce que vous faites à l'écranMais euhEuhMon problème reste entier quoiOn voit ton codeEuh si tu vas làOuaisJe vaisJe vais continuer mais làMême si je l'ai mis après revoir la vidéoLà j'ai un peu tout le cheminement
00:27:09 :J'ai vraimentOuais j'essaye de suivre par rapportA ce qui était fait dans les différentesPhases et urlSetting est peut être un trucQue j'ai vuEuhDans le dire en faitOn dirait qu'il n'y a pas le blogEuhIl y a websiteWebsite templateOuaisJe regarderai dessus je regarderai ton code à la fin
00:27:37 :Mais en gros làJ'ai bien mon site template dans mon applicationOuaisJ'ai bien mes deux urlLes deux templates et les vuesLà j'ai bien le slugDans l'url j'ai bien le slugLà il n'y a aucun problèmeAlors maintenantC'est la même chose de mon côtéMais on dirait que j'ai quand même un truc avec
00:27:59 :Les settingsJe viens de le voir maintenantEt puis peut être aussi dans modèleModèle il y a un truc que j'ai vuTout à l'heurePar rapport à ce qui est écritOuaisOuais c'est vrai qu'on voit ça du coupCe sera plus simple je penseEuhMaintenant on va retourner dans l'administration
00:28:21 :EuhOn regarde quelque choseParce que ça c'est vrai que tout le monde ne le connait pas forcémentMais c'est assez pratique là j'ai un articleOk je suis dessus bon c'est assez basiqueJe vais couper le serveurIl existe une méthodeMais qui est vraiment très très bien
00:28:37 :Euh je pourrais pas faire un exempleComplet dessus avec ce soir maisJe pourrais vous montrer une utilisationTac url iciGetAbsoluteUrl voilàIciDonc déjàC'est django c'est urlJe crois forcément ouais c'est çaOn va importer reverseVoilàEt ce qu'on va faireC'est qu'on va faire un return
00:29:03 :Et vous allez comprendrePour ceux qui n'ont jamais faitEuh et ça après vous pourrez plus loin passerOn va se dire notre vueOn l'a appelé comment ? Detail
00:29:13 :Ok on fait un reverse sur le detailIciOn pointHopOn va direPlugOn va voir ce qu'il se passe iciOn va tester et je vous explique après ce qu'il se passeHopJe lance le serveur je suis iciHop et là vous voyez j'ai un bouton
00:29:35 :Qui apparu qui marque voir sur le siteHop et là je peux directementAccéder à monOn peut visualiser en fait directement un peuSur le siteNotre site quoi notre articleEn gros ce qu'il se passeC'est qu'on a une méthode qui s'appelle getAbsoluteUrlIci on va faire un reverse donc on va lui dire
00:29:53 :Tu vas utiliserEuhLa vue de détail et qu'est ce qu'elle attend la vue de détailUn slugDonc forcément iciOn envoie slugEt le slug va être égal à quoiEt bien notre slugC'est bon ou pas ça pour tout le mondeÇa va ouRegardeSi ok
00:30:17 :OkN'hésitez pas surtout il n'y a pas de problèmeÇa c'est une méthode moi quand j'ai commencéJ'avais du mal à la visualiserIl fallait que j'en fasse plusieurs foisMais c'est vrai que le cheminement n'est pas compliqué en faitOn envoie vers la vue qu'on veut et la vue elle attend quoi
00:30:31 :Un paramètreUn argument et on envoie l'argumentDonc le slug voilàDonc ça getAbsoluteUrlC'est pratique parce que j'ai pas d'exemple là maintenantEuhBon j'essaie d'en trouver un aprèsFaut que j'y penseIl est quelle heure35 ouais on va attendre un peu le tempsEuhOk je vais vous montrer ce qu'on peut faire aussi avec cette
00:30:55 :Méthode làOn peut par exempleJe suis oùIci hopMaintenant qu'on a une getAbsoluteUrlIciOn le proposeOk donc là j'ai enlevé vraiment tout leurl, détail, slug, égal, machin.slug
00:31:13 :Vu qu'on le fait en fait dansl'absoluteurl, si je reviensSur l'index de mon siteHopEt bien on l'appelle directement comme çaDonc c'est une autreUne autre façon de faire, moi j'aime bienJ'utilise beaucoup ça, j'appelle beaucoup iciMes méthodes, au lieu de mettre les urlsJ'appelle carrément mes méthodes qui gèrent l'url
00:31:33 :Euh voilàOn va passer à la suite pour tout le monde, est-ce que c'est bon ?Pour ceux qui ne connaissent pasEn tout cas j'espère que ça vous serviraParce queIl y a plusieurs utilisations qui sont faites en directOk maintenantChose plus avancéeQue j'avais envie de faire ce soir
00:31:51 :EuhJe me demande si je n'ai pas déjà fait ça dans unMontauraOn va se faire un petit moteur de rechercheEuhAvant de faire, enfinAvant de faire le moteur de recherche, il va nous falloirComment direUn champUn champ quoi, enfin un formulaireVoilà je cherchais
00:32:13 :Donc ici, hop, on va avoir un petit formEuhQu'est-ce qu'il me proposait lui ?Euh on va se faire unHop làDonc là on va se faire un formulaireEuh par contreLà ça me saoule, je vais le faire moi-mêmeIl me propose trop de chosesHop
00:32:33 :Donc là c'est un peu compliquéDonc on va se faire un petit formulaire iciEt en méthode on va avoir une méthode basiqueUne méthode get iciHopPuisque ça va être un formulaireEn fait de recherche très simpleOk, donc là il va nous falloir un inputEuh
00:32:51 :Il va nous falloir un inputDe type hopTexteVoilàEt on va lui donner un nomOn va l'appeler euhC'est très important surtout çaOn va l'appeler euh searchBon ceux qui font du web là ils sont pas perdus, ils sont vraiment habitués je penseÀ avoir ça, on va l'appeler search
00:33:11 :On pourra très bien l'appelerJe sais pasFous ce qu'on veut comme vous voulezEt on peut s'amuser à mettre un placeholderIci on va mettre euhRechercheEt on va euhÇa dit quoi ?
00:33:27 :Je suis pas sûr qu'avec la virgule ça fonctionneNon ça fonctionnera pas avec la virgule j'assureMerciJ'étais encore dans le piton làEuhDu coup bouton hopDonc ici on va avoir un boutonEt on va mettre euh bah rechercherHop rechercherFautFaut fermer l'inputEuh l'input il est fermé
00:33:51 :L'input ouais je l'ai fermé, il est où ?Ouais c'est bonIl faut que tu mettes un slash non ?Non bah j'en mets pas, j'ai jamais eu d'alerte ou de warning dessusJe crois que si tu mets les inputsJe regarderais parce que tu sais des foisT'as des normes qui changent donc t'es obligé
00:34:07 :Mais moi je mets jamais sur l'inputBon après je te cache pas je suis un pur back-endDonc je peux avoir des travers en HTMLEuhNormalement c'est bonOn va se lancer le serveurVoilà donc làUn champ de rechercheOkEt donc là vous voyez qu'en haut
00:34:29 :On parlait de paramètres URLJ'ai fait une recherche où j'ai écrit testEt on a bien ici en paramètres URLSearch égale testDonc searchSearch il est où ?
00:34:41 :Search c'est bien le nom ici de mon input qui est làEt test c'est ce que j'ai écritDans le champ de rechercheDonc ce qui est bien avec DjangoDu coup c'est queOn va se prendre la post-listIci parce que je voulais le faire làEuhIl n'y a pas de bruit parasite chez vous ?
00:34:59 :C'est bon ça marche bien là ?Oui c'est bonBon mec c'est moi làEuh on va importer en faitCe qu'on appelle iciHop.db
00:35:11 :EuhC'est un des modèles je croisHop c'est çaOn va utiliser cet objet làAlors cet objet là il est puissant parce qu'il fait plein de trucsQuand vous regardez dans l'abstractionCe qu'il fait c'est assez énormeIl fait plein plein de choses et si vous descendez encore
00:35:27 :C'estEnfin il fait plein de chosesDonc j'utilise très souventEt vous allez voir pourquoiDoncIci on va se direOkDonc siMince je vais y arriverDonc si jeHop si dans ma méthode get iciDonc si dans ma requêteVoilà en get je récupèreIci
00:35:57 :Search donc si j'ai quelque chose iciOn va faire et bien on va se direEuh c'est notre rechercheOn va appeler la recherche searchVa être égale àEuhOuais j'aurais pu le faireOn va rester basiquePoint get iciOn aurait pu moins dupliquer le code mais c'est pas grave
00:36:17 :Hop searchOkDonc là on va récupérer en faitLe terme qu'on a recherchéDonc je l'appelle searchDonc par exemple ce que j'ai envoyé tout à l'heure en test iciOn l'aurait dans notre variableJ'ai pas fait de faute search search non c'est bonEt donc on pourrait très bien se dire
00:36:35 :PostPost ici ça sera plusDonc on vaPost à la base c'est donc on a point allOn va rester comme ça juste pour l'exempleOn va se dire ça va être égaleA postOn pourra mêmeUtiliser notre requête d'avantDirectementPost iciDonc prendre l'ancienne variable ici
00:36:59 :Post point filterBon là je fais ça mais on pourrait très bienReutiliser notreEnfin partir du modèleOk mais là c'est que je repars de l'ancienne variableOù il y a le query set et tout qui est dedansDonc point filter iciEt qu'est ce qu'on va faire
00:37:15 :Alors l'objet Q à quoi il sertIci on va filtrerEt il peut faire deux choses intéressantesSur un MacComment on fait un pipe déjàVoilà comme ça hop hop hopDonc là ici j'ai mes objets QEt en faitOn va pouvoir dire iciOn pourrait très bien chercher
00:37:35 :Dans le titreAlors it contains ici c'est pour être insensible à la classeBien qu'avecDB SQLite je ne sais pas si ça me revientBon on le met quand même hopHop searchVoilà et ici on va direOn l'avait appelé contentContentC'est toujours contentIl contains hop
00:37:57 :C'est it contains égale searchOkDonc là en gros ce qui veut dire queNotre thème recherché en faitQui veut nous retourner à un query setSelon ce qu'il va trouverDans soit le titreSoit le contenuDonc si j'ai bien fait mon trucSi je retourne là
00:38:17 :Je regarde s'il n'y a pas d'erreurEuhHop là okDonc on est làDonc là j'ai un article coolOk il me le retourneHop maintenantDonc là on avait bien celui là qui parlaitDonc qui parle du jaune okAlors il y a écrit jaune dans le titre
00:38:37 :Mais il n'y a pas écrit jaune dans l'intérieurEt lui il y a écrit jaune dans l'intérieurDonc si je recherche le terme au jauneHop il va quand même réussir à me les trouverParce qu'en faitGrâce à mon paramètre du RLQue je récupèreIci en fait dans
00:38:53 :En get voilàAvec le nom du champL'input iciEt bien avec l'objectif en fait vous pouvez aller faire desVous faire un petit moteur de recherche en faitPour faire des requêtes bien plus complexesMoi j'ai fait des requêtes avec ça maisQui m'ont fait gagner du temps fou
00:39:09 :Parce que c'est super pratiqueEuhSi je vais sur la docOuaisHopAllez on va le faire en françaisJangoHop làEuhIls en parlent où déjàJ'ai loupé ou pasEuh je sais plus où ils en parlentNonPour vous montrerNon c'est pas çaEuh
00:39:41 :AlorsJe pense que je l'avais trouvé tout à l'heureTacIci directementEuhOpérateur en ligne au Q7 non c'est pas çaEuh non c'était avant alorsÇa devait être avantTacTacAlors c'est pas dur doncEuhJango.db
00:40:09 :Même .modelsVoilà alors il y a le f aussiQui est super bien que j'ai utiliséMais moi c'est plusVoilà iciDonc là il y a je vais vous envoyer sur le chat çaHopDonc ça c'est des requêtesC'est vrai que c'est plus complexeAh oui bah je bâtisse
00:40:31 :Je vous envoie çaDonc ça en fait c'est pratiqueJe vous explique tout donc là on peut faire desDes combinaisonsAprès voilàDonc là on a le entre guillemets la négation le noteEt il y a plein de choses à faireOn peut faire plein de combinaisons possible
00:40:47 :EuhDonc voilà du coupÇa c'était vraiment pour vous montrerComme ça on a refait uneSession plus basique pour ceux qui voulaientPrendre la vue un petit peuEt à la fin on a terminé avec l'objectifEuh voir comment ça fonctionnaitComment on peut s'en servir pour faire des requêtes complexes
00:41:05 :Notamment moteur de rechercheJe sais que moi ça m'a permis deSur un projetEuhFaut que je retrouveLequelJe peux le montrerLe client ira rien celui làC'était oufJe pense que c'était dans les vuesJe le retrouve mais je ne le retrouve pasCorps, SAV
00:41:29 :Ça j'ai mes SAVJ'ai mes thèmesQuand il n'y a pas unShopAlors je ne sais plus si c'est dans les vuesAlorsAhJ'en parle là dedansAlors est-ce qu'il y a de l'objectifLà dedans tac tacIl y en a forcémentÇa m'a permis de récupérer
00:41:53 :Je ne sais plusOuais bon voilàDans celui là par exempleC'est pareil en faitJ'ai carrément raccourci le codeJ'ai fait un search au débutEt en fait ça me permet ici de chercherDonc chercher d'abordSi le produit était actifEt ensuite dans laDans le nom
00:42:15 :Dans la descriptionEt après je faisais un select related carrémentÇa c'est pour optimiser les requêtesEt un distinctDonc en fait vous pouvez le combiner vraiment avec vos core resetÇa vous permet de faire un truc hyper puissant et hyper optimiséParce qu'ici je fais du select related et du distinct avec
00:42:31 :DoncL'objectif franchementA utiliser les que vous pouvezDonc voilàOk pour moi c'est bonJe pense que le get absolute on le verra la prochaine foisComment je m'en servaisEst-ce qu'il y avait des questions ?
00:42:49 :Ou pasEst-ce qu'on peut revenir sur la partieC'était dans la partieURLOkDans l'URL il faut indiquerAussiAu niveau du moteur de rechercheCertaines spécificités ou pasAh ouiJe ne sais pas si il y a de toutOk alorsDoncLà j'aurais pu optimiser en faisant une variable avant
00:43:19 :BrefEn fait là l'URL en grosCe qu'il se passe c'est queIci j'ai un postal iciLà j'ai monMon formulaire en faitIl renvoie pas vers une URL spécifique en faitJe reste là où je suis entre guillemetsComment le direEt du coupDans cette vue là en fait
00:43:41 :C'est si je détecte que j'ai uneComment direMinceQue j'ai un formulaire qui s'appelle searchQui renvoie quelque choseJe reste là dans la même vue je vais juste aller modifier le query setC'est pas une nouvelle vueC'est juste le modifier le query set qui est dans cette vue là
00:43:57 :Ah d'accordC'est dans la vueJe suis dans la vue listeJe suis toujours dans mon post listCe que j'envoie en faitDe ma vue post listJ'ai mon input iciQui s'appelle searchJe reste en fait dans la même vueJe fais juste une modificationJe suis dans la même vue
00:44:19 :Je fais juste une modification de query setC'est toutEt aprèsOn pourra très bien faire desJe sais pas moi il m'arrive avec du htmxDe renvoyer que des portions de htmlDes choses làMais là déjà basiquement faire ça c'est déjà bienPour s'entrainer au débutDonc voilà
00:44:39 :C'est bon ?OkJe sais pas pour tout le mondeC'était bon du coup ? Je sais pas s'il y a des questionsNon c'est bon pour moiAttends parce que ça double toutOkBon voilàIl y a beaucoup de gens qui sont avancés iciComme vous le saviez après l'objectif
00:45:05 :Je sais pas si vous l'avez déjà utiliséBon il y a beaucoup qui m'ont dit que nonDoncUtilisez un peu çaJe ne vaux pas grand monde l'utiliser mais creusez-leParce que c'est vraiment bienEt puis la méthode getAbsoluteURLUtilisez-la aussi elle est pratiqueSurtout quand vous avez par exemple des formulaires
00:45:23 :Vous pouvez carrémentRenvoyer sur l'objet qui vient d'être créé lui-mêmeFaire un reverse, un redirectSur l'objet qui vient d'être crééGrâce à cette méthode làJe vous montrerai comment je fais çaDonc voilà j'espère que ça vous a plu en tout casDonc voilàPuis la semaine prochaine on fera du FactoryBoy
00:45:41 :OkQui est très pratique pour les tests avec PyTestJe combine FactoryBoy avec PyTest en faitÇa perd une gaz du tempsBah écoutezBonne soirée tout le monde du coup si il n'y a pas de questionsBonne soiréeEt puis à la semaine prochaineBonne soiréeMerciMerci à tout le monde
00:46:07 :Eric tu voulais me montrer ton codeComment ?Tu voulais me montrer ton code au faitOui alorsOuiComment on peut faireTu partages l'écranJ'ai failli oublier j'ai failli couper leLe mixEuhEst-ce que je peux l'afficher ou pasÇa a pas l'air deEst-ce que tu sers de GitHub ou pas ?
00:46:57 :Comment ?Est-ce que tu sers de Git et GitHub ?Euh nonEst-ce que tu veux que je te montreLà en 5 minutes comment partager ton codeOuaisOkOn a un bon exemple en plusJe vais partager mon écranJe te partage mon écranAlors je te partage mon écran
00:47:23 :Il est où ?Tu verras ça te servira pourPour les prochaines foisQu'est-ce qu'il me faitJ'arrive pas à partager mon écranNon je veuxVoilàOkTu vois mon GoogleOuaisAlorsPremière choseJe vais t'envoyer un truc déjàIl l'a trouvéAttendsNon je m'en fous c'est pas grave
00:48:03 :AttendsJe me suis mis à GitHub au débutJe vais commencer avec çaJe t'envoie ça comme ça tu peux la regarder en parallèleEn plus de ce que j'ai montré ce soirSi tu as le tempsAlors GitHubDéjà il faut que tuDonc tu vas te configurer
00:48:25 :Tu vas devoir installer GitParce que j'ai déjà tout ça sur mon PCDonc je ne vais pas le refaireRegarde la vidéo de ThibautÇa va te faire installer GitEt à partir de là tu seras prêtIl va te faire faire un compte GitHubDonc tu vas te faire un compte là dessus
00:48:41 :Une fois que tu as partagé ton codePar exemple là j'ai mon application qui est làPour l'instant elle n'est pas versionnéeElle n'est pas partagée pour l'instantElle n'est pas versionnée donc je n'ai pas de Git GitHubGit est installé sur PC si tu veuxMais je n'ai pas suivi mon projet encore
00:48:57 :Alors hopUn moyen rapideDonc dans la vidéo Thibaut il va te faire toucherUn petit peu en ligne de commandeMoi je ne le fais plus parce que je fais tout maintenantEn interface graphiqueMais c'est bien de faire en commande au débutAlorsJe vais aller me créer ici
00:49:15 :Alors avant ça je vais me taperGit ignoreTitonHopJe me prends un Git ignore iciJe vais aller me créerEn fait unComment je fais en ligne de commande iciUn touch.Git ignore
00:49:33 :Ici hopEn fait si je fais ça en grosJe vais t'expliquer pourquoi je fais çaHopOuaisOuais c'est bon ça iraEn fait ça va me permettre de direComment direC'est pour l'instant des environnements virtuels toi ou pas ?
00:49:51 :Oui ouiDonc en fait ça permet de pasEntre guillemets mettre en ligneTout ton environnement virtuelÇa sert à rien quoiÇa c'est local c'est à toiAu moins ça ça me l'ignoreEt ça ignore tous les petits fichiersQui sont inutiles à versionnerDonc tu vois j'ai pris un template tout fait
00:50:11 :Je l'ai mis iciMaintenantHopDonc je vais l'appelerNew repositoryJe vais l'appeler par exemple EricJe vais l'appeler EricJe vais mettre publicEt puis voilàJe clique sur créerDonc là il est en publicOkAlors là ça te ditEn grosSi t'as déjà un projet
00:50:41 :Qui est versionné sur ton PCTu peux pousserMon projet n'est pas versionnéJ'ai rien fait dessusDonc avec ça je peux tout faireDirectement je copie ce qu'il y a iciJ'ouvre un terminalJe le colleEntréeHopOk j'ai fait entréeDonc là toi Thibaut il va te montrer un peu les commandes
00:51:05 :Les git had tout çaSur YoutubeMais j'avoue que moi maintenant j'utilise en faitToute l'interface graphiqueEn fait tout ce qui va être suivi, versionnéSous les fichiers d'un goPetit plusEt en plusIA qui va me mettre un message de commitDonc ad initialOk ça me parait cohérent
00:51:27 :Et là je fais ce que j'appelle un commitEt je puche d'un coupSi je retourne iciJ'actualiseJ'ai mon application qui est en ligneEnfin le code de l'application qui est en lignePar exemple toi t'as plus qu'à allerPrendre en fait leTu peux aller voir je l'ai mis en public
00:51:47 :Donc si je te l'envoie sur le chatToi tu as accèsEt tu peux aller si tu veux cloner carrémentMon code et l'avoir sur ton pcTu voisJe télécharge le codeEn gros toi ce que tu ferais par exempleTu vas dans un dossierJ'ai plusieursOk excuse moi
00:52:07 :Attends c'est le bordel làGenre iciCDJe vais mettre dans proHopJe n'ai pas blogIl est dans le dossierJe vais même le fermerIl n'est pas ici blogJe vais même faire un truc pour te montrerCD je l'ai mis dans mon TorahHopLà ce que je vais faire
00:52:33 :HopC'est pas ce que je voulais faireHopDonc là j'ai suppriméDonc là si je regardeJ'ai supprimé mon codeJ'ai fait une connerie et je l'ai perduDonc c'est pas graveJe vais faire un git cloneJe colle le lien que je t'ai envoyéHopEt si je retourne maintenant
00:52:57 :Il me l'a mis oùJe l'ai appelé commentEric du coup sur GithubEt sur EricEt j'ai bien tout mon codeAvec mon blog et toutOkDonc en fait je t'invite à faire ça dans le sensAlors attends je vaisParce que je suis dedans c'est normal
00:53:19 :OkDonc là tu vois je te laisse en version accéléréeMais pour te montrer tu vois qu'en 5 minutes même pasQuand t'es à l'habitudeTu peux facilement te mettre ton code en ligneC'est vraimentTrès très facile à faireIl faut quand même un peu s'entraîner pour arriver
00:53:39 :VoilàÇa sera en diffusion là ce que je t'ai envoyéDoncÇa sera en diffusionComme ça tu pourras le regarder à tête reposéeRegarde la vidéo de flow déjàParce que oui tu le fais bien étape par étapeDans le terminal que tu comprennes bien ce que tu fais
00:53:55 :Mais là c'est pour te montrer que moi je le fais maintenantTout en interface graphique et que tu vois ça se fait très rapidementVoilàEt comme ça quand t'as un problèmeTu pourras me partager ton codeOkTu m'enverras le lien carrément de ton githubEt moi ce que je fais c'est que je fais carrément
00:54:11 :Ce qu'on appelle des forksDonc je vais aller cloner ton projetJ'ai travaillé dessusSur mon pcEt les modifications en fait je vais faire ce qu'on appelleUne pull requestC'est en gros que j'ai proposé les modifications que je t'envoie à toiQue tu verras apparaître ici dans pull request
00:54:27 :Donc tu verrasGabigab117 veut modifier çaEt toi tu pourras regarder ce que je modifieAvec des commentaires genre je fais ça parce queParce que ça ça va pasAinsi de suite tu voisHyper puissant franchement t'apprends beaucoup de chosesQuand tu travailles avec githubPour çaDonc voilà
00:54:47 :Je vais essayer de faireLe basculer sur githubEt puis après envoyer le lienPour que tu puisses regarderOuais bah superMerci bienJe te supprime ça ou je te laisse le projet que j'ai mis là ?
00:55:01 :Comment ?Le projet que j'ai mis là en ligne je te le supprime ou je le laisse ?Euh non non je vais le récupérerJe te le laisse alorsOuais pas de problèmeBon bah écouteBonne soirée du coupMerci bonne soiréeA bientôtSalut Jérémy j'ai pas fait café
00:55:21 :Au revoirNon nonJ'ai regardé en faitJ'avais déjà fait un peu githubSur les lignes de commandes en faitDonc je voulais regarder un peu pourPour voir en faitBon suivant aprèsSur les templates en faitLes templates j'ai pas les tirC'est ça que je mets toujours sur les applications
Aucune occurrence trouvée pour « ».
00:03:57
Définition du modèle
00:12:37
Les vues
00:23:52
Paramètre d'url
00:28:24
La méthode get_absolute_url des modèles
00:32:00
L'objet Q, création d'un moteur de recherche
00:47:00
Création d'un repo GitHub