Session du 22 août 2024 à 21h00
Développement Web & Frameworks
Wagtail : boostez vos applications Django ! @gabigab117
Je propose que l'on fasse le tour de ce que Wagtail peut vous offrir ... à condition de le coder ! 🙂
00:00:00 :Vous allez voir, en plus, ils ont un super site webtail.Ils ont un super site webtail, donc pour commencer, on va simplement dire que tout est bien détaillé.
00:00:17 :Vous passez à une démo, build of your site, vous allez dessus, ils vous expliquent tout dans le détail, il n'y a aucun problème.Donc vraiment c'est facile de s'y mettre.
00:00:27 :En fait, je n'ai vraiment rien appris avec YouTube.Là, j'ai tout appris qu'avec la doc, et c'est rare.En général, j'aime bien regarder sur YouTube comment les gens les font.
00:00:36 :J'aime bien voir aussi sur des sites un peu comme ça, un peu sur la doc.Et maintenant, je pose beaucoup de questions.Je me sers de Claude Hayé aussi comme prof, donc ça permet d'avoir pas mal de choses.
00:00:46 :Du coup, Whattel, en fait, ça va vous permettre de vous faire un CMS.Je pense que presque tout le monde peut-être sait ce que c'est un CMS.
00:00:57 :J'ai déjà vu des gens qui ne connaissaient pas trop.C'est vraiment de la gestion de contenu, la publication d'articles de blog, par exemple, ou même pour des journaux.
00:01:06 :Et donc, Whattel va vous permettre de vous construire votre propre CMS.Pour ceux qui connaissent WordPress, il faut bien vous dire que ce n'est pas du WordPress.
00:01:14 :Parce que WordPress, vous l'avez clé en main.Après, si vous connaissez bien PHP, vous pouvez le custom.Mais là, Whattel, en fait, vous n'avez pas un CMS clé en main.
00:01:23 :Si jamais vous voulez un CMS clé en main à la Django, je vous conseille d'aller sur Django CMS.Il y en a plein qui ne connaissent pas.
00:01:33 :Et en fait, ça, c'est du clé en main.Et normalement, il n'y a pas besoin de coder, je crois, avec ça.Voilà.Du coup, là, c'est vraiment pour vous faire votre propre CMS.
00:01:43 :Comme je vous en ai parlé, c'est basé sur Django, du coup.C'est vraiment construit sur Django.Il vous faut le Django pour faire tourner Whattel.
00:01:51 :Et c'est vraiment complet pour des sites ou des blogs.Voilà.Vous managez des pages, des articles, des médias.Et vous allez voir que l'interface, elle est vraiment très cool.
00:02:00 :C'est hyper intuitif.Donc, là, j'ai mis un petit...Vous voyez bien mon écran ?Non, ça va, non ?Faut que je recise ou... ?
00:02:09 :Non, ça va.OK.D'ailleurs, Gabriel, j'ai juste une petite question.Tu mentionnais Django CMS.Tu l'as regardé un petit peu ou pas spécifiquement ?Alors, en fait, à la conférence,quand je faisais ma conférence sur Whattel,après, j'ai discuté avec des gens qui me posaient des questions.
00:02:25 :Bref.Et puis, on en est venus où la quatrième fois ?J'ai testé Django CMS.Et puis, j'ai découvert ça aussi là-bas.Et en fait, je l'ai testé comme ça rapidement sur un téléphone.
00:02:35 :Et ça m'a l'air assez intuitif.Voilà.D'accord. OK.Bon, là, je l'ai testé cinq minutes.Mais je crois qu'il te donne le...On est un peu dans le thème quand même.
00:02:46 :Donc, on devient un peu sur Django CMS entre deux.Je crois...Oui, c'est juste pour savoir si tu avais testépour connaître ton retour un peu entre les deux,entre Whattel et...
00:02:55 :Tiens.Django.Tu peux accéder à une démo facilement en plus.D'accord.C'est pas mal.Je l'avais demandé.Je n'ai pas eu le temps d'y aller vraiment dessus.
00:03:04 :Mais, oui, tu peux...Mais, en fait, là, si je ne te dis pas de bêtises,tu peux tout faire sans code.D'accord. OK. Ça marche.
00:03:10 :De tête.De tête.Pourtant, j'ai essayé.Ça m'avait l'air vraiment tout complet.Là, ça va être trop de faire.D'accord.Après, il y a quand même une couche d'abstraction assez énormeparce qu'il y a plein de classes.
00:03:22 :Mais, en fait, c'est à Django.Tu as énormément de classes qui sont là pour t'aider.Hum.Donc, c'est utilisé par la NASA, Google.Voilà.Il y a plein de grosses entreprises qui utilisent ça.
00:03:33 :Pourquoi Whattel ?Donc, c'est flexible parce qu'on peut se faire notre CMS propre à nous,comme je le fais moi pour mon super-saut.Alors, l'intégration avec Django, au début,ça peut paraître bizarre parce que quand on utilise Whattel,on a tendance vraiment à utiliser Whattel sans trop penser à Django
00:03:51 :parce qu'on l'installe sur Django, mais après, on n'utilise que Whattel.Il faut savoir que vous pouvez interchanger un peu tous les objetsWhattel, Django, utilisés l'un dans l'autre.
00:03:58 :Et c'est vraiment génial.C'est ça qui est hyper puissant.L'admin qui est top.La communauté, elle est bien, bien active.La documentation, ça j'en ai parlé tout à l'heure, elle est géniale.
00:04:08 :Mais la communauté, en fait, elle est vraiment bien.Elle est vraiment bien.Parce qu'on va sur leur site, ils ont un blog.L'équipe, elle est cool.
00:04:18 :Chaque mois, sur Twitter, je les ai déjà contactés.Et d'un seul coup, on parle un tant d'anglais.Après, je les recontacte.Je parle l'anglais, en fait.
00:04:27 :Et puis bon, ils me répondent en français.Je fais, bon, ça doit être Thibaut Colas parce qu'en fait,je sais qu'il y a un français qui est dans l'équipe.
00:04:35 :Et puis le mec, il me fait, ouais, c'est bien moi et tout.Il me fait, vas-y, pose tes questions sur Whattel.C'est vraiment sympa.On va s'excuser avec le gars.
00:04:41 :Cool, quoi.Donc, il développe le Whattel.Le développeur, c'est lui qui développe le framework, quoi,avec d'autres, bien sûr.Vous allez trouver pas mal de choses en les voix.
00:04:51 :Donc là, il y a Whattel Django Recaptcha, Whattel CodeBlocks.Il y a pas mal de librairies externes.Whattel CodeBlocks, elle est cool.J'ai été contributeur dessus.
00:05:01 :Je l'ai rendu compatible avec la version 6 de Whattel.Vous en trouverez après.Elle est assez pratique.Ensuite, donc là, ça, c'est quand vous arrivez sur l'interface administration de Whattel.
00:05:13 :En fait, ça paraît un peu plus, comment dire, plus sympathique que Django à première vue.Quand on le voit, c'est assez cool.Donc ça, je vous montrerai la petite démo après.
00:05:23 :L'historique, ça a été lancé en 2014 par la boîte Torchbox.Et ça s'est arrivé, en fait, quand Django commençait vraiment de plus en plus à être connu dans le web.
00:05:36 :Donc ça arrive au bon moment.Ils ont sorti un petit article sympa, d'ailleurs, sur la version de Whattel.Il y a eu aujourd'hui, donc peut-être un peu plus maintenant, mais 726 contributeurs à peu près.
00:05:47 :Voilà.Ils ont commencé à 5 en 2014.Donc ça tourne bien.On en parlait avec des gars.C'est pas trop trop connu en France.Vous en connaissez peut-être deux qui l'ont vraiment utilisé.
00:06:00 :Moi, dans les gens que j'ai rencontrés dans la conférence que j'ai faite.Ça leur a donné envie.Donc je pense qu'ils vont s'y mettre une certaine partie parce qu'ils hésitaient déjà.
00:06:08 :Mais il n'y a pas grand monde en France qui l'utilise.Donc il n'y a pas beaucoup de ressources en français.Mais c'est assez sympa pour nous.
00:06:14 :Alors, les fonctionnalités avec Whattel, en fait, ça va être un système de hiérarchie.Donc vous allez avoir, en fait, par exemple, votre page d'accueil.Donc là, j'ai mis accueil, après votre contact, après votre page blog ici.
00:06:28 :Et ensuite, vous allez avoir dans votre blog tous vos articles.Mais vous voudrez bien avoir en plus, je ne sais pas, une autre page, un projet,et les sous-pages de tous vos projets.
00:06:37 :Voilà, ainsi de suite.C'est vraiment une arborescence comme ça.Donc vous allez avoir, en fait, une relation parent-enfant, ce que j'ai mis là.Et ici, avec le Django, on a une situation d'utiliser les modèles pour les modèles.
00:06:50 :Sauf qu'ici, avec Whattel, ça va être l'objet page.Hiérarchie de modèle.Voilà.Donc vous allez avoir votre classe page qui va être votre modèle Whattel.
00:06:59 :On va s'impliquer comme ça.Et à chaque fois, vous allez avoir un template HTML qui va être lié.Parce qu'on va voir qu'on peut tout faire sans vue.
00:07:07 :Que avec Whattel.Bon, on va faire une petite démo à la limite.Donc ça, c'est mon…Bon, le front, il est basique parce que moi, je ne fais pas front du tout.
00:07:14 :Je fais back-end.Et donc là, c'est ma page perso.Et avec Whattel, j'essaie Django Whattel.Donc voilà.Donc j'ai mes projets.Donc je présente mes projets.
00:07:23 :Voilà, j'ai mon arborescence et blog.Et ici, j'ai tous mes articles de blog.Je peux cliquer et ainsi de suite.Je peux accéder à mon administration.
00:07:32 :Ici, rapidement.Est-ce qu'il faut que je resiste le…Je ne sais pas si il faut que je resiste le navigateur ou ça va ici.C'est trop petit diplôme.
00:07:42 :Là, c'est un tout petit peu petit ce que tu es en train de montrer.Ouais.OK.C'est contrôle plus.Mais le reste, c'est bon.C'est la même taille.
00:07:50 :OK, ouais.Donc c'est le site ici.OK.Donc là, c'est ma…Donc voilà.J'ai mon petit widget qui me permet d'accéder à mon administration.Et donc, voici mon administration Wagtail.
00:08:01 :Voilà.Et donc, j'arrive ici.J'ai les…Ah ben, je vais mettre l'argent.J'ai mes dernières modifications.Donc là, j'avais commencé des articles que je n'ai jamais finis pour certains.
00:08:10 :Ici, les deux derniers.Donc là, c'est quand je gère toutes mes pages.Mon arborescence.Donc là, je clique.Hop.Donc là, je clique sur mon accueil.
00:08:19 :Ensuite, j'ai ma partie blog, ma partie projet.Dans blog, j'ai tous les articles.Vous voyez.Je sais lequel est brouillon, qui n'est pas publié, lesquels sont publiés.
00:08:30 :Si je clique sur un article, ben celui-là, bon, ils ne sont pas commencés.Mais celui-là ne doit pas être commencé vraiment.Je vais le faire.
00:08:38 :Je fais un test.C'est pas ici qu'il faut que je clique.Excusez-moi.Tag blog.Ici.Hop.Voilà.En fait, quand je vous arrive ici, vous pouvez mettre…Donc là, ici, j'ai ma date de publication.
00:08:52 :Une intro.Et à chaque fois, j'ai fait un système où je peux mettre un paragraphe.Ici, un bloc de code.Donc, je choisis le langage.
00:09:00 :Hop.Ensuite, un paragraphe.Et ainsi de suite.Et c'est assez fluide.Et il faut savoir que c'est sympa parce que si je veux mettre des titres, hop, je peux mettre des en tête.
00:09:10 :Si je veux mettre un petit séparateur, il n'y a pas de problème.Je peux mettre un séparateur.J'ai quoi ?La liste APUS.Si je veux insérer une image, j'ai accès à toute ma galerie d'images ici directement.
00:09:24 :Je peux transférer des images.Je choisis où j'en mets.J'ai un groupe…Enfin, j'ai une galerie de dossiers privés.Mais je mets un groupe en général.
00:09:32 :Enfin, bref.Vous voyez, c'est vraiment sympathique.Et sinon, j'ai accès, par exemple, ici, à toutes mes images.Voilà, j'ai toute ma galerie.Vous avez accès à tous vos documents.
00:09:42 :Enfin, voilà.Et là, c'est…Par exemple, j'ai fait un formulaire de contact avec Wagtail.Et quand je clique, en fait…Bon, là, j'ai reçu un mec qui est venu me vendre des trucs.
00:09:51 :On voit que j'ai…Et en gros, j'ai tous les…L'historique des contacts qu'on m'a envoyés, voilà.Voilà.Du coup, je reprends mon écaisse,parce que là, du coup, j'ai un peu…Montré trop de choses par rapport à ce que je voulais montrer.
00:10:18 :Donc, comment ça se code, ici ?Donc là, l'index…Pour faire vraiment une application basique.L'index du site.Donc, ici, je vais être dans mon Models.Models.
00:10:26 :Je vais importer, donc, les…De Wagtail.Models, l'objet Page qui hérite de Models.Donc, qui, lui, est un modèle…C'est une classe de logo.Et ici, je vais voir, par exemple, la page d'index.
00:10:39 :Mon modèle de page d'index, on va dire.Mais…Voilà.Donc, du coup, j'ai à voir mon champ subtitulé.Donc, c'est mon titre ou l'intro, comme on veut.
00:10:47 :Body, ça va être, enfin, le corps.Et Content Panels, ça permet, en fait, de rendre le…De rendre votre page dans le…Dans l'administration de Wagtail.
00:10:57 :Voilà.Donc, j'utilise le Page pour le Content Panels.Et ici, je rajoute tous les champs que, moi, j'ai rajoutés.Subtitles et Body, ici.Voilà.Ensuite, je vais avoir…Je vais créer un nouveau modèle de page pour l'index du blog.
00:11:10 :Bien que je pourrais, même, utiliser plusieurs fois le même modèlepour différents niveaux,mais je préférais séparer au cas où, si plus tard,je veux vraiment différencier les index.
00:11:21 :Donc, je préférais faire…Même si c'est redondant, je préférais faire plusieurs…Je préfère faire plusieurs modèles page, en général.Donc, là, pareil, dans Models,je vais avoir, par exemple, l'objet Page.
00:11:33 :Ici, encore.Donc, je vais avoir, pareil, l'intro.Et je vais rentrer dans mon…Dans mon…Dans mon administration.Et ici, on voit que c'est un peu à la Django.
00:11:43 :On peut commencer à surcharger des méthodes.Et ce qui se passe ici, c'est qu'en fait,quand vous faites un…Quand vous êtes sur vos articles, par exemple,je vous ai montré tout à l'heure,vous allez avoir des articles.
00:11:55 :Blog.Vous allez avoir vos articles.Et tout en bas, on peut enregistrer un bouillon.On peut aussi publier.Et donc, ce que vous pouvez faire, en fait,c'est qu'ici, j'ai surchargé le contexte.
00:12:11 :J'ai fait un…Super, donc, pour rappeler la méthode transparente.J'ai fait un getContext, voilà.Ensuite, j'ai setBlogPages.Donc, ça va être égal à self.getChildren.Donc, là, c'est pour récupérer les objets enfants de vos modèles.
00:12:26 :.live, c'est ceux qui sont publiés.Donc, c'est-à-dire que ceux qui sont vraiment brouillonsn'apparaîtront pas.Et .renderBy, donc là, c'était pour les ordonnées.Ensuite, je vais envoyer ça, du coup, dans le contexte.
00:12:39 :Voilà.Donc, en fait, là, ça me permet juste de gérer les…Par exemple, les articles, donc les pages qui sont publiées.Et maintenant, donc, là, c'est vraiment l'index du blog.
00:12:50 :Et après, j'ai fait un modèle ici.Donc, en plus, j'ai repris pour ce modèle-làquasiment la doc à Wagtail, pour l'exemple.Ici, une page de blog, un modèle de page de blog.
00:13:01 :Donc, voilà, j'ai une date, une intro, un body.Donc, le stream field, je vais vous le montrer.C'est assez puissant.C'est assez balèze.Le search field, en fait, vous avez un moteur de recherchequi est intégré à Wagtail.
00:13:13 :Si je vais trop vite, vous le détirez tout de même.Mais après, on va…Je vais vous montrer quelques exemples.Alors, là, sur des…Du code sur PageFarm et…Après, on laisse un indicateur.
00:13:24 :Donc, vous avez le search field.Et, en fait, le search field, ça permet, en fait,d'indexer des champs de votre modèle pagepour votre moteur de recherche.
00:13:32 :Voilà.Donc, là, c'est pareil.C'est pour rendre dans l'administration Wagtail, ici.Voilà.Ça, je l'ai montré.C'est pour montrer un peu l'hierarchie.Là, vous cliquez.
00:13:43 :Vous arrivez sur vos pages, vos projets.Vous cliquez sur « Blogs » et tous vos pages de modèles.Un truc qui est sympa avec les URL avec Wagtail,c'est qu'on peut importer des tags Wagtail.
00:13:57 :Et, en fait, quand vous avez un article,je vous le montre en même temps,« Promotion », vous pouvez mettre un slug,ici, directement.Notez votre slug.
00:14:06 :Ça, on verra après, mais c'est super pratique aussi.Donc, vous mettez votre slug.Bon, là, je ne vais pas le faire pour chaque article,mais, par exemple, pour la page...
00:14:17 :Pour, par exemple, ma page projet,donc l'index ou l'index de blog.On dit « ma page blog ».Ici, le slug, il s'appelle « blog », tout bêtement.
00:14:25 :Je vais regarder la page.Je vais pas faire de bêtises.Et donc, par exemple, dans votre menu,au lieu de faire une valise URL à l'adjoint groupe,vous pouvez faire une slug URL de Wagtailet mettre, ici, votre slug.
00:14:41 :Voilà.Pas besoin d'aller, en fait, créer des URLs.C'est géré par Wagtail.Donc, voilà.Vous pouvez utiliser le slug URL de Wagtail,qui est assez pratique.
00:14:53 :Voilà.Donc, l'index du blog,ça, c'est vraiment la page index du blogoù j'ai...Tac, tac, il est où ?Ici, où j'ai cherché le complexe.
00:15:06 :Donc, pour le template.Pour le template.Alors, attendez, j'ai un problème.Alors, du coup,ici, c'est un peu le template HTML.Basiquement, en fait, vous allez utiliser, comme ça,page.title, page.intro
00:15:22 :pour utiliser vos attributs.Donc là, on va afficher le titre, l'intro.Et ici, pour afficher toutes les pages enfants,on va boucler sur le blog page qu'on a ici,qu'on a défini.
00:15:40 :On va boucler dessus,et on va afficher à chaque fois...Hop là.Donc, post.owner,ça va être celui qui a créé la page,donc l'article, par exemple.
00:15:47 :Dans ce cas-là, le titre, l'intro, la date.Et en fait, ça, c'est le lienpour aller sur l'article en question.Et vous utilisez, ici, le page URL.
00:15:57 :C'est pareil, c'est un objet WebQL,et ça permet à chaque foisd'accéder à votre page enfant.Voilà.Ce qui peut paraître bizarre,c'est le spécifique, ici, qu'on rajoute.
00:16:10 :Alors, le spécifique,est-ce que je le montre sur...Ouais, je le montre là.En fait, quand vous avez un objet page,vous avez toujours l'attribut, ici.
00:16:24 :Je ne le fais pas apparaître,mais c'est grâce à l'héritage.Vous avez un attribut qui s'appelle title.L'attribut owner, par exemple.Ils sont communs à tous les...
00:16:34 :Enfin, vraiment, ça appartient à la classe page.Ensuite, ici, j'ai tous les objetsque je rajoute moi-même,tous les attributs que je rajoute moi-même.Donc, genre, intro.
00:16:43 :On va prendre celui-là, plutôt.Donc, date, intro, body.Ça, c'est moi qui les ai rajoutés.Ici, je suis dans le template HTMLqui appartient à l'index du blog.
00:16:55 :Alors, attention, là, il faut s'accrocher.Mais comme je boucle sur des pages,sur des instances de l'objet pagequi n'appartiennent pas, en fait,au modèle blog index page,je dois utiliser pour les attributsqui ne sont pas communs,spécifiques pour ces attributs-là.
00:17:13 :C'est un peu...Je pense que j'en ai perdu quelques-uns.C'est un peu bizarre à dire comme ça, mais...Je ne sais pas si vous avez compris,mais je peux revenir après dessus,vraiment, en exemple.
00:17:26 :Voilà.Donc, il faut se dire que spécifique,c'est parce qu'en fait, je boucle vraimentsur des instances d'une pagequi n'appartient pas, en fait,à blog index page,mais vraiment à la classe enfant, ici.
00:17:41 :Après, pour mes articles,quand on clique sur l'article,donc là, c'est le template qui correspondà mon modèle page et articles.Donc, voilà, j'ai le titre, la date,l'info, le corps, basiquement.
00:17:50 :Et c'est super pratique.Vous pouvez utiliser encore, ici,page.getParentURL.Voilà.Et comme ça, vous revenez icià votre page parent.Ça sera en live après.
00:18:02 :Ce qui est sympa,donc ça, on l'a déjà vu,les documents à lignage,on verra ça en live aussi après.Je peux poser une question, Gabriel ?
00:18:11 :Vas-y, vas-y, vas-y.Parce que là,t'es rentré dans le détailde toutes les méthodes et tout.Et en fait, moi, il y a un trucque je n'ai pas bien compris à ce stade.
00:18:21 :C'est, en fait, à quoi,qu'est-ce que ça apporte comme plus-valueou actel par rapport à Django ?J'ai l'impression que tout ce que tu nous montres là,t'aurais pu le faire avec Django basique, non ?
00:18:32 :Non, ça ne va pas être pareil.Justement, j'explique après.Je vais venir sur des exemples.On peut regarder, par exemple,là, ici, je suis parti sur un truc similaire.
00:18:45 :Quand je gère mes pages,quand je gère mes pages,je peux créer, donc j'arrive ici,je peux aller créer une page.Et moi, en fait, j'ai des modèles de pagesqui s'appellent donc blog-index-page, blog-page,form-page, index, voilà.
00:18:59 :Donc ça, c'est des modèles qui héritent de pages.OK.Ici, la différence, en fait,c'est que, par exemple,je vais revenir un peu en arrièrepour avoir un autre exemple.
00:19:11 :Ici, je vais être dansblog.Pour blog, moi, je me suis ditque je vais utiliser mes pages de blog.Hop.Et en fait, là, maintenant,tu vois, enfin, c'est...
00:19:28 :Excusez-moi.Ici, je peux vraiment éditer ça,vraiment, la façon CMS, c'est quelà, j'ai mon admin avec...Bon, des champs comme ça,tu peux en avoir avec Django, bien sûr.
00:19:39 :Mais là, c'est quand même bien plus intuitifet je trouve plus fluide,tu peux jouer ça avec des string fields.Le fait de pouvoir enregistrer un brouillon,de publier, tu peux...
00:19:49 :On va en parler après.Mais il y a le fait de se mettre en modération.Tu peux gérer ta galerie d'images ici,directement,en très peu de lignes de code, en fait.
00:19:58 :Tu vois qu'en Django pur,si tu veux faire la même chose,toi, ça va y avoir plus de boulot.Ici, promotion, tu fais ton slug.
00:20:07 :Ta balise de titres, tu peux la gérer ici,directement.Donc ça veut dire que ça va vraimentparaître dans la HTML, dans les métas.Qu'est-ce qu'on peut faire aussi ?
00:20:17 :On peut très bien commencer làà mettre des commentaires.Par exemple, si je suis ici,l'intro, je teste,commentaire,je mets...J'ai un doute,si on travaille en équipe,que...
00:20:36 :Puis...Et celui qui reste dans le brouillon,il aura ton commentaire,il verra ce que tu as fait,à quelle heure tu l'as fait.Tu vois, tu as plein de trucs comme çaqui fait d'abord pas mal de choses.
00:20:53 :C'est des briques déjà toutes prêtes,que dans Django,il faudrait fabriquer nous-mêmes, c'est ça ?Ouais, ça serait un peu plus...Beaucoup plus, je pense.
00:21:04 :Et le design,il est livré avec Wagtail,ou c'est toi qui l'as fait, le design ?Ici, là ? Quand tu es là ?Ouais, la page, les couleurs,tout ça, l'organisation.
00:21:16 :Ah, ici, la page comme ça,justement, c'est Wagtailqui le donne, ça.D'accord.Ah ouais, c'est bon.Si, tu peux customiser,c'est en réseau.Si, tu peux l'enlever,tu peux le customiser.
00:21:34 :C'est super bien,tu peux gérer plein de trucs,c'est vraiment cool.T'as vraiment plein de trucs à gérer.Là, tu galères à Django,à passer un peu plus de temps à faire tout ça.
00:21:46 :De toute façon, je vais te présenterdifférents concepts un peu par la suite,ça va prendre forme.Ouais, excuse-moi.Du coup,quand on ajoute des documents,on peut ajouter des photos à la volée, si on a envie.
00:22:04 :Donc, quand on est, par exemple, dans l'image,ici, je peux ajouter une image,et voilà, donc là,vous ajoutez ça comme vous voulez,et c'est vraiment vous faire un dossier déposédes images,on peut en ajouter plusieurs si on a envie.
00:22:18 :Donc là, on voit, là, je vais faire un exemple ici,avec des documents.On peut modifier les règles de confidentialitéavec des collections,donc vraiment avoir des documentsqui sont privés,par exemple,on fait déjà les collections,tac, ici, une collection,hop,on peut dire quel groupe a le droit
00:22:40 :à accéder à certains documents, certaines images.Donc c'est vraiment assez complet.Donc là, on voit qu'on cliquepour choisir les collections, si on veutque les privés ou que les publics.
00:22:52 :Voilà, donc là, ça n'empêche les images,quand on veut les téléverser.C'est vraiment intuitif.On peut créer des points de focus, en fait,sur les images,parce qu'en fait,il est possible d'utiliser des tagsavec Wagtail pour rendre les imagesde certaines façons,mais pour être sûr de garder le principal de l'image,
00:23:14 :on peut créer des points de focussur les images.J'entends, il y a un bruit au fond, derrière.Voilà, donc par exemple,le document,ça j'ai déjà montré,excusez-moi.
00:23:34 :Donc là, on va revenir là.Quand vous écrivez votre article,en fait,j'étais ici,quand vous écrivez un article,ce que je disais tout à l'heure,vous pouvez ici mettre en place,il y a plein de choses à faire.
00:23:52 :On peut mettre plusieursdifférents, si on veut,mais des groupes,comment dire,ici, du paragraphe, du code,on pourrait mettre des images, ainsi de suite.
00:24:04 :Donc là, comme je disais, je peux écrire mon paragraphe,c'est riche, je peux vraiment faire ce que je veux.Après, je peux remettre du code,ensuite, je peux remettre du paragraphe.
00:24:12 :Donc ça, c'est un stream field.On déplie à chaque fois, on organise nos blocs comme on veut.Et si je veux en passer le paragraphe au-dessus,je le passe au-dessus.
00:24:20 :On l'organise vraiment comme on veut.Alors le stream field, c'est ça, c'est des blocs.On les personnalise comme on veut.Et donc là, on voit que le stream field,je vous l'ai mis sur le côté, j'espère que c'est assez gros,on voit qu'il y en a plein qui existent.
00:24:32 :Il y a plein, plein de blocs,comme ça, qu'on peut intégrerdans nos pages pour créer nos articlesou autres.Pour l'édition.Et comment faire un stream field ? Donc là, j'ai mis l'exemple
00:24:46 :dans Body, le stream field, ici,par exemple. Je vais l'appelerle stream field paragraphe. Donc moi, c'est ce quej'ai fait ici, par exemple, c'est pareil, paragraphe,code, et bien là, on voit que j'aiparagraphe et code.
00:24:58 :Et donc là, j'utilise le rich textblock, et ici, j'ai utilisé le code block.Par contre, on peut très bien mettre unrich text block, un integer block,ainsi de suite, comme on veut.
00:25:08 :Donc voilà.Il prend en charge le markdown par défaut, ou pas ?J'ai pas regardé,bonne question.C'est une bonne question.Tiens, je vais me le noter, ça faudrait regarder.
00:25:20 :Ça m'intéresse, en plus.Tu veux écrire du markdown directement en paragraphe, là ?Ouais, c'est ça, ouais.Ouais, c'est bon.Il le prend. Je sais pas, mais en fait,
00:25:36 :il suffit de le tester, donc...Il me le fait plus ? Ah non, non, il le fait pas,parce que j'avais mis un h2.Comment je pourrais...
00:25:44 :Ouais, attends,je vais essayer, voilà.Non, il n'a pas l'air...Bah non, en fait, j'ai cru,c'est parce que j'avais déjà sélectionné le h2.Ah, ok, d'accord.
00:25:58 :J'avais fait ça, et je me suis dit, oh, trop bien !Non, non, non, ça...Je pense pas du tout, même en enregistrant.Mais attends.
00:26:06 :J'ai cru avoir fait un truc...Ah !Et si je fais ça ?Non, c'est bizarre, et si je fais...Si, si, si.En fait,je reste ici, je fais mes deux...
00:26:24 :Tiens, alors attends,je fais ça, et si je fais entrer,si je suis sur alt gr et que je faisespace, ça me le prend en compte.
00:26:32 :Ok.Bon, voilà, merci, j'ai découvert un truc.Par contre, du coup,le problème, c'est que si tu collesdu markdown directement dedans, ça va peut-être pas le...
00:26:42 :Oh...Bah...Est-ce que j'ai un...Attends.Alors faites pas gaffe, ça, c'estune application de jeu de rôle.Est-ce que j'ai fait un vrai...Attends, on va pas...
00:27:00 :On va pas te faire compliquer, on va prendrel'H2.Hop !Et si je reste sur alt gr ?Ah ouais, non, j'ai...Peut-être qu'il y a moyen, parce que siil le prend en compte, mais il faudrait que je regarde, bonne question.
00:27:16 :Ouais, je pense que ça doit exister.Ouais, et si je fais ça,et que... Attends, il faut que je...Je vais supprimer ce quisert à rien, je vais mettre une date,hop, test.
00:27:28 :Ici, il fautforcément un paragraphe.Ici, l'impôt. Là, j'ai misquelque chose, étiquette...Hop.Non, je le mets pas.Je pensais qu'en se regardant, il le faisait, mais non.
00:27:44 :Faut regarder, il y a peut-être moyen, en fait,mais si on peut le faire avec alt gr, ça me paraît bizarre.Intéressant de regarder, en tout cas.
00:27:54 :Merci d'avis.Je viens de voir, pour le coup,il y a un paquet,il y a un repo github,whitetailmarkdown.Donc je pense qu'il y a une appà installer, simplement.
00:28:08 :Et bien, en plus,c'est pas intégré directement dans WhackTale,du coup, ça, ça me paraît...On s'installe.T'as lebloc...Ouais, donc il peut s'installer...
00:28:22 :En plus, il peut s'installer en bloc...Ah, faut l'installer à part,alors WhackTale Markdown.Mais ça, c'est fiable, du coup,je pense, parce que... Ouais, 5 mois.
00:28:32 :Parce que si vous regardez bien, c'est Torchbox,donc c'est ceux qui,donc c'est ceux qui ont créé WhackTalequi ont fait ça.Donc, nickel.Je sais que tu veux faire du Markdown,du coup, il est pas là.
00:28:46 :Bon, bah, voilà.C'est une vraie réofficielle.Bon, là, c'est une démoqui a déjà commencé.Merci, David.La démo va finir après.Alors, du coup,maintenant, je vais peut-être passer sur du...
00:29:02 :sur un projetsur un projet avec des codesqui s'appelle...Hum...Tiens, Simon, il y a ton truc, là.J'ai pas eu peur.Donc, par exemple,ici,je vais grossir,parce que là, je pense que vous voyez rien.
00:29:22 :Vous me dites que 650, c'est bien.Voilà.J'ai mis à 150.Par exemple,je découpe pas mal de mes modèles, moi,en application.Par exemple, ici, je vais avoirla home page.
00:29:40 :Mon modèle, ici, c'est donc là que je disais.Je m'en sers pas.Mon modèle de page d'index.Et comme vous regardez bien,j'ai aucune vue.
00:29:50 :Donc, tu vois, là, Simon, tu me demandais tout à l'heure,c'est qu'en fait, ici, quoi que tel,t'as aucune vue à créer, par exemple.T'as juste ton modèle à créer, et après,quand t'édites directement dans ton administration,ça va te créer tes URL,ça va te gérer tout seul.
00:30:04 :Donc, t'as ton modèle à faire, et moi, je me suis pas embêté à faire des vues.OK. Mais ça marche comment, du coup,s'il n'y a pas la vue ?
00:30:14 :Comment tu l'appelles, la page ?Eh bien, après, ta page,comme je te montrais tout à l'heure,par exemple, pour le blog,ici, c'est quoi ? Alors, c'est différent.
00:30:28 :C'est une vidéo YouTube, ça.Ici, donc, je vais avoir la partie articles.Et donc,ici, je vais avoir...Là, c'est un peu plus balèze.Alors, je vais avoirma page d'index avec tous les articlesoù ils vont se répertorier.
00:30:50 :Bon, là, c'est un exemple.Il n'y a pas de front, c'est fait à l'arrache.Je me suis pas embêté.Hop,les articles. Voilà, ça se présente comme ça.
00:31:00 :Et, en fait,si je dirais par Wagtail,et c'est mon code que je voulais remontrer.Tac.Ici, tu vas récupérer, du coup,toutes tes instances dans ta pagesans vue.
00:31:16 :Tu vas les récupéreravec, ici, la méthode getContext.Ici, je récupèretoutes les pages enfants,les child,les pages enfants qui sonten ligne, en fait,de monarticle page, en fait.
00:31:34 :D'accord. Donc, le modèlecommunique directement avec le template.Ouais.Ouais, ouais, ouais. Ok. Génial.Donc,c'est ça. Oui, parce que, voilà,j'en ai parlé, mais je ne vais pas montrer.
00:31:48 :Ici, j'ai le modèle articleIndexPage.Pour que ça fonctionne bien, il vous fautun templatearticleIndexPage, au format, là.Donc, là, à chaque majuscule,ici, je vais avoir mon,je vais avoir un underscore.
00:32:02 :Le modèle articlePage,c'est pareil.Voilà.Tac.Je fais un peu vite là-dessus.Mais, voilà, donc, je récupère mes pages enfantscomme ça, dans le contexte.
00:32:16 :Et la page enfant, par exemple, ici,le modèle articleIndexPage, ça va êtrearticlePage. Voilà.Et ici, j'ai un exemple de streamfieldoù, bah, là, c'est un streamfieldplus riche que dans,que sur ma plateformeperso. Et pour accéder,
00:32:34 :de base, par défaut, je crois que c'estCMS. Voilà.Si je vaistaper un article, un index article,je vais en créer un bidon,articlePage.
00:32:48 :Le streamfield, ici, il est plus fourni.Voilà, il y a plus, on a plus de choses à mettre.On peut, hop, envoyer des citations,des paragraphes, comme j'ai fait tout à l'heure, ainsi de suite,des URL,des images, comme on veut, boum.
00:33:00 :Voilà.Euh...Voilà. Est-ce que, du coup, ça te convient le mieux, déjà,un peu, cet exemple-là,qu'on prendrait un peu mieux ?Ah, ouais, ouais, merci.
00:33:14 :C'est...C'est assez éclairant.Et, alors, voilà, avec Cocktail,c'est...Je ne fais quasiment que de la classe avec ça, en fait.Je n'ai quasiment pas de fonction, ouais.
00:33:26 :Je viens d'y penser, là, c'est vrai qu'avec Django,j'ai plus de fonction au niveau des vues, tout ça,du coup, ce qui fait beaucoup d'hyper-functions.
00:33:32 :Mais, là, du coup, on se retrouve avecplus de classe, peut-être, au final, si on a l'habitudede faire des jeux avec des fonctions.Mais, voilà.
00:33:40 :Euh... Du coup,je vais repartir un peu sur monslide, les stupettes.Donc, ici, on a bien vu, du coup, dans mes pages,ici, j'utilise que des...
00:33:50 :Bon, là, j'utilise un objetDjango Models,mais vous pouvez faire interagir, en fait,des...Est-ce que j'ai un exemple ?Est-ce que j'ai un exemple ?
00:34:02 :Voilà. Vous pouvez faire interagirdes objets Django,donc des modèles Django,parce que, par exemple, moi, j'ai une application,j'aime bien tout mélanger,enfin, tout mélanger.
00:34:14 :Tout combiner, plutôt.Une application,ici, AdWords,là, j'ai pris l'exemple, c'est pour la vidéo YouTube.Imaginons que, là, c'est un siteoù on écrit des articles, et on voudrait avoir, à chaque fois,une annonce assez importantesur un article.
00:34:30 :Donc, AdWords, ça va être un modèleDjango.Là, je suis bien dans le modèle Django.Mais, en fait, ici, j'appelleRegisterStupette, et ça,RegisterStupette, ça vientde Wagtail.
00:34:44 :Et j'ajoute ici,et ça, ici, c'est pareil, donc ça vient de Wagtail.Donc, en fait, là, j'aiun modèle Djangoqui est ici, que j'ai décoréavec le décorateur RegisterStupettede Wagtail, et je le renddans l'administration de Wagtail, grâceà mon panel, ici.
00:35:02 :Donc, voilà. Donc, avec un modèle Django,en fait, vous pouvez l'intégrerdans Wagtail, avec le décorateuret, après, vos attributs.Donc, c'est assezpuissant, et vous allez voir, du coup,que, du coup,si je suis ici, donc là, j'étais partipour faire un article, je peux trèsbien les choisir. AdWords,
00:35:22 :AdWords, c'est, du coup,une instanced'un modèleDjango. Et bien, là, par exemple,là, c'est une pub bidon.Donc, c'est Microsoft qui ala date.
00:35:36 :Et je peux choisir l'instancede mon modèleDjango.Il faut savoir, du coup, qu'au final,vous pouvez, ici, faire apparaître vosmodèles Django,ici, sur le menude fragments de base.
00:35:52 :Et donc, ça, ici, j'ai mes modèles Djangoqui apparaissent, et je peux très biencréer desinstances de mes modèles Djangodepuis l'admin Wagtail, comme je le fais avecl'administration Django.
00:36:04 :Et bien sûr, j'ai toujoursaccès, si j'ai besoin,à l'admin Django.Voilà.Donc, vous voyez, en fait, il faut vraimentpartir sur le principe quesouvent, quand on parle de Wagtail, c'estvraiment qu'on n'utilise que Wagtail, mais il ne faut pashésiter à aller mélanger,à combinerle framework Django
00:36:28 :et la partie Wagtail, quoi.Il faut vraiment les combiner.Je voulais vous parlerd'un truc que j'ai oublié, du coup, en parlant de combinaisond'objets.
00:36:40 :Ah, voilà.Là, par exemple,sous messous mes articles,donc mes articlespage, c'est vraiment quand on écrit un article, là,je voulaisqu'en fait, on puisse commenter.
00:36:58 :Alors, il y a un moment, je ne l'ai pas fait,mais je crois que, voilà, j'avais mis ici.Donc, dans monapplication articlesmodels, ici,j'ai bien mon modèle,enfin, mon objet page, qui arrive de modèle,qui est Wagtailet comment, le modèle comment,ou mes commentaires, qui est
00:37:18 :Django, comme on l'a vu tout à l'heureavec l'adverte.Et donc, c'est pareil, je décore avecWagtail, avec le registre Cpet,je le rends dans l'administration,et je peux gérer, en fait,mon modèle commentdans l'administration deWagtail, comme j'ai fait tout à l'heure.
00:37:36 :Sauf qu'ici,du coup,ils sont où ?Voilà. Dans Wagtail,il y a uneavion de Wagtail, c'est la méthode serve.Bon, là, c'est pas top,parce que c'est génial, parce que je ne l'ai pas organisédepuis le début, comme je voulais,l'application, mais c'est une application test,donc j'ai fait mon import en local pour éviter les problèmes
00:37:58 :de références circulaires.Pour ceux qui c'est déjà arrivé, c'est bienchiant. Donc, voilà.Et en fait,ici, j'intègremes commentaires, du coup,mes commentaires danscomment dire, au niveau dechaque page, au niveau de chaque article.
00:38:20 :Voilà, c'est ce que je voulais dire, parce que dans comment,en fait, je vais avoir la page,et en for nk, je vais mettre mon modèlearticle page de Wagtail,et ici, je le récupère dans la méthodeserve, voilà,et en fait, je le metsdans le render, ici,
00:38:36 :de la méthode serve,ça va être ici, tous mes commentaires.Et j'affiche aussiun formulaire, qui va être ici, un common form,et en fait, dans la méthodeserve, on peut gérer aussi ce qui se passe quand il y a une requêteposte, donc ici, ben voilà,je sauvegarde le commentaire,
00:38:52 :en fait.Ça peut paraîtrebeaucoup de choses.Excuse-moi,je n'ai pas compris,tu as parlé d'import local,j'ai déjà vu ça dans Pythia,mais je ne sais pas ce que ça veut dire, tu peux expliquer ?
00:39:08 :Alors là, tu vas,ça va t'arriverun jour ou l'autre, ne t'inquiète pas,tu vas lancer ton application, tu vas faire ton run server,et là,tu vas avoir des messages d'erreur de partout,genre, en gros, je ne sais pluscomment c'est écrit, il y a un moment que ça n'est pas arrivé,
00:39:24 :ça te met une erreur,et certainement due àun problème d'import circulaire.C'est quand tu vas,ouais, c'est quand tu vas avoir, en fait,par exemple, tu as deux fichiers Python, tu vas importercinq objets,l'un dans l'autre, en fait,et ça, il n'aime pas trop.
00:39:42 :Ouais.Et donc là, en fait,ça, en fait,j'importe icicommentform, voilà, c'est ça,c'est mon formulaire, donc,qui est là,mon commentform, et ici, voilà,et j'importe, en fait, de mon fichier modèle comment.
00:40:04 :Ah, c'était pour ça, je m'en souviens.Et donc, j'importais de mon modèle, ici,comment, et ici,le commentform, là-dedans, et du coup, j'ai un problèmed'import circulaire.
00:40:14 :Et pour ça, du coup, j'étais obligé de faire mon from,mon from import,ici, comme tu en fais,déjà, où Django commence,c'est dû le faire, en fait, au niveau de la méthode,pour ne pas avoir de soucis, parce que si je le faisais là,c'est ici que j'avais mon problème d'import circulaire.
00:40:28 :Voilà.Ah, d'accord, donc, ça, il ne l'importeque quand il rentre dans la méthode, c'est ça ?Hum, hum, hum.J'importe, par exemple, que pour ma méthode.
00:40:38 :Ce n'est pas top, hein, faire ça, ce serait génialniveau lisibilité,mais c'est une application pour YouTube,pour un vidéo YouTube,ce n'est pas un tour organisé, tu vois,en plus, j'explique bien dans la vidéo que ça,ce n'est pas génial d'ici d'importer,d'importer comme ça dans l'espace local,
00:40:54 :ce n'est pas top, mais je n'ai pas le choix,je ne vais pas me tourcer, tu vois.Merci.Voilà.Ne t'inquiète pas.Ouais, excuse-moi, Gabriel.
00:41:06 :En fait, c'est une erreur aussiqui apparaît quand tu fais du typage.Tu veux faire du typageet que tu importesune classeet qu'elle-même, dans ce fichier,elle apporte une autre classe.
00:41:20 :En effet, ce cycled'import, cette erreur,il y a une astucepour éviter justementcette erreurde cycle d'import,c'est que tu lui dis que sic'est pour du check typing,en fait,voilà, si c'est pour du check typing,tu ignores en quelque sorte.
00:41:42 :Ouais, et du coup,c'est là que tu en parles,que tu en parles.Dans les modèles Django,je ne sais pas,puisqu'on est sur les imports,je ne sais pas si j'ai un exemple,du coup,ça peut intéresser.
00:42:00 :Est-ce que, j'ai un projet qui s'appelle,c'est trop gros, j'ai du mal à le trouver,il y a un projet qui s'appelle,normalement,je ne sais plusoù il est à la plateforme.
00:42:12 :Sur celui-là,pour ceux qui connaissent PHPPB,c'est un gesteur de forum,je me suis amusé à faire une espèce de PHPPB,mais en Python, en Django,et donc, dans les modèles,ici, forum, est-ce que je le fais ?
00:42:26 :Je ne sais pas,c'est tout à fait en relation avecla question,en plus à, voilà,à Simon,par exemple, avec Django,il est possible d'éviter les problèmes d'import,en utilisant, parce qu'ici,j'ai une foreign key, c'est un autre modèle,c'est le modèle thème,et le modèle thème, je ne sais plus où il est d'ailleurs,
00:42:50 :ici, bref, peu importe,mais si on a plusieursmodèles dans plusieurs fichiers,on peut, avec Django, mettre le modèle ici,entre guillemets,voilà,c'est une astuce pour éviter les problèmes d'import circulaires.
00:43:04 :Il est possible de mettre vos modèlesici, entre guillemets,voilà, une sorte de chaîne de caractère, ça passe.Du coup, j'étais où ?J'étais où ? Voilà.
00:43:18 :Du coup, voilà,j'étais là, c'est bon.Tac, les articles,quand je suis dessus,on voit, là, je suis connecté,j'ai mon, bon, là, c'est bidon,il n'y a pas de frontin.
00:43:34 :Tac, hop,et j'ai bien mon commentaire test qui s'est mis ici.Donc ça, j'étais là,c'est grâce à la méthode, ici, serve,demon modèle Wagtail, on va dire.
00:43:46 :Voilà, donc il est possible de faire ça.Les snippets,c'est intégrer les objets de Django dans Wagtail,dans l'admin, c'est ce que j'ai fait, donc le modèle comment,le modèle de publicité que j'avais tout à l'heure.
00:43:58 :Ça,non, ça ne va pas trop.Ça, c'est ce que je vous ai montré avec le registre snippet.La question d'intègre,ce n'est pas intéressant pour l'instant.
00:44:08 :Non, ça, on l'a vu.Avec Wagtail, du coup,il est aussi, je vais vous montrer,il est possible decréerdes formulaires, voilà.Moi, je préfère les faire en Django,pour tout ce qui est formulaire,mais on peut très bien s'amuserà faire un formulaireavec Wagtail, et pour ça,
00:44:30 :je vais créer une application, je crois.Elle s'appelle,je ne sais pas ce qu'elle s'appelle, il me semble que, si,il n'y a pas, ah, contact.
00:44:38 :Contact, modèle, et voilà.Donc, en fait, avec Wagtail, vous allezappeler,donc, il est où, c'est leabstract form field et l'abstractemail form.C'est en train de vous faire, en fait, desmodèles pour créer vos formulaires de contact,ici, abstract email form,assez rapidement. Donc là, j'ai
00:44:58 :le texte de remerciement,dans la flèche sud.Donc, les gens vont envoyer mon mail,après, ils vont aller sur ce texte de remerciement.Et ici, donc, j'avais monabstract email form,que je rends dans le...
00:45:12 :que je rends dans l'administration.Et donc,j'ai lié iciform fields.Form fields, ici, c'est une relation.Ça va être ce modèle-là.Ça peut paraître un peu compliqué.
00:45:28 :Et ce modèle-là, c'est uneparental key. Ça veut dire queform page va êtreun modèle parentde form field. Et ça, parental key,vous l'avez pas avec Django.
00:45:40 :Ça correspondrait à uneforeign key, mais en modifié.Je pense que dans l'héritage, on la retrouve.Voilà, ça arrive de la foreign key.Et en fait,la parental key, on a vraiment cette relationpar enfant. Et je vais vous montrer ce qui est
00:45:54 :super avec une parental key.C'est ici, la parental key. Je l'ai bien mis dans mon panel.Dans mon panel d'administration.J'ai aussi,donc,from address to address, c'est pour gérer l'envoi d'email.
00:46:06 :Voilà.Le sujet, quand la personne va écrire sonmessage.Voilà. Et puis, du coup, l'email aussi.Donc, en gros,je vais avancer mon serveur.En gros,quand je vais construire mon formulaire, il est là.
00:46:22 :Ça, c'est mon formulaire final.L'écriture sujet,il m'envoie et c'est bon.Quand vous construisezun formulaire avec Wagtail,je vais vous montrer celui que j'aidéjà tout fait.
00:46:36 :Il était là-dedans.Formulaire de contact.Donc, c'est sur monon peut très bien faire ouajouter une soupe.Je l'ai ajouté en fait, en gros, je suis parti d'icipour le faire.
00:46:50 :J'ai déjà tout fait.Je reviens dessus.Donc, là, je choisis mes champs.Mon champ 2, mon champ 3.Et en fait, vous pouvez choisir autant de champs que vous voulez.
00:47:02 :Et ça, en fait,ce fait de pouvoir inscrire autant de champs que vous voulez,c'estc'estla parental key, le form field.Voilà. C'est chaque champ, en fait,
00:47:14 :donc c'est comme si c'était une parental key.Et bien, vous pouvez,ils sont intégrés ici, vous pouvez en ajouter autant que vous voulez.Voilà.Et donc, en gros, sur le principe,une foreign key, quand vous avez un modèle Django,par exemple, quand vous avezun foreign key, vous avez un article et un auteur,
00:47:30 :il faut que l'auteur soit déjà existant.Et ici, en fait, avec Wagtail, avec la parentalkey, il n'y a pas besoin, en fait, si vous créez directementvotreforeign keydirectement, entre guillemets,directement ici.
00:47:46 :Et vous enregistrez tout en bloc avec votre formulaire.Donc, voilà. Donc, le champ,leschamps ici, on peut mettre, par exemple,le type de champ, un text d'une seule ligne,on peut mettre un courriel,on peut mettre plein plein de choses.
00:48:00 :Voilà. Donc, en fait, vous pouvez créer vosformulaires sur mesure. Et du coup,il y a un petit côté assez sympa, vous pouvez mettre ici le champRUKI ou pas,le champ RUKI,vous pouvez en mettre ce que vous voulez, quoi.
00:48:12 :Voilà. Donc, là, c'estlemessage de remerciement.Il faut que les gens nous ont contactés. Ici, je metsles expéditeurs et les signataires. Voilà.Subject,c'est le...
00:48:26 :Je ne sais plus si c'est un lien qui correspond,j'ai un doute.Ah, c'est quand, moi, je reçois un mail. Ouais, voilà, c'est ça.Quand vous recevez un mail, en fait, vous avezun contact depuis la pêche-perche. Voilà. C'est le sujet
00:48:38 :de l'entête, en fait.Le sujet du mail.Du coup, pourrendre votre formulaire en plus,dans votre template, rien de compliqué.Voilà. C'est du blanco.
00:48:54 :Juste vous pensez à votreCRF Token et vous mettez votreforme ASP ou, comme vous voulez, ou un CRISPYFORM.Moi, je ne savais pas faire ça, je l'utilisais à CRISPYFORM.
00:49:02 :Et voilà. Donc, vous avez votreformulaire qui est rendu.Voilà.Donc, ça, c'est pour le formulaire.Comme je vous l'ai montré tout à l'heure, un suivi de contactsdepuis l'administration.
00:49:14 :Du coup, pour ceux qui enregistrent,après, si vous pouvez couper la partie où je vous l'ai montréetout à l'heure,les contactssur ma page perso, s'il vous plaît.
00:49:24 :Merci d'avoir fait ça exprès.Là, du coup, c'est du test bidon.Donc, voilà. Ici, par exemple,j'ai envoyé deux demandes de contact bidon,mais vous pouvez vraiment les retrouver dans votre admin.
00:49:34 :Si jamais le mail, vous l'avez perdu, supprimé,ou qu'il y a un problème de serviteur mail,c'est enregistré dans l'administration, en plus.Et ça, c'est cool.
00:49:42 :Hum...Voilà.Donc, les formes du leader.Ensuite, j'ai quoi ?Donc, c'est ce que j'ai montré à l'instant.La parentale key, je l'ai expliqué tout à l'heure.
00:49:54 :Donc, c'est arrivé sur un key. Ça me permet de travailler, du coup,sur plusieurs objets à la fois.Donc, la page parente est ici.Donc, la page parente est ici.
00:50:02 :Donc, la page parente est là.La form page et tous les champs que je vais rajouter à chaque foisà mon formulaire, ici.Donc, je travaille sur plusieurs à la fois en même temps.
00:50:10 :Hum...Ça, je montrais qu'on pouvait le rendre comme ça.Voilà. Donc, c'est ce que j'ai expliqué ici.Hum... Voilà.Maintenant, il y a un autre truc qui est vachement cool avec Django.
00:50:20 :C'est le système de workflow et de permission.En fait, hum...Quand vous regardez...Ici...Hum...Les groupes...Donc, ça, c'est les groupes de base.Pour l'instant, je n'ai jamais eu à utiliserplusieurs groupes.
00:50:40 :Parce que ces bases sont déjà très, très bien.Les modérateurs.Donc, hop.Là, on a les...Les modèles Django, ici, qui apparaissent.Qui sont créés.
00:50:52 :Mais là, vous avez aussivos permissions de page. C'est ce qui nous a intéressés.Permissions de page.Hum...Donc, là, en fait, ici, les permissions de page,on peut choisir une autre page.
00:51:04 :Par exemple, on peut très bienprendre la page d'accueil. On peut très bien choisirl'index des articles, la page ordinaire de contact.Peu importe. Et en fait,
00:51:12 :il faut savoir que si vous appliquez une permission,comme ça, sur une page, ça va alleren cascade, en descendant.Donc, vous pouvez très bien créer des groupesqui ont des permissions différentessur la page...
00:51:24 :Donc, imaginons qu'on a l'index des articles.Mais si on avait, par exemple,une partie articleset une partiearticles nationales, articles internationaux,excusez-moi,il faut très bien créerarticles nationaux et articles internationaux.
00:51:40 :Voilà.Il faut très bien créer, donc, une permissionpour l'index des articles nationauxet une autre permission, puisqu'il y avait une pageà l'index des articles internationaux.
00:51:50 :Et, en gros,toutes les pages en font, donc, sur chaquearticle, sur chaque article.Voilà. Donc, vous, comme ça,créez des groupes avec des permissionsdifférentes sur chaque partie différentede votre application. Et c'est pareil sur les documents.
00:52:04 :Voilà.Et j'espère que ça va.Je ne me suis pas trop perdu.Est-ce que vous me suivez ou...C'est pas trop galère.Oui, je ne sais pas.
00:52:16 :Il faut le faire pour le voir, maislà, vraiment, vous pouvez organiser vos groupesavec des permissions différentes. En gros,il ne faut juste que dire que vous pouvezcantonner les permissions à certaines partiesde votre application, à certaines pageset dans la hiérarchie,justement, de vos pages.
00:52:32 :Voilà.Donc, vous sendez votre application avec différentes pages,une hiérarchie,et puis chacun aura ses rôles, en fait, sur votre application.Donc, des rédacteurs nationauxet des rédacteurs internationaux, par exemple.
00:52:44 :Voilà. Ils ne pourront pas agir pareil,en fait, sur les différentes parties.Du coup, ce qui m'amène à vous parler,il y a un système de workflowque je vais peut-être vous montrer en live.
00:52:54 :Le système de workflow,au lieu de prendre ma slide,par exemple,je peux voir iciles utilisateurs.Gap test.Moi, j'ai fait des tests.Donc là, par exemple, moi, je suis connecté en tant qu'administrateur.
00:53:10 :Maintenant,ce que je vais faire, c'est que je vais me connecteren tant que simpleéditeur.Éditeur.Donc là, je suis éditeur.Ça, je vais le supprimerjuste pour vous montrer.
00:53:26 :Ouais.Je peux la supprimer.Elle est où, la page ?Hop.Donc là, je vais créer ici, par exemple,celui-là.Attendez, je reviens.Je vais essayer. Hop, là.
00:53:42 :Voilà.Hop, page. Donc là, je suis là.Je vaisécrire un article en tant qu'éditeur.Je ne suis pas modérateur.Éditeur. Et là, je vais créer mon article.
00:53:54 :Donc là, je vais l'appelertest.La duplication.Donc test.Je vais mettre un texte basique.Test, par exemple.Une étiquette.Test. Hop.On va dire qu'il y a Microsoftqui a envie de faire une pub ici surnotre article.
00:54:16 :Je peux enregistrer le brouillon,normal. Par contre,ici, je ne peux pas publier.Tout à l'heure, en tant qu'administrateur, je peux publier, mais ici, je n'ai pasle droit de publier parce que c'est queles modérateurs qui peuvent. Donc là, hop, je
00:54:28 :soumets la modération.Et en tant qu'éditeur, si je reviens ici, je vois bienque j'ai une pagedans un workflow, en fait.Donc ça veut dire qu'en gros, elle est dans un systèmeoù elle doit être validée.
00:54:40 :Et maintenant, j'arrive. Je vais aller me connecter en tant quemodérateur.Je suis ici.En attente de votre vérification.Et on voit qu'il y a Gab Gabqui a écrit un articleet qui attend de vérification.
00:54:54 :Et on peut même le voir, d'ailleurs, dans les paramètres.Je crois que c'estje ne sais plus.Workflow.Ouais, voilà. Donc on voitce qui est en attente.
00:55:06 :Donc là, par exemple, je vais ici.Je clique. Hop.Donc je peux très bien mettre un commentaire, si je veux, sur le côtécomme j'ai envie.
00:55:14 :Possiblement, l'article,ça va, OK.Je peux publier moi-même.Je peux demander des modifications.Donc je peux faire un approuvé-publié pour le mettre du coup.Il sera au courant. Ou je peux faire
00:55:26 :approuver qu'un commentaire est publié.Voilà. En fait, vous, en tant que modérateur,après, vous pouvezavoirdifférentes actions. Soit publié, soit après.Encore des modifications.
00:55:40 :Donc là, en soi, pour vous, ce n'est peut-être pas forcément utiled'avoir un workflow si vous êtes tout seul avec une page perso.Mais si jamais, en fait, vous faites un projetpour quelqu'un, ou même pour vous,quoi que ce soit,c'est hyper pratique d'avoir ce système de workflow
00:55:52 :qui est déjà mis en place avec WebTail.Est-ce que ça, ça va, c'est compliqué,ou c'est galère?Nickel.Cool.Hop.Après publier.Voilà. Donc là, j'ai approuvé
00:56:14 :de publier l'article.Maintenant, ce qui est sympa avec les articles, c'est que vous pouvezc'est au-delàici,historique.Vous avez un système de révisionoù vous pouvezvoir tout ce qui a été fait. Donc là, il y a Agathe
00:56:30 :qui a créé l'article. Il a sauvé unbrouillon. Il l'a envoyé dans un workflow.Moi, je l'aisauvegardé. J'ai fait une modificationet je l'ai approuvé.
00:56:40 :C'est terminé. Mon workflow, en fait,est terminé. Et hop, là, j'ai la versionpubliée. Sauf qu'il faut savoirque vous pouvez très bien faire une prévisualisationde chaque versionqui a existé dans votre article.
00:56:52 :Si votre article ou votre page,il y a eu plusieurs modifications à chaque fois, vous voyezquand elle a été faite,par qui elle a été faite,comparé avec les versions précédentes.
00:57:02 :Vous pouvez compareravec la version actuelle. Et voilà, comme ça,vous pouvez facilement revenir un peuà ce que vous avez fait avant.Donc ça, c'est assez coolde pouvoir avoirun système derévision.
00:57:18 :Donc les permissions, on en a parlé tout à l'heure.Ça, c'estle système de workflow.Ça, c'est le système de révision que je viens de montrer.
00:57:30 :J'avais un exemple où j'ai fait plus de choses.Donc là, pour bien vous montrer,en fait, vous voyez, on peut faire une prévisualisation,comparer avec les versions précédentes,les versions actuelles, passer en revue.
00:57:40 :Enfin, on peut faire plein de choses.Donc voilà.Comme je disais tout à l'heure, il est possible de créer un moteurde recherche.Avec Wagtail, il y a tout cequ'il faut qui est fourni.
00:57:52 :Et à chaque fois,avec vos pages, vous allez voir,on arrive à la find'ailleurs. Avec vos pages,par exemple, vous allez avoir les articles,les modèles. On voit ici qu'avec
00:58:04 :mes articles,je l'ai mis où ? Là.Ici, j'ai indexé les champs bodyet les champs introduction.Et je me suis fait une applicationSearchavec mon moteur de recherche.
00:58:20 :Et donc en fait, ça c'est un snippet,un bout de code que vous récupérez directementsur la doc de Wagtail qui est tout fait.Donc comme ça, vous avez juste à le modifier.
00:58:30 :Et vous avez après votre template, pareil,vous modifiez ce que vous voulez. Donc là, j'ai laisséun peu les trucs de base.Voilà. Mais vous avez votre
00:58:40 :moteur de recherche qui est tout fait.Juste avec ça.Et ça. Et Wagtail.Donc voilà. Donc le moteur de recherche, il est assez rapide à faire.
00:58:48 :Ça. Et pour finir,sachant que les recherches,je ne les ai pas fait, je les ai même fait encore,mais il est possible de mettre en placeun système de promotion.
00:59:00 :Un système de promotionoù selonce que vont taper les gensdans le moteur de recherche,vous pouvez faire en sortequ'il y ait des pagesqui ressortent, en fait.
00:59:24 :C'est ça leur système de promotion.Vous pouvez mettre un système de hitsoù vous savez quels termes ont été recherchés tant de fois.Je pense que c'est possiblede faire ça, que ce n'est pas trop compliqué.
00:59:34 :Voilà.Et un truc qui est...Il est où ?Ça. Voilà.En fait, ce qui est très très bien aussiavec Wagtail, on est là.
00:59:46 :On part avecun projet de jongle à la base.Ici, j'ai mon base.html que je vais étendre.Vous pouvez mettre icipour vos pagesune condition.
01:00:00 :Et si jamais vous avezrempli les champs qu'il fautdans votre administration Wagtail pour chaque page,vous avez à chaque fois le champtitre qui va s'afficher.
01:00:10 :Et pareilpour les métas.Vous avez votre condition ici.Et pareil pour les métas.Et ça va apparaître tout seul.Exemple, vous avezun article qui est là.
01:00:26 :Vous allez écrire un article.Si vous renseignez icila balise titre,les métas descriptions,elles vont bien apparaître grâcejustement à ce quevous avez mis en placedans le HTML.
01:00:42 :C'est pratique. Vous le faites pour une foispour toutes vos pages.Pour ceuxqui ont envie,ils peuvent très biense créer une API.Wagtail fournit tout ce qu'il faut pour créer une APIassez facilement. Vous testez une fois rapidement
01:01:00 :et c'est simple à faire.Ça c'est entre parenthèses.Je ne pensais pas en parler ce soir.C'est possible.Donc voilà.Est-ce que ça va ?
01:01:12 :Est-ce que ce n'est pas trop galère ?Est-ce que je n'ai pas été trop vite ?C'est très riche et très densemais c'est normal quand on part de zéro.
01:01:22 :En plus,je vous montre tout d'un coup.Mais ça donne envie d'y alleret d'essayer de faire ses trucs.On y va en petit à petit.
01:01:32 :Quand tu seras bien à l'aise avec Django,tu verras, même pas forcémenttrès bien à l'aise,tu verras que tu pourrasfacilement basculer un peu sur du Wagtail.
01:01:42 :Oui, j'ai l'impression que ça se ressemble beaucoup.Oui.C'est structuré un peu pareil en plus simple.Excuse-moi de t'avoir coupé.Justement, c'était ma question.Est-ce qu'on doit maîtriser Djangopour se lancer dans Wagtailou avec des connaissances de Pythonde manière générale,on pourrait s'y mettre ?
01:02:08 :Je pense que quand même,Django va vous aider pas mal.Django va aider pas mal.C'est pas mal de connaître Django à la base.Après,si.
01:02:20 :Parce qu'en fait,il y a deux façons de partiravec Wagtail.Là ici, j'ai créé un projet Djangoet j'ai installé Wagtailpar-dessus. J'aime bien faire ça,
01:02:34 :comme ça j'ai ma structure Django classiqueque je suis habitué. Et après,je customise avec Wagtail par-dessus.Mais,il est possible,je ne sais plus ce que c'est là.
01:02:46 :On va aller voir sur l'histoire Wagtail.Il y a une commandeWagtail.Il y a une commande.C'est bête, c'est ici en fait.C'est un peu la Django.
01:03:00 :Vous allez voir, c'est ça.Vous faites Django admin, start projectet votre projet.Ici, c'est un Wagtail start que vous faites.Et en fait,c'est très très bien, mais après,quand on ne connait pas trop, on peut être un peu perdu.
01:03:14 :Il faut bien aller à la doche.Vous allez avoir une structure Wagtailqui va être toute créée.Je ne sais pas si...Est-ce que je n'ai pas un testde WagtailWagtailC'est moi qui fais ça ?
01:03:40 :Non, ce n'est pas du Wagtail ça.Sinon, ce n'est pas grave.En gros,je vais être là.Je vais le faire dans cddevmkdirtestJe vais faire comme ça.
01:04:10 :Ça va prendre 5 minutes.Tu vas comprendre par rapport à ta question.Je vais l'ouvrir.Où est le test ?Il est là.Normalement, je suis bien dessus.
01:04:36 :Ok.Je vais faire un type installWagtailAttention, c'est lourd.Pour ceux qui sont habituésà installer Django, c'est très rapide.Avec Wagtail, attention, c'est lourd.
01:04:50 :Il y a un peu de téléchargement.Juste pour que tu comprenneset même pour les autresque moi, je suis parti à la basesur un projet de Django.
01:05:02 :Je vais partir directement sur du Wagtail.Il installe pas mal de chosesqu'il vient avec.On va pouvoir finir là-dessus.C'est lourd.C'est bizarre que ça soit aussi lourdalors qu'à la base,on se dirait que normalement,ça devrait être plus léger que Django.
01:05:34 :En plus, l'interface Wagtailleur a mis, en fait,les créateurs.Voilà.Vous voyez, il y a plein de chosesqui arrivent avec installées.Ok.C'est Wagtail...
01:05:50 :Tarte...Je crois que c'est ça, je ne sais plus.J'ai un projet Wagtailqui a été créé.Ici.Il y a une application homeavec une home pagetoute faite.
01:06:08 :C'est bien parce que ça montre un peuce qui s'est fait.Là, il n'y a pas grand-chose.Vous avez déjà le moteur de recherchequi est tout écrit.
01:06:20 :C'est intéressant de voir,c'est le projet.En fait, les settingsdans les URL sont déjà créésavec Wagtail.Je suis isolé, Gab.Je vais devoir partir.
01:06:40 :Pas de soucis.Merci beaucoup pour la présentation.C'est la fin.Merci d'avoir été là.Du coup, ce que je disais,c'est qu'il faut quand mêmecréer Django.
01:06:54 :C'est un cheat qui est ça.C'est mieux parce que là,tu reprends sur des choses,les settings et la Django.Sauf que eux, en plus,ils les ont modifiés.
01:07:06 :Il y a base, dev et production.C'est bien de connaître Django.Après, rien ne t'empêche,avec la doc, de voir si tu arrivesà t'en sortir. Je pense que oui.
01:07:16 :Franchement, avec la doc,tout est expliqué.Mais quand tu connais Django de base,tu es vraiment très à l'aise avec.Je pense que c'est bien mieuxde connaître Django avec.
01:07:28 :Je ne sais pas s'ils le disent ici.Oui, ici. Ils le disent là.Ils le disent.C'est mieux quand même de connaître Django.Si j'ai appris à ta question,j'espère.
01:07:44 :Voilà.Pour moi, c'est tout.Est-ce que vous avez des questions ?Est-ce que ça vous a plu ?Est-ce que ça vous a donné envie ?
01:07:56 :Est-ce que c'est trop lourd ?Si vous avez des remarques,il n'y a pas de soucis.Franchement, nickel.Je me fais intéressésur ce sujet.
01:08:14 :C'est un trucque je vais me pencher sérieusement.Franchement,tant mieux, c'est cool.C'est cool.Écoutez,si vous n'avez pas de questions,je remercie à tout le monde d'être là.
Aucune occurrence trouvée pour « ».