- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
Deviens membre Premium magic_button
Débloque cette session en devenant Membre Premium 🚀
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte personlive_helpToutes les questions
De716
2 avril 2024 - 02 avril 2024 à 22:57
checkConversation résolue
2 réponses
entourer bouton par un formulaire
Salut l'équipe, quel est l'intéret de l'emploi du formulaire pour créer le lien permettant de lire un article? En utilsant ce lien `Lire l'article` cela fonctionne mais on n'a pas …
Gabriel Trouvé
12 février 2023 - 12 février 2023 à 15:13
checkConversation résolue
2 réponses
request.user langage de gabarit
Bonsoir,{% if request.user.is_authenticated %} <a href="{% url 'posts:edit' slug=post.slug %}">Editer</a> <a href="{% url 'posts:delete' slug=post.slug %}">Supprimer</a> {% endif %} Si je peux utiliser la condition is_authenticated dans le langage de …
00:00:00 :Dans cette partie, on va voir comment ajouter un peu de colle entre tous les éléments,donc toutes les vues qu'on a créées, puisque pour l'instant on a un site assez sympa,mais le problème c'est qu'il manque encore pas mal de petites choses. Par exemple,
00:00:11 :on ne peut pas accéder à la vue d'un article depuis la page d'accueil. On a bien les articlesqui sont affichés, mais si je souhaite accéder à un article, il faut directement que j'ailledans la barre d'adresse URL ici, mettre le slog de l'article pour pouvoir y accéder.
00:00:23 :Pareil avec les vues de création, d'édition et de suppression d'un article. Donc ce qu'onva faire dans cette partie, c'est rajouter des liens vers les différents éléments quivont nous permettre de naviguer à l'intérieur de notre site. Donc la première chose que je
00:00:36 :vais faire, c'est aller dans le fichier base.html, donc ce fichier ici qui sert de base à tous lestemplates que l'on a créés dans cette formation. Dans ce fichier, ce que je vais faire, c'est
00:00:46 :déjà rajouter une barre de navigation, donc un menu en haut qui va être très simple,qui va tout simplement contenir un lien vers la page d'accueil et un lien vers la page pourajouter un article. Uniquement bien sûr si on est actuellement connecté sur le site, puisqu'on ne
00:01:00 :veut pas que les visiteurs de notre site puissent accéder ou voir le lien qui permet d'accéder àla page pour ajouter un article. Donc on va mettre un menu nav ici et on va mettre un premier lien,
00:01:10 :donc une balise A avec un href qui va être égal à la vue de l'accueil. Donc je vais mettredes accolades avec le pourcentage et on va utiliser la balise URL dans laquelle on vapasser le nom de l'URL à laquelle on souhaite accéder quand on va cliquer sur ce lien. Donc
00:01:24 :là je vais mettre des guillemets simples et on va mettre post.home qui est donc le nom de notreURL. Si je reviens dans le fichier URL ici, vous vous souvenez qu'on a l'espace de nommage ici
00:01:34 :post et ensuite on le concatène avec le nom de l'URL ici, donc dans ce cas-ci home. Donc je metstout ça et je ferme ma balise ici avec un pourcentage et une accolade. Alors là il faut
00:01:44 :bien faire attention de mettre des guillemets simples puisqu'on a des guillemets doubles pourle href. Donc href égal, ensuite un guillemet double qui ouvre, un guillemet double qui ferme
00:01:51 :et ensuite les accolades avec les pourcentages, le tag URL et ensuite entre guillemets simples lenom de l'URL à laquelle on souhaite accéder. Donc ici on va juste mettre accueil et on va pouvoir
00:02:02 :donc ainsi accéder à l'accueil. Donc si je rafraîchis la page vous voyez qu'on a maintenantun bouton accueil et si je clique dessus donc je reviens sur la page sur laquelle je suisactuellement. On va rajouter donc un autre lien qui va nous permettre d'accéder à la vue pour
00:02:14 :ajouter un article sauf que cette fois-ci on va l'entourer d'une condition donc on va remettreune accolade avec le pourcentage et on va vérifier si l'utilisateur est connecté. Donc on va faire
00:02:22 :comme on l'avait fait dans la vue pour récupérer uniquement les articles publiés, on va utiliserrequest.user.isAuthenticated. Donc si ça c'est vrai et bien on va afficher le lien donc là on va
00:02:34 :fermer juste avant notre balise avec un end if et à l'intérieur de ça ici donc on va mettre notrelien. Donc on remet une balise URL qui va pointer cette fois-ci vers post.create et on ferme notre
00:02:45 :balise et ici on va mettre ajouter un article. Donc on va voir si ça fonctionne je vais actualiserma page là j'ai bien le lien ajouter un article donc si je clique dessus j'arrive sur cette pageet là vous voyez qu'on a une erreur et c'est normal et c'est une erreur qui est très courante avec les
00:03:00 :URL et cette erreur elle apparaît à cause de l'ordre dans lequel on a mis nos chemins. Donc ilfaut savoir que l'ordre est très important ici puisque Django quand il va essayer de fairecorrespondre une URL qu'on a tapé ici avec un chemin d'URL il va y aller dans l'ordre donc il
00:03:14 :va essayer ce chemin là il va voir qu'il n'y a dans ce cas-ci aucune correspondance puisque làon est sur create donc il n'y a pas create ici. Après il va chercher est-ce qu'on a un slug donc
00:03:23 :dans ce cas-ci une chaîne de caractère qui est équivalente à un slug et là c'est le caspuisqu'on a create et create ça pourrait être le titre d'un article et donc en fait ce chemind'URL va être récupéré par create ici et nous en fait ce qu'on veut c'est accéder à cette vue
00:03:37 :ici cette vue create donc il va falloir la placer avant avant la vue du slug donc je vais la déplacercomme ceci la mettre avant le slug et dans ce cas-ci donc quand Django va essayer de correspondrele chemin d'URL ici avec les vues il va d'abord tomber sur create donc là on a create qui va
00:03:53 :correspondre avec create il va dire d'accord je vous affiche la vue pour créer un article et siaprès on a quelque chose d'autre et bien il va essayer de le matcher avec autre chose que createdonc avec un slug qui correspondrait à un article. Donc là si j'actualise vous voyez que cette fois
00:04:05 :ci on arrive bien à la vue pour ajouter un article et si je reviens sur l'accueil là je reviens bienà l'accueil je vais essayer de me déconnecter pour voir si la vérification qu'on a faite icifonctionne bien donc je vais me déconnecter à partir de l'administration je vais cliquer sur
00:04:18 :déconnexion ici je reviens sur la page d'accueil j'actualise et là j'ai bien donc déjà les articlesnon publiés qui ont disparu et également le bouton ajouter un article qui n'est maintenant plusprésent. Cependant actuellement on a enlevé le lien mais on peut toujours accéder à cette vue si
00:04:33 :on connaît l'URL donc si je mets create ici je peux accéder à cette vue qui me permet d'ajouterun article et pour l'instant on n'a mis aucune vérification qui empêcherait quelqu'un quiconnaît l'URL et qui accède à cette page de créer un article donc c'est vraiment pas une bonne façon
00:04:46 :de faire ici ce qu'il faudrait c'est restreindre cette vue également pour qu'elle ne puisse pasêtre affichée même si on connaît l'URL à quelqu'un qui n'est pas logué sur notre site. Pour ça on
00:04:55 :peut utiliser un décorateur qui s'appelle login required et alors là il y a plusieurs façons defaire on peut aller le faire directement dans les URL donc je vais juste faire un petit peu de placeavant pour qu'on voit un peu mieux donc ici dans mon URL je pourrais importer depuis django.contrib.hot.decorators
00:05:07 :le décorateur login required et donc ce décorateur dans ce cas-ci on pourraitl'utiliser directement sur notre chemin donc dans create on va encadrer notre vue donc blogpostcreate as view on va l'encadrer de login required donc je la mets ici et j'entoure ma vue et maintenantsi je reviens sur mon site et que j'actualise vous voyez que cette fois-ci on a un page not
00:05:30 :found donc une erreur 404 et donc quelqu'un qui n'est pas connecté sur le site ne peut pas accéderà cette page donc c'est exactement ce qu'on veut ici et on va vérifier quand même que si on estconnecté on y a bien accès donc je me reconnecte avec l'interface d'administration je reviens ici
00:05:42 :je vais retourner donc sur blog slash create et là j'ai bien accès à cette interface donc ça c'estla première façon de faire il y a une autre façon de faire c'est de le faire directement à partir dela vue donc cette fois-ci avec le même décorateur mais on va mettre une façon un petit peu différente
00:05:57 :donc je vais retourner dans la vue et au dessus de blog post create ici on va remettre notredécorateur sauf que cette fois ci on veut le mettre donc directement au dessus de la classeet pour ça on va utiliser méthode decorator on va dire qu'on veut utiliser donc ce même
00:06:11 :décorateur login required et on va dire sur quelle méthode on souhaite le mettre donc là on va mettrename égale à dispatch et dispatch en fait c'est la méthode donc une méthode ici qui est définiedans create view que l'on pourrait surcharger ici mais qu'on n'a pas besoin de surcharger dans ce
00:06:26 :cas ci mais elle est définie à l'intérieur de create view et c'est cette méthode qui va en faitretourner le fichier html donc la réponse en fait que l'on attend quand on va accéder à cette urldonc avant de retourner cette réponse on va décorer donc cette méthode dispatch de login required et
00:06:42 :donc ça va faire exactement la même chose que ce qu'on avait fait directement dans le fichierd'url donc là bien sûr il faut importer ce décorateur et cette fonction ici à l'intérieurde notre fichier donc tout en haut ici on va refaire donc from django.contrib.hot.decorators
00:06:56 :import login required et on va également importer depuis django.utils.decorators leméthode decorator donc une fois qu'on a apporté tout ça vous voyez que maintenant on n'a plusles erreurs qui étaient indiquées et on va avoir donc le même comportement si j'essaie d'accéderà ma vue actuellement ça devrait fonctionner donc là effectivement ça fonctionne parce que
00:07:16 :je suis connecté et si je me déconnecte et que j'essaie d'accéder de nouveau à la vue on aencore le page not found donc l'erreur 404. Donc voilà comment restreindre la vue à un
00:07:26 :utilisateur qui est connecté donc je vais juste me reconnecter avant pour pouvoir accéder à cettevue et on va continuer donc sur notre page donc je vais revenir ici sur la page du blog on vacontinuer d'ajouter quelques liens puisque pour l'instant on peut accéder à cette page ajouter
00:07:40 :un article mais moi ce que j'aimerais bien également c'est pouvoir accéder à un articleen particulier et également accéder à la page d'édition et de suppression. Donc tout ça je
00:07:48 :vais l'ajouter directement dans la page qui m'affiche ici l'accueil donc on va aller dansles templates on va afficher blog post list qui est le template qui me permet d'afficher toutesles listes d'articles ici et on va rajouter après le titre de l'article donc après le titre ici le
00:08:03 :h2 on va rajouter tout ce code ici donc là encore je le colle au complet pour ne pas tout écriredevant vous puisqu'il y a pas mal de choses à écrire mais je vais vous expliquer ce qui sepasse donc on a tout simplement un div qui va englober deux liens et ces deux liens ne seront
00:08:15 :affichés que si on a un utilisateur qui est connecté d'ailleurs je pourrais mettre ce ifici puisque si l'utilisateur n'est pas connecté on n'a même pas besoin d'afficher ce div puisqueici les deux liens vont être disponibles que si l'utilisateur est connecté donc le liend'édition et de suppression et là encore je ne vais pas le refaire mais vous pouvez mettre ces
00:08:31 :mêmes décorateurs qu'on a mis donc le décorateur logging required sur les autres vues pour lesrestreindre aux utilisateurs connectés. Donc là si j'actualise qu'est ce que j'ai j'ai un bouton
00:08:39 :éditer et un bouton supprimer et vers quoi ils vont rediriger vers ma vue de post-edit on passeici le slug de l'article donc c'est bien important puisque dans notre url si je reviens ici dansl'url d'édition et de suppression on a le slug qui doit être passé puisque Django doit savoir
00:08:55 :quel article éditer et quel article supprimer donc ici il est bien important de spécifier leslug donc on met slug égale post.slug donc post puisque ici c'est l'objet qui représente
00:09:05 :l'article sur lequel on boucle à l'intérieur de notre boucle ici. Donc tout simplement deuxliens ici avec url post-edit post-delete et le slug de l'article donc si je clique sur éditer ici jeme retrouve bien sur la page d'édition de l'article en question pareil avec celui ci doncça fonctionne et si je le supprime donc si je clique sur supprimer ici on me demande si je
00:09:22 :souhaite supprimer l'article donc on va en supprimer un pour vérifier que ça fonctionne toujours bienje clique sur oui supprimer et on revient bien ici au niveau de la page d'accueil. Pour finir on va
00:09:32 :rajouter un dernier lien qui va nous permettre d'accéder à l'article donc pour ça je vaisrajouter un bouton et je vais l'entourer d'un formulaire donc à la fin ici après le contenuje rajoute un formulaire avec comme action l'url vers le post en question donc là on revient sur
00:09:47 :notre fichier url on a ce name post ici qui correspond à la vue d'un article avec blocpost detail donc je vais utiliser cette url post-post donc ça c'est l'espace de nommage etça c'est le nom de l'url là encore on passe le slug et on a un bouton tout simplement qui va
00:10:02 :dire lire l'article donc si j'actualise ici j'ai bien un bouton et si je clique sur lire l'articlelà vous allez voir qu'on accède bien à l'article en question je vais essayer avec un autre donc lepremier article ici je clique sur lire l'article et là j'ai bien le contenu de l'article qui est
00:10:15 :affiché je vais juste agrandir un petit peu la fenêtre ici et si on veut revenir à l'accueildonc on peut cliquer ici sur accueil on a tous nos articles on clique sur éditer pour l'éditeron revient à l'accueil on ajoute un article donc tout ça fonctionne correctement je vais essayer de
00:10:27 :me déconnecter pour voir si on a bien la vue pour les visiteurs donc là on a uniquement lesarticles qui sont publiés on peut les lire donc en cliquant sur lire l'article on n'a pas accèsau bouton éditer et supprimer on n'a pas non plus accès au bouton pour ajouter un article donc c'est
00:10:41 :parfait on peut tout simplement visiter le blog et lire le contenu sans avoir toutes ces optionspour ajouter éditer ou supprimer des articles donc là encore n'oubliez pas si vous le souhaitez derajouter ce décorateur sur les autres vues pour les restreindre même pour les gens qui accéderaientà ces vues directement via l'url donc voilà pour cette partie dans laquelle on a terminé notre
00:11:00 :blog donc on a mis un peu de glu entre tout ça on a rajouté des boutons mais vous voyez vraimentque la logique principalement se fait au niveau de nos vues donc dans les fichiers views ici onrécupère tout ce qu'il faut et c'est vraiment Django qui fait énormément de travail pour nous
00:11:13 :après c'est vraiment juste du html principalement pour afficher les différents éléments dont on abesoin et quelques balises comme ici par exemple la balise pour les boucles ou les balises pourfaire des conditions ainsi que les balises url ici très pratique puisque puisque maintenant sije souhaite modifier une url donc si par exemple ici à la place de edit je veux mettre modifier
00:11:32 :et bien ça ne va rien casser dans mon interface si je reviens ici et que je me connecte donc jevais rentrer mon utilisateur et que j'actualise ma page d'accueil je clique sur éditer j'arrivebien sur la page d'édition même si l'url a été modifié vous voyez que là on a bien modifié qui
00:11:46 :est utilisé donc ça c'est vraiment parce que à chaque fois dans toutes mes résolutions dechemin d'url j'ai utilisé cette balise url avec le nom de l'url donc l'espace de nommage et lenom de l'url et django va automatiquement remplacer donc l'url par rapport à ce qu'on amis dans le fichier url ici donc ça c'est vraiment très important très pratique également pour
Ce n'est pas fini...
✋
Tu as complété % du parcours 🔥
Termine l'intégralité de la formation pour pouvoir débloquer ton attestation de réussite.