{"id":37819,"date":"2025-01-25T18:53:13","date_gmt":"2025-01-25T18:53:13","guid":{"rendered":"\/tutoriels\/?p=37819"},"modified":"2025-01-25T18:53:17","modified_gmt":"2025-01-25T18:53:17","slug":"tutoriel-django","status":"publish","type":"post","link":"\/fr\/tutoriels\/tutoriel-django","title":{"rendered":"Tutoriel Django : comprendre les fondamentaux du framework Django"},"content":{"rendered":"<p>Django est un framework web Python de haut niveau utilis&eacute; pour un d&eacute;veloppement rapide et une conception propre et pragmatique. Il simplifie de nombreuses t&acirc;ches de d&eacute;veloppement web, vous permettant de vous concentrer sur l&rsquo;&eacute;criture de votre application sans avoir &agrave; r&eacute;inventer la roue.<\/p><p>Cela en fait l&rsquo;un des frameworks web les plus populaires et les plus utilis&eacute;s pour la cr&eacute;ation de sites web et d&rsquo;applications dynamiques et bas&eacute;es sur les donn&eacute;es.<\/p><p>Dans ce tutoriel, nous vous pr&eacute;senterons les principes fondamentaux de Django et vous fournirons une base solide pour construire votre premi&egrave;re application web. Nous aborderons tout, de la configuration d&rsquo;un VPS et de l&rsquo;installation de Python au d&eacute;ploiement de votre projet Django.<\/p><p>&Agrave; la fin de ce tutoriel, vous aurez une application web enti&egrave;rement fonctionnelle et une solide compr&eacute;hension de la fa&ccedil;on de poursuivre le d&eacute;veloppement de vos propres projets &agrave; l&rsquo;aide de Django. Que vous soyez novice en d&eacute;veloppement web ou que vous souhaitiez d&eacute;velopper vos comp&eacute;tences, ce tutoriel Django vous aidera &agrave; ma&icirc;triser les bases.<\/p><h2 class=\"wp-block-heading\" id=\"h-installation-du-framework-django\">Installation du framework Django<\/h2><p>Avant de vous plonger dans la construction de votre application Django, vous devez mettre en place votre environnement de d&eacute;veloppement. Ce processus comprend la mise en place d&rsquo;un VPS, l&rsquo;installation de Python, la cr&eacute;ation d&rsquo;un environnement virtuel et l&rsquo;installation de Django.<\/p><h3 class=\"wp-block-heading\" id=\"h-conditions-prealables\">Conditions pr&eacute;alables<\/h3><p>Avant de commencer &agrave; travailler avec Django, il est important d&rsquo;avoir une compr&eacute;hension de base de certains concepts. Voici ce que vous devez conna&icirc;tre :<\/p><ul class=\"wp-block-list\">\n<li><strong>Connaissance de base de Python <\/strong>: Une bonne ma&icirc;trise des fondamentaux de Python &ndash; types de donn&eacute;es, structures de contr&ocirc;le, fonctions, classes, modules.<\/li>\n\n\n\n<li><strong>Bases de HTML, CSS et JavaScript<\/strong> : Connaissances de base en HTML, CSS et JavaScript.<\/li>\n\n\n\n<li><strong>Compr&eacute;hension des bases de donn&eacute;es<\/strong> : Concepts des bases de donn&eacute;es &ndash; tables, enregistrements, cl&eacute;s primaires, cl&eacute;s &eacute;trang&egrave;res. Des connaissances en SQL sont un plus.<\/li>\n\n\n\n<li><strong>Familiarit&eacute; avec l&rsquo;interface en ligne de commande (CLI)<\/strong> : Connaissance de base des <a href=\"https:\/\/www.hostinger.com\/fr\/tutoriels\/commandes-linux\">commandes Linux essentielles<\/a>.<\/li>\n<\/ul><p>Avec ces pr&eacute;requis, vous serez bien pr&eacute;par&eacute; pour comprendre et suivre les &eacute;tapes n&eacute;cessaires &agrave; l&rsquo;installation de Django et &agrave; la cr&eacute;ation de vos applications web.<\/p><h3 class=\"wp-block-heading\" id=\"h-obtenir-un-vps-django\">Obtenir un VPS Django<\/h3><p>Le choix d&rsquo;un environnement d&rsquo;h&eacute;bergement appropri&eacute; est crucial pour le bon fonctionnement de votre application Django. Un serveur priv&eacute; virtuel (VPS) offre plus de contr&ocirc;le, d&rsquo;&eacute;volutivit&eacute; et de ressources que l&rsquo;h&eacute;bergement mutualis&eacute;, ce qui le rend id&eacute;al pour les projets Django. L&rsquo;<a href=\"https:\/\/www.hostinger.com\/fr\/vps\/hebergement-django\">h&eacute;bergement VPS Django d&rsquo;Hostinger<\/a> est un excellent choix, offrant des plans abordables ainsi que des serveurs faciles &agrave; configurer et &agrave; g&eacute;rer.<\/p><p>Lorsque vous choisissez un plan VPS chez Hostinger, tenez compte des besoins de votre projet :<\/p><ul class=\"wp-block-list\">\n<li><strong>CPU et RAM <\/strong>: Un CPU plus rapide et une RAM plus importante permettent d&rsquo;am&eacute;liorer les performances, en particulier pour les applications plus complexes ou les volumes de trafic plus importants.<\/li>\n\n\n\n<li><strong>Stockage <\/strong>: Les applications Django travaillent souvent avec des bases de donn&eacute;es et des fichiers statiques. Assurez-vous que votre VPS dispose de suffisamment de stockage SSD pour vos besoins.<\/li>\n\n\n\n<li><strong>Bande passante <\/strong>: En fonction du trafic attendu, choisissez un plan avec suffisamment de bande passante pour accueillir vos visiteurs sans ralentissement.<\/li>\n<\/ul><p>Pour un projet Django de base, un plan VPS de niveau inf&eacute;rieur comme <strong>KVM 1 <\/strong>ou <strong>KVM 2 <\/strong>devrait &ecirc;tre suffisant, mais au fur et &agrave; mesure que votre projet grandit, vous pouvez facilement passer &agrave; des options de niveau sup&eacute;rieur pour plus de ressources.<\/p><figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.hostinger.com\/fr\/vps\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" width=\"1024\" height=\"300\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2022\/12\/FR-VPS-hosting_in-text-banner-1024x300-1.png\/public\" alt=\"\" class=\"wp-image-41471\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2022\/12\/FR-VPS-hosting_in-text-banner-1024x300-1.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2022\/12\/FR-VPS-hosting_in-text-banner-1024x300-1.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2022\/12\/FR-VPS-hosting_in-text-banner-1024x300-1.png\/w=150,fit=scale-down 150w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2022\/12\/FR-VPS-hosting_in-text-banner-1024x300-1.png\/w=768,fit=scale-down 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure><p>Une fois que vous avez choisi un plan VPS et effectu&eacute; l&rsquo;achat, suivez les &eacute;tapes suivantes pour configurer le serveur :<\/p><ol class=\"wp-block-list\">\n<li><strong>D&eacute;marrez l&rsquo;installation du VPS <\/strong>: Connectez-vous &agrave; <a href=\"https:\/\/hpanel.hostinger.com\/\" target=\"_blank\" rel=\"noopener\">hPanel<\/a> &ndash; sur la page d<strong>&lsquo;accueil<\/strong>, vous verrez une configuration VPS en attente.<\/li>\n<\/ol><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"69f636b4beb8a\"}' data-wp-interactive=\"core\/image\" class=\"aligncenter size-full wp-lightbox-container\"><img decoding=\"async\" width=\"1024\" height=\"126\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/obtenir_un_vps_django.png\/public\" alt=\"la configuration en attente pour le plan VPS KVM2\" class=\"wp-image-37874\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/obtenir_un_vps_django.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/obtenir_un_vps_django.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/obtenir_un_vps_django.png\/w=150,fit=scale-down 150w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/obtenir_un_vps_django.png\/w=768,fit=scale-down 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Agrandir\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p>Cliquez sur <strong>Configuration <\/strong>et <strong>Commencer maintenant <\/strong>dans la fen&ecirc;tre suivante.<\/p><ol start=\"2\" class=\"wp-block-list\">\n<li><strong>Choisissez un emplacement pour votre VPS <\/strong>: r&eacute;fl&eacute;chissez &agrave; la r&eacute;gion d&rsquo;o&ugrave; vous attendez du trafic. La r&eacute;gion o&ugrave; la latence est la plus faible ne sera pas n&eacute;cessairement la meilleure pour votre application si le trafic attendu provient d&rsquo;Australie alors que vous &ecirc;tes situ&eacute; en Europe.<\/li>\n<\/ol><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"69f636b4bf49b\"}' data-wp-interactive=\"core\/image\" class=\"aligncenter size-full wp-lightbox-container\"><img decoding=\"async\" width=\"515\" height=\"311\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/get_a_django_vps_3.png\/public\" alt=\"s&eacute;lecteur d'emplacement du VPS Hostinger\" class=\"wp-image-37875\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/get_a_django_vps_3.png\/w=515,fit=scale-down 515w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/get_a_django_vps_3.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/get_a_django_vps_3.png\/w=150,fit=scale-down 150w\" sizes=\"(max-width: 515px) 100vw, 515px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Agrandir\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><ol start=\"3\" class=\"wp-block-list\">\n<li><strong>S&eacute;lectionnez le template de syst&egrave;me d&rsquo;exploitation <\/strong>: Pour ce guide, vous devriez s&eacute;lectionner Plain OS Ubuntu ; cependant, Hostinger propose &eacute;galement un OS avec des options Panel et un OS avec Application stack (d&eacute;pendances logicielles pr&eacute;install&eacute;es).<br><\/li>\n\n\n\n<li><strong>Configurez les informations d&rsquo;identification de votre VPS <\/strong>: Entrez le mot de passe <strong>root <\/strong>et ajoutez une cl&eacute; SSH si vous le souhaitez. Terminez l&rsquo;installation.<br><\/li>\n\n\n\n<li><strong>Connexion via SSH <\/strong>: Utilisez un client SSH (par exemple, PuTTY pour Windows ou le terminal pour macOS\/Linux) pour vous connecter au serveur. Dans votre terminal, entrez :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">ssh root@votre_ip_vps<\/pre><p>Remplacez votre_ip_vps par l&rsquo;adresse IP du VPS de Hostinger. Vous serez invit&eacute; &agrave; entrer votre mot de passe root.<\/p><ol start=\"6\" class=\"wp-block-list\">\n<li><strong>Mettez &agrave; jour le serveur <\/strong>: Il est important de s&rsquo;assurer que votre serveur est &agrave; jour. Ex&eacute;cutez la commande suivante pour mettre &agrave; jour les paquets du syst&egrave;me :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">apt update &amp;&amp; apt upgrade -y<\/pre><p>Le VPS &eacute;tant pr&ecirc;t, vous pouvez maintenant installer Python et les autres d&eacute;pendances n&eacute;cessaires au d&eacute;veloppement de Django.<\/p><h3 class=\"wp-block-heading\" id=\"h-installer-python\">Installer Python<\/h3><p>Pour faire fonctionner Django, vous devez <a href=\"https:\/\/www.hostinger.com\/fr\/tutoriels\/installer-pip-sur-ubuntu\">installer Python et pip sur votre VPS<\/a>. La plupart des distributions Linux modernes, comme Ubuntu, sont livr&eacute;es avec Python pr&eacute;install&eacute;.&nbsp;<\/p><p>Si vous ne l&rsquo;avez pas install&eacute; ou si vous devez le mettre &agrave; jour, vous pouvez le faire facilement. Utilisez les commandes suivantes pour v&eacute;rifier la version actuelle de Python et installer la derni&egrave;re version de Python 3 :<\/p><ol class=\"wp-block-list\">\n<li>V&eacute;rifier si Python est install&eacute; :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">python3 --version<\/pre><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"69f636b4bff81\"}' data-wp-interactive=\"core\/image\" class=\"aligncenter size-full wp-lightbox-container\"><img decoding=\"async\" width=\"207\" height=\"42\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/install_python.png\/public\" alt=\"Fen&ecirc;tre du terminal, affichant la commande &laquo; python --version &raquo;\" class=\"wp-image-37876\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/install_python.png\/w=207,fit=scale-down 207w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/install_python.png\/w=150,fit=scale-down 150w\" sizes=\"(max-width: 207px) 100vw, 207px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Agrandir\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p>Si votre interface de ligne de commande renvoie le num&eacute;ro de version de Python, le langage de programmation est d&eacute;j&agrave; install&eacute;. Dans ce cas, il suffit d&rsquo;installer pip :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">apt install python3-pip<\/pre><ol start=\"2\" class=\"wp-block-list\">\n<li>Installer Python et pip (si n&eacute;cessaire) :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">apt install python3 python3-pip -y<\/pre><p>Une fois Python install&eacute;, vous &ecirc;tes pr&ecirc;t &agrave; mettre en place un environnement virtuel.<\/p><h3 class=\"wp-block-heading\" id=\"h-mise-en-place-d-un-environnement-virtuel\">Mise en place d&rsquo;un environnement virtuel<\/h3><p>Un environnement virtuel est un espace isol&eacute; dans lequel vous pouvez installer des paquets Python et des d&eacute;pendances pour un projet sp&eacute;cifique. Cette m&eacute;thode n&rsquo;affecte pas l&rsquo;environnement Python du syst&egrave;me ni les autres projets.&nbsp;<\/p><p>Ceci est crucial lorsque l&rsquo;on travaille avec Django, car diff&eacute;rents projets peuvent n&eacute;cessiter diff&eacute;rentes versions de paquets. Un environnement virtuel permet de s&rsquo;assurer que les d&eacute;pendances de chaque projet sont bien contenues et n&rsquo;entrent pas en conflit avec d&rsquo;autres.<\/p><p>Pourquoi utiliser un environnement virtuel :<\/p><ul class=\"wp-block-list\">\n<li><strong>Isolation <\/strong>: Les d&eacute;pendances de votre projet sont s&eacute;par&eacute;es des autres projets Python.<\/li>\n\n\n\n<li><strong>Contr&ocirc;le de version <\/strong>: Vous pouvez installer diff&eacute;rentes versions de paquets dans chaque espace de travail virtuel, ce qui permet d&rsquo;&eacute;viter les conflits entre les projets.<\/li>\n\n\n\n<li><strong>Environnement plus propre <\/strong>: Il vous permet d&rsquo;exp&eacute;rimenter avec des paquets sans affecter l&rsquo;environnement global de Python sur votre serveur.<\/li>\n<\/ul><p>Suivez les &eacute;tapes suivantes pour configurer un environnement virtuel sur votre VPS :<\/p><ol class=\"wp-block-list\">\n<li>Installez le paquetage <strong>venv <\/strong>(s&rsquo;il n&rsquo;est pas d&eacute;j&agrave; install&eacute;) :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">apt install python3-venv -y<\/pre><ol start=\"2\" class=\"wp-block-list\">\n<li>Cr&eacute;ez et naviguez jusqu&rsquo;au r&eacute;pertoire dans lequel vous souhaitez stocker votre projet Django et cr&eacute;ez un environnement virtuel :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">mkdir myprojectcd myproject<\/pre><p>Remplacez <strong>myproject <\/strong>par le nom que vous souhaitez donner &agrave; votre dossier de projet.<\/p><ol start=\"3\" class=\"wp-block-list\">\n<li>Cr&eacute;er un environnement virtuel &agrave; l&rsquo;aide de <strong>venv <\/strong>:<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">python3 -m venv env_name<\/pre><ol start=\"4\" class=\"wp-block-list\">\n<li>Activer l&rsquo;environnement virtuel :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">source env_name\/bin\/activate<\/pre><p>Une fois activ&eacute;e, l&rsquo;invite de l&rsquo;interpr&eacute;teur de commandes change pour refl&eacute;ter l&rsquo;environnement (par exemple, <strong>(nom_env<\/strong>)), indiquant que vous travaillez dans votre environnement virtuel.<\/p><p>Cette configuration garantit que toutes les d&eacute;pendances li&eacute;es &agrave; Django sont isol&eacute;es dans l&rsquo;environnement virtuel, ce qui permet &agrave; votre serveur de rester propre et organis&eacute;.<\/p><h3 class=\"wp-block-heading\" id=\"h-installer-django\">Installer Django<\/h3><p>Une fois votre environnement virtuel mis en place, l&rsquo;&eacute;tape suivante consiste &agrave; installer le framework web lui-m&ecirc;me, ce que vous pouvez faire &agrave; l&rsquo;aide du gestionnaire de paquets de Python, <strong>pip<\/strong>. L&rsquo;installation de Django dans votre environnement virtuel permet de l&rsquo;isoler des autres projets et de le g&eacute;rer ind&eacute;pendamment.<\/p><p>Pour installer Django, suivez les &eacute;tapes suivantes :<\/p><ol class=\"wp-block-list\">\n<li>Une fois votre environnement virtuel activ&eacute;, utilisez pip pour installer la derni&egrave;re version de Django :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">pip install django<\/pre><p>Cela permet de t&eacute;l&eacute;charger et d&rsquo;installer toutes les d&eacute;pendances et le framework web Django dans l&rsquo;environnement virtuel.<\/p><ol start=\"2\" class=\"wp-block-list\">\n<li>Utilisez la commande suivante pour confirmer que Django est install&eacute; et pour v&eacute;rifier la version :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">django-admin --version<\/pre><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"69f636b4c0fe4\"}' data-wp-interactive=\"core\/image\" class=\"aligncenter size-full wp-lightbox-container\"><img decoding=\"async\" width=\"257\" height=\"39\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/install_django_1.png\/public\" alt=\"fen&ecirc;tre du terminal, affichant la commande &laquo; django-admin --version &raquo; \" class=\"wp-image-37877\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/install_django_1.png\/w=257,fit=scale-down 257w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/install_django_1.png\/w=150,fit=scale-down 150w\" sizes=\"(max-width: 257px) 100vw, 257px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Agrandir\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p>Vous obtiendrez ainsi la version de Django actuellement install&eacute;e dans votre environnement, ce qui confirme que l&rsquo;installation s&rsquo;est d&eacute;roul&eacute;e avec succ&egrave;s.<\/p><p>Avec votre VPS pr&eacute;par&eacute; pour l&rsquo;h&eacute;bergement Django, vous pouvez commencer &agrave; construire votre application.<\/p><h2 class=\"wp-block-heading\" id=\"h-creation-d-un-nouveau-projet-django\">Cr&eacute;ation d&rsquo;un nouveau projet Django<\/h2><p>Il est temps de cr&eacute;er votre premi&egrave;re application Django. Dans cette section, vous &eacute;tablirez la base de code n&eacute;cessaire pour commencer &agrave; d&eacute;velopper votre site web.<\/p><p>Cr&eacute;ons un nouveau projet Django :<\/p><ol class=\"wp-block-list\">\n<li><strong>Naviguez jusqu&rsquo;au r&eacute;pertoire de votre projet <\/strong>: Si vous ne vous trouvez pas d&eacute;j&agrave; dans le r&eacute;pertoire o&ugrave; vous souhaitez cr&eacute;er le projet, utilisez la commande <strong>cd <\/strong>pour vous y rendre.<\/li>\n\n\n\n<li><strong>Ex&eacute;cutez la commande startproject <\/strong>: Utilisez la commande <strong>startproject <\/strong>de Django pour cr&eacute;er un nouveau projet. Remplacez <strong>myproject <\/strong>par le nom de votre projet :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">django-admin startproject myproject<\/pre><p>Cela cr&eacute;era un nouveau r&eacute;pertoire nomm&eacute; <strong>myproject <\/strong>contenant la structure du projet par d&eacute;faut.<\/p><ol start=\"3\" class=\"wp-block-list\">\n<li>Ensuite, naviguez jusqu&rsquo;au dossier interne de votre projet :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">cd myproject\/myproject<\/pre><ol start=\"4\" class=\"wp-block-list\">\n<li><strong>Ajoutez l&rsquo;IP de votre serveur &agrave; ALLOWED_HOSTS <\/strong>: Utilisez l&rsquo;un des &eacute;diteurs de texte par d&eacute;faut d&rsquo;Ubuntu (<strong>nano <\/strong>ou <strong>vim<\/strong>) et ouvrez le fichier <strong>settings.py :<\/strong><\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">vim settings.py<\/pre><p>Localisez le param&egrave;tre <strong>ALLOWED_HOSTS <\/strong>et modifiez-le pour ajouter l&rsquo;IP de votre VPS comme suit :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">ALLOWED_HOSTS = ['votre_ip_vps']<\/pre><p>Remplacez <strong>votre_ip_vps <\/strong>par l&rsquo;IP r&eacute;elle de votre VPS dans la console Hostinger.<\/p><ol start=\"5\" class=\"wp-block-list\">\n<li><strong>D&eacute;marrez le serveur de d&eacute;veloppement <\/strong>: Pour v&eacute;rifier que tout est correctement configur&eacute;, vous pouvez d&eacute;marrer le serveur de d&eacute;veloppement de Django. Retournez dans la cat&eacute;gorie du projet parent et ex&eacute;cutez <strong>runserver <\/strong>:<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">python manage.py runserver 0.0.0.0:8000<\/pre><p>Maintenant, ouvrez votre navigateur et allez sur <a href=\"http:\/\/your_vps_ip:8000\/\"><strong>http:\/\/votre_ip_vps:8000\/<\/strong><\/a><strong> <\/strong>&ndash; remplacez <strong>votre_ip_vps <\/strong>par l&rsquo;IP de votre VPS. Si tout a &eacute;t&eacute; fait correctement, vous devriez voir la page de bienvenue de Django :<\/p><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"69f636b4c1cfe\"}' data-wp-interactive=\"core\/image\" class=\"aligncenter size-full wp-lightbox-container\"><img decoding=\"async\" width=\"521\" height=\"355\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/install_django_2.png\/public\" alt=\"la page web d'installation r&eacute;ussie de Django\" class=\"wp-image-37878\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/install_django_2.png\/w=521,fit=scale-down 521w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/install_django_2.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/install_django_2.png\/w=150,fit=scale-down 150w\" sizes=\"(max-width: 521px) 100vw, 521px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Agrandir\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p>Si vous avez suivi ces &eacute;tapes, vous avez construit et ex&eacute;cut&eacute; avec succ&egrave;s un projet Django par d&eacute;faut sur votre VPS. Le reste de ce tutoriel Django va plus loin dans le d&eacute;veloppement de l&rsquo;application et la compr&eacute;hension de Django en g&eacute;n&eacute;ral.<\/p><h3 class=\"wp-block-heading\" id=\"h-comprendre-la-structure-du-projet-django\">Comprendre la structure du projet Django<\/h3><p>L&rsquo;ex&eacute;cution de la commande <strong>startproject <\/strong>cr&eacute;e une structure de projet Django de base qui comprend plusieurs fichiers et r&eacute;pertoires cl&eacute;s. Voici une d&eacute;composition de la structure et de l&rsquo;objectif de chaque composant :<\/p><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"69f636b4c252b\"}' data-wp-interactive=\"core\/image\" class=\"aligncenter size-full wp-lightbox-container\"><img decoding=\"async\" width=\"257\" height=\"219\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/understanding_the_project_structure_1.png\/public\" alt=\"la structure du projet Django par d&eacute;faut\" class=\"wp-image-37879\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/understanding_the_project_structure_1.png\/w=257,fit=scale-down 257w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/understanding_the_project_structure_1.png\/w=150,fit=scale-down 150w\" sizes=\"(max-width: 257px) 100vw, 257px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Agrandir\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p>Chacun de ces fichiers et r&eacute;pertoires joue un r&ocirc;le sp&eacute;cifique dans votre projet Django :<\/p><ol class=\"wp-block-list\">\n<li><strong>manage.py <\/strong>:<\/li>\n<\/ol><p>Il s&rsquo;agit d&rsquo;un utilitaire en ligne de commande qui vous aide &agrave; interagir avec votre projet Django. Vous l&rsquo;utilisez pour des t&acirc;ches telles que l&rsquo;ex&eacute;cution du serveur de d&eacute;veloppement, la migration des bases de donn&eacute;es et la gestion de votre application.<br><br>Voici &agrave; quoi il ressemble :<\/p><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"69f636b4c2c42\"}' data-wp-interactive=\"core\/image\" class=\"aligncenter size-full wp-lightbox-container\"><img decoding=\"async\" width=\"678\" height=\"442\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/comprendre-structure-projet.png\/public\" alt=\"Capture d'&eacute;cran du fichier manage.py par d&eacute;faut ouvert dans l'&eacute;diteur de code VS\" class=\"wp-image-37880\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/comprendre-structure-projet.png\/w=678,fit=scale-down 678w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/comprendre-structure-projet.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/comprendre-structure-projet.png\/w=150,fit=scale-down 150w\" sizes=\"(max-width: 678px) 100vw, 678px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Agrandir\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p>Voici ses principales fonctions :<\/p><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"69f636b4c3311\"}' data-wp-interactive=\"core\/image\" class=\"aligncenter size-full wp-lightbox-container\"><img decoding=\"async\" width=\"590\" height=\"22\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/structure-projet-django.png\/public\" alt=\"Capture d'&eacute;cran d'une fonction principale de manage.py\" class=\"wp-image-37881\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/structure-projet-django.png\/w=590,fit=scale-down 590w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/structure-projet-django.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/structure-projet-django.png\/w=150,fit=scale-down 150w\" sizes=\"(max-width: 590px) 100vw, 590px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Agrandir\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p>D&eacute;finit la variable d&rsquo;environnement pour indiquer &agrave; Django le fichier de configuration &agrave; utiliser.<\/p><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"69f636b4c3a41\"}' data-wp-interactive=\"core\/image\" class=\"aligncenter size-full wp-lightbox-container\"><img decoding=\"async\" width=\"301\" height=\"18\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/execute-from-command-line.png\/public\" alt=\"Capture d'&eacute;cran de la fonction execute de manage.py\" class=\"wp-image-37882\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/execute-from-command-line.png\/w=301,fit=scale-down 301w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/execute-from-command-line.png\/w=150,fit=scale-down 150w\" sizes=\"(max-width: 301px) 100vw, 301px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Agrandir\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p>Ex&eacute;cute diverses commandes Django telles que <strong>runserver<\/strong>, <strong>migrate <\/strong>et autres.<\/p><ol start=\"2\" class=\"wp-block-list\">\n<li><strong>myproject\/ :<\/strong><\/li>\n<\/ol><p>Le r&eacute;pertoire interne du projet qui contient les param&egrave;tres de base, les configurations et d&rsquo;autres fichiers par d&eacute;faut pour un projet Django.<\/p><ol start=\"3\" class=\"wp-block-list\">\n<li><strong>__init__.py :<\/strong><\/li>\n<\/ol><p>Ce fichier marque le r&eacute;pertoire comme un paquetage Python, permettant au code d&rsquo;&ecirc;tre import&eacute; comme un module dans Python. Il est vide par d&eacute;faut.<\/p><ol start=\"4\" class=\"wp-block-list\">\n<li><strong>settings.py :<\/strong><\/li>\n<\/ol><p>Il s&rsquo;agit de l&rsquo;un des fichiers les plus importants de Django. Il contient tous les param&egrave;tres de configuration de votre projet, y compris les configurations de base de donn&eacute;es, les applications install&eacute;es, les intergiciels et les param&egrave;tres des fichiers statiques.<\/p><ol start=\"5\" class=\"wp-block-list\">\n<li><strong>urls.py :<\/strong><\/li>\n<\/ol><p>Ce fichier d&eacute;finit les routes URL pour votre application. Il associe les URL aux vues qui traitent les demandes et renvoient les r&eacute;ponses.<\/p><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"69f636b4c451c\"}' data-wp-interactive=\"core\/image\" class=\"aligncenter size-full wp-lightbox-container\"><img decoding=\"async\" width=\"365\" height=\"135\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/comprendre-structure_du_projet.png\/public\" alt=\"Capture d'&eacute;cran de la structure d'un fichier urls.py par d&eacute;faut\" class=\"wp-image-37883\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/comprendre-structure_du_projet.png\/w=365,fit=scale-down 365w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/comprendre-structure_du_projet.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/comprendre-structure_du_projet.png\/w=150,fit=scale-down 150w\" sizes=\"(max-width: 365px) 100vw, 365px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Agrandir\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p>Au fur et &agrave; mesure que vous ajouterez des fonctionnalit&eacute;s &agrave; votre application, vous &eacute;tendrez <strong>urlpatterns <\/strong>pour inclure les routes de vos propres vues.<\/p><ol start=\"6\" class=\"wp-block-list\">\n<li><strong>asgi.py :<\/strong><\/li>\n<\/ol><p>Ce fichier fournit un point d&rsquo;entr&eacute;e aux serveurs web compatibles ASGI pour servir votre projet. ASGI (Asynchronous Server Gateway Interface) est la norme pour les applications asynchrones de Django.<\/p><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"69f636b4c4c3f\"}' data-wp-interactive=\"core\/image\" class=\"aligncenter size-full wp-lightbox-container\"><img decoding=\"async\" width=\"645\" height=\"154\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/comprendre-structure-projet-3.png\/public\" alt=\"la structure par d&eacute;faut du fichier asgi.py\" class=\"wp-image-37884\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/comprendre-structure-projet-3.png\/w=645,fit=scale-down 645w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/comprendre-structure-projet-3.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/comprendre-structure-projet-3.png\/w=150,fit=scale-down 150w\" sizes=\"(max-width: 645px) 100vw, 645px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Agrandir\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><ol start=\"7\" class=\"wp-block-list\">\n<li><strong>wsgi.py :<\/strong><\/li>\n<\/ol><p>Ce fichier est le point d&rsquo;entr&eacute;e pour les serveurs web compatibles WSGI tels que Gunicorn ou uWSGI pour servir votre projet dans un environnement de production.<\/p><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"69f636b4c53c9\"}' data-wp-interactive=\"core\/image\" class=\"aligncenter size-full wp-lightbox-container\"><img decoding=\"async\" width=\"647\" height=\"152\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/structure_projet_7.png\/public\" alt=\"Structure du fichier wsgi.py par d&eacute;faut\" class=\"wp-image-37885\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/structure_projet_7.png\/w=647,fit=scale-down 647w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/structure_projet_7.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/01\/structure_projet_7.png\/w=150,fit=scale-down 150w\" sizes=\"(max-width: 647px) 100vw, 647px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Agrandir\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p>Comprendre le r&ocirc;le de chaque fichier et r&eacute;pertoire vous permettra de modifier les param&egrave;tres, d&rsquo;ajouter des URL et de g&eacute;rer la structure de votre projet.<\/p><h2 class=\"wp-block-heading\" id=\"h-comprendre-les-modeles-et-les-bases-de-donnees-de-django\">Comprendre les mod&egrave;les et les bases de donn&eacute;es de Django<\/h2><p>Une fois votre projet Django mis en place et op&eacute;rationnel, l&rsquo;&eacute;tape suivante consiste &agrave; se plonger dans l&rsquo;un des composants centraux de toute application web : la gestion des donn&eacute;es. Explorons comment Django g&egrave;re les mod&egrave;les et les bases de donn&eacute;es afin d&rsquo;alimenter des applications dynamiques et ax&eacute;es sur les donn&eacute;es.<\/p><h3 class=\"wp-block-heading\" id=\"h-creation-et-migration-de-modeles\">Cr&eacute;ation et migration de mod&egrave;les<\/h3><p>Dans Django, les <strong>mod&egrave;les <\/strong>d&eacute;finissent la structure des tables de votre base de donn&eacute;es. Il s&rsquo;agit de classes Python qui correspondent directement aux tables de la base de donn&eacute;es, ce qui vous permet d&rsquo;interagir avec vos donn&eacute;es de mani&egrave;re pratique. Chaque classe de mod&egrave;le repr&eacute;sente une table et chaque attribut de mod&egrave;le repr&eacute;sente un champ de la table.&nbsp;<\/p><p>Django fait abstraction du code SQL, ce qui facilite la cr&eacute;ation, la mise &agrave; jour et la gestion des bases de donn&eacute;es sans avoir &agrave; &eacute;crire des requ&ecirc;tes SQL brutes.<\/p><p><strong>Cr&eacute;ation d&rsquo;un mod&egrave;le<\/strong><\/p><p>Pour cr&eacute;er un mod&egrave;le, vous devez d&eacute;finir une classe Python dans le fichier <strong>models.py <\/strong>de l&rsquo;une de vos applications. Chaque attribut de la classe correspond &agrave; un champ de la base de donn&eacute;es et Django g&egrave;re automatiquement la structure de la base de donn&eacute;es sous-jacente.<\/p><p>Voici un exemple de mod&egrave;le simple dans Django :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Dans le fichier models.py de votre application\nfrom django.db import models\n\nclass Book(models.Model):\n    title = models.CharField(max_length=200)\n    author = models.CharField(max_length=100)\n    published_date = models.DateField()\n    isbn = models.CharField(max_length=13, unique=True)\n\n    def __str__(self):\n        return self.title<\/pre><ul class=\"wp-block-list\">\n<li><strong>title <\/strong>et <strong>author <\/strong>: Il s&rsquo;agit de champs de caract&egrave;res (<strong>CharField<\/strong>) d&rsquo;une longueur maximale.<\/li>\n\n\n\n<li><strong>published_date <\/strong>: Il s&rsquo;agit d&rsquo;un champ de date (<strong>DateField)<\/strong>.<\/li>\n\n\n\n<li><strong>isbn <\/strong>: Un champ de caract&egrave;res avec une contrainte d&rsquo;unicit&eacute;.<\/li>\n<\/ul><p>La&nbsp; m&eacute;thode <strong>__str__() <\/strong>garantit que lorsque vous demandez un livre, le titre du livre sera renvoy&eacute; sous la forme d&rsquo;une cha&icirc;ne de caract&egrave;res.<\/p><p><strong>Ajouter le mod&egrave;le &agrave; la base de donn&eacute;es<\/strong><\/p><p>Une fois que vous avez cr&eacute;&eacute; votre mod&egrave;le, Django doit le traduire en une table de base de donn&eacute;es. Cela se fait par le biais des <strong>migrations<\/strong>, qui sont des fichiers que Django utilise pour garder une trace des modifications apport&eacute;es &agrave; vos mod&egrave;les.<\/p><ol class=\"wp-block-list\">\n<li><strong>Cr&eacute;er une migration <\/strong>: Pour cr&eacute;er le fichier de migration pour votre nouveau mod&egrave;le, ex&eacute;cutez la proc&eacute;dure suivante :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">python manage.py makemigrations<\/pre><p>Django analysera les changements dans votre fichier models.py et g&eacute;n&eacute;rera un fichier de migration d&eacute;crivant ces changements dans des instructions de type SQL.<\/p><p>Vous obtiendrez un r&eacute;sultat similaire &agrave; celui-ci :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Migrations for 'myapp':\n  myapp\/migrations\/0001_initial.py\n    - Create model Book<\/pre><ol start=\"2\" class=\"wp-block-list\">\n<li><strong>Appliquer la migration <\/strong>: Apr&egrave;s avoir g&eacute;n&eacute;r&eacute; la migration, appliquez-la &agrave; la base de donn&eacute;es &agrave; l&rsquo;aide de la commande migrate :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">python manage.py migrate<\/pre><p>Cela cr&eacute;era les tables n&eacute;cessaires dans votre base de donn&eacute;es. D&eacute;sormais, le mod&egrave;le <strong>Book <\/strong>est repr&eacute;sent&eacute; par une table <strong>Book <\/strong>correspondante dans votre base de donn&eacute;es, et vous pouvez commencer &agrave; ajouter, interroger et g&eacute;rer des donn&eacute;es.<\/p><h3 class=\"wp-block-heading\" id=\"h-mise-en-place-de-la-base-de-donnees\">Mise en place de la base de donn&eacute;es<\/h3><p>Django prend en charge plusieurs bases de donn&eacute;es, ce qui vous permet de choisir celle qui convient le mieux &agrave; votre projet. La base de donn&eacute;es par d&eacute;faut de Django est <strong>SQLite<\/strong>, qui est l&eacute;g&egrave;re et facile &agrave; configurer, ce qui la rend id&eacute;ale pour le d&eacute;veloppement et les petits projets.&nbsp;<\/p><p>Cependant, pour les environnements de production, des bases de donn&eacute;es plus robustes telles que <strong>PostgreSQL<\/strong>, <strong>MySQL <\/strong>ou <strong>MariaDB <\/strong>sont recommand&eacute;es en raison de leur &eacute;volutivit&eacute; et de leurs performances.<\/p><p>Django fournit un support int&eacute;gr&eacute; pour toutes ces bases de donn&eacute;es. Commen&ccedil;ons par configurer la base de donn&eacute;es <strong>SQLite <\/strong>par d&eacute;faut.<\/p><p><strong>Configuration de la base de donn&eacute;es SQLite par d&eacute;faut<\/strong><\/p><p>Par d&eacute;faut, Django est configur&eacute; pour utiliser SQLite, qui est pr&eacute;install&eacute; avec Python, de sorte qu&rsquo;aucune configuration suppl&eacute;mentaire n&rsquo;est n&eacute;cessaire. Voici comment vous assurer que votre projet est pr&ecirc;t &agrave; utiliser SQLite :<\/p><ol class=\"wp-block-list\">\n<li>Acc&eacute;dez au fichier <strong>settings.py <\/strong>de votre projet, qui se trouve dans le dossier du projet (<strong>myproject&rarr;myproject&rarr;settings.py<\/strong>).<\/li>\n\n\n\n<li>Allez dans la section <strong>DATABASES <\/strong>de<strong> settings.py<\/strong>, o&ugrave; Django aura d&eacute;j&agrave; configur&eacute; SQLite comme base de donn&eacute;es par d&eacute;faut. Voici &agrave; quoi cela ressemble :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">DATABASES = {\n    'default': {\n        'ENGINE': 'django.db.backends.sqlite3',\n        'NAME': BASE_DIR \/ 'db.sqlite3',\n    }\n}<\/pre><ul class=\"wp-block-list\">\n<li><strong>ENGINE <\/strong>: Sp&eacute;cifie le back-end de la base de donn&eacute;es (dans ce cas, SQLite).<\/li>\n\n\n\n<li><strong>NAME <\/strong>: Le chemin d&rsquo;acc&egrave;s au fichier de base de donn&eacute;es SQLite (<strong>db.sqlite3<\/strong>). Django cr&eacute;e automatiquement ce fichier lorsque vous ex&eacute;cutez la migration initiale.<\/li>\n<\/ul><ol start=\"3\" class=\"wp-block-list\">\n<li>Apr&egrave;s avoir confirm&eacute; les param&egrave;tres de la base de donn&eacute;es, vous devez appliquer les migrations initiales pour configurer les tables par d&eacute;faut (comme les utilisateurs et les sessions). Ex&eacute;cutez la commande suivante :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">python manage.py migrate<\/pre><p>Cette commande cr&eacute;e le fichier <strong>db.sqlite3 <\/strong>&agrave; la racine du r&eacute;pertoire de votre projet et met en place toutes les tables n&eacute;cessaires &agrave; l&rsquo;ex&eacute;cution de votre application.<\/p><ol start=\"4\" class=\"wp-block-list\">\n<li>Une fois les migrations termin&eacute;es, v&eacute;rifiez que le fichier <strong>db.sqlite3 <\/strong>a &eacute;t&eacute; cr&eacute;&eacute; dans le dossier de votre projet. Ce fichier stocke votre base de donn&eacute;es localement et s&rsquo;&eacute;toffera au fur et &agrave; mesure que vous ajouterez des donn&eacute;es.<\/li>\n<\/ol><h3 class=\"wp-block-heading\" id=\"h-integration-des-bases-de-donnees\">Int&eacute;gration des bases de donn&eacute;es<\/h3><p>Une fois que vous avez configur&eacute; la base de donn&eacute;es SQLite par d&eacute;faut pour le d&eacute;veloppement, vous pouvez avoir besoin d&rsquo;int&eacute;grer un syst&egrave;me de gestion de base de donn&eacute;es (SGBD) plus robuste au fur et &agrave; mesure que votre projet grandit. Django prend en charge plusieurs SGBD, dont <strong>PostgreSQL<\/strong>, <strong>MySQL<\/strong>, <strong>MariaDB <\/strong>et <strong>Oracle<\/strong>, chacun ayant ses propres atouts et son propre processus d&rsquo;int&eacute;gration.<\/p><p>Passons en revue chacune des options :<\/p><ul class=\"wp-block-list\">\n<li><strong>SQLite <\/strong>: C&rsquo;est la base de donn&eacute;es par d&eacute;faut de Django et elle est id&eacute;ale pour le <strong>d&eacute;veloppement <\/strong>et les petits projets. Elle est l&eacute;g&egrave;re, bas&eacute;e sur des fichiers et ne n&eacute;cessite pas d&rsquo;installation au-del&agrave; de ce que Django fournit dans la bo&icirc;te. Cependant, elle n&rsquo;est pas adapt&eacute;e aux environnements de production car elle manque de fonctionnalit&eacute;s avanc&eacute;es telles que les &eacute;critures simultan&eacute;es, l&rsquo;extensibilit&eacute; et la robustesse en cas de trafic important.<br><br><strong>Installation <\/strong>: SQLite ne n&eacute;cessite aucune installation suppl&eacute;mentaire dans Django ; il est pr&ecirc;t &agrave; l&rsquo;emploi d&egrave;s sa sortie de l&rsquo;emballage.<br><br><strong>Configuration <\/strong>: Django est pr&eacute;configur&eacute; pour utiliser SQLite avec les param&egrave;tres suivants dans settings.py :<\/li>\n<\/ul><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">DATABASES = {\n    'default': {\n        'ENGINE': 'django.db.backends.sqlite3',\n        'NAME': BASE_DIR \/ 'db.sqlite3',\n    }\n}<\/pre><p>Notez que SQlite ne requiert que 2 param&egrave;tres &ndash; <strong>ENGINE <\/strong>et <strong>NAME<\/strong>.<\/p><ul class=\"wp-block-list\">\n<li><strong>PostgreSQL <\/strong>: Une base de donn&eacute;es puissante et open-source avec des fonctionnalit&eacute;s avanc&eacute;es telles que la prise en charge de requ&ecirc;tes complexes, de types de donn&eacute;es comme JSON et de la recherche en texte int&eacute;gral. Elle est fortement recommand&eacute;e pour les applications Django de<strong> production <\/strong>en<strong> <\/strong>raison de son &eacute;volutivit&eacute; et de son ensemble de fonctionnalit&eacute;s. PostgreSQL est connu pour adh&eacute;rer strictement aux normes SQL et &ecirc;tre fiable pour les applications complexes et &agrave; grande &eacute;chelle.<br><br><strong>Installation <\/strong>: PostgreSQL n&eacute;cessite l&rsquo;installation du paquetage <strong>psycopg2<\/strong>, qui agit comme un adaptateur entre Django et la base de donn&eacute;es PostgreSQL.<br><br><strong>Configuration <\/strong>: Outre les param&egrave;tres <strong>ENGINE <\/strong>et <strong>NAME <\/strong>par d&eacute;faut pour SQLite, PostgreSQL requiert &eacute;galement <strong>USER<\/strong>, <strong>PASSWORD<\/strong>, <strong>HOST <\/strong>et <strong>PORT<\/strong>. Tous ces param&egrave;tres sont configur&eacute;s dans le fichier <strong>settings.py<\/strong>, dans la section <strong>DATABASES :<\/strong><\/li>\n<\/ul><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">DATABASES = {\n    'default': {\n        'ENGINE': 'django.db.backends.postgresql',\n        'NAME': 'mydatabase',\n        'USER': 'mydatabaseuser',\n        'PASSWORD': 'mypassword',\n        'HOST': 'localhost',\n        'PORT': '5432',\n    }\n}<\/pre><p><strong>Diff&eacute;rences <\/strong>: Contrairement &agrave; SQLite, PostgreSQL est une base de donn&eacute;es compl&egrave;te qui prend en charge plusieurs utilisateurs simultan&eacute;s, des requ&ecirc;tes avanc&eacute;es et des transactions. Vous devrez installer PostgreSQL sur votre serveur, cr&eacute;er une base de donn&eacute;es et un utilisateur, et g&eacute;rer des configurations plus complexes.<\/p><ul class=\"wp-block-list\">\n<li><strong>MySQL \/ MariaDB <\/strong>: Les deux sont des bases de donn&eacute;es relationnelles rapides et fiables qui sont largement utilis&eacute;es dans le d&eacute;veloppement web. MySQL est connu pour sa vitesse, tandis que MariaDB, une version d&eacute;riv&eacute;e de MySQL, se concentre davantage sur le d&eacute;veloppement communautaire et est enti&egrave;rement compatible avec MySQL. Ces bases de donn&eacute;es sont excellentes pour les <strong>applications web &agrave; fort trafic <\/strong>et sont souvent privil&eacute;gi&eacute;es pour leurs performances.<br><br><strong>Installation <\/strong>: MySQL et MariaDB utilisent tous deux le package <strong>mysqlclient <\/strong>pour s&rsquo;interfacer avec Django.<br><br><strong>Configuration : <\/strong>Les deux utilisent les m&ecirc;mes param&egrave;tres que PostgreSQL, configur&eacute;s dans le fichier <strong>settings.py<\/strong>, dans la section <strong>DATABASES :<\/strong><\/li>\n<\/ul><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">DATABASES = {\n    'default': {\n        'ENGINE': 'django.db.backends.mysql',  # or 'django.db.backends.mariadb' for MariaDB\n        'NAME': 'mydatabase',\n        'USER': 'mydatabaseuser',\n        'PASSWORD': 'mypassword',\n        'HOST': 'localhost',\n        'PORT': '3306',\n    }\n}<\/pre><p><strong>Diff&eacute;rences : <\/strong>MySQL et MariaDB sont r&eacute;put&eacute;s pour leurs performances avec les grands ensembles de donn&eacute;es et les applications web &agrave; fort trafic. Ils prennent en charge plusieurs moteurs de stockage, des lectures rapides et peuvent traiter rapidement des millions de requ&ecirc;tes.<\/p><ul class=\"wp-block-list\">\n<li><strong>Oracle \/ Microsoft SQL Server <\/strong>: Ces bases de donn&eacute;es de qualit&eacute; professionnelle offrent une puissance consid&eacute;rable, en particulier pour les grandes applications web. Cependant, leur configuration peut &ecirc;tre plus complexe et elles ne sont g&eacute;n&eacute;ralement utilis&eacute;es que dans des <strong>environnements d&rsquo;entreprise <\/strong>sp&eacute;cifiques o&ugrave; l&rsquo;entreprise utilise d&eacute;j&agrave; Oracle ou SQL Server pour d&rsquo;autres logiciels.<br><br><strong>Installation <\/strong>: Les deux requi&egrave;rent des pilotes suppl&eacute;mentaires pour l&rsquo;int&eacute;gration avec Django, tels que <strong>cx_Oracle <\/strong>pour Oracle ou <strong>pyodbc <\/strong>pour SQL Server. Ces bases de donn&eacute;es sont g&eacute;n&eacute;ralement utilis&eacute;es dans des environnements d&rsquo;entreprise o&ugrave; d&rsquo;autres logiciels reposent sur ces syst&egrave;mes.<br><br><strong>Configuration <\/strong>: Chacun de ces syst&egrave;mes n&eacute;cessite des processus de configuration plus complexes, notamment l&rsquo;installation du serveur, la configuration des pilotes et la configuration des informations d&rsquo;identification de la base de donn&eacute;es dans le <strong>settings.py<\/strong>, comme pour les options pr&eacute;c&eacute;dentes.<br><br><strong>Diff&eacute;rences <\/strong>: Oracle et SQL Server offrent des fonctionnalit&eacute;s de niveau entreprise telles que la gestion avanc&eacute;e des transactions, l&rsquo;optimisation des performances et l&rsquo;int&eacute;gration avec des syst&egrave;mes &agrave; grande &eacute;chelle. Leur configuration est plus complexe et est souvent confi&eacute;e &agrave; des administrateurs de bases de donn&eacute;es sp&eacute;cialis&eacute;s.<\/li>\n<\/ul><p>Alors, lequel choisir ? Simplifions les choses :<\/p><ul class=\"wp-block-list\">\n<li><strong>D&eacute;veloppement et tests <\/strong>: Utilisez SQLite. Il est simple, ne n&eacute;cessite aucune installation et est id&eacute;al pour les tests locaux.<\/li>\n\n\n\n<li><strong>Production &agrave; petite &eacute;chelle <\/strong>: Pour les petites applications web &agrave; faible trafic, vous pouvez choisir MySQL ou MariaDB, qui offrent de meilleures performances que SQLite et dont la courbe d&rsquo;apprentissage est plus facile que celle de PostgreSQL.<\/li>\n\n\n\n<li><strong>Production &agrave; grande &eacute;chelle <\/strong>: PostgreSQL est le plus recommand&eacute; pour les projets Django qui n&eacute;cessitent de l&rsquo;&eacute;volutivit&eacute;, de la s&eacute;curit&eacute; et des fonctionnalit&eacute;s avanc&eacute;es.<\/li>\n\n\n\n<li><strong>Environnements d&rsquo;entreprise <\/strong>: Si vous travaillez dans une entreprise qui utilise Oracle ou SQL Server pour d&rsquo;autres applications, ces bases de donn&eacute;es peuvent &ecirc;tre le meilleur choix en raison des exigences d&rsquo;int&eacute;gration.<\/li>\n<\/ul><p><strong>Configuration de PostgreSQL avec Django<\/strong><\/p><p>Dans cette section, nous verrons comment int&eacute;grer <strong>PostgreSQL <\/strong>&agrave; Django, car c&rsquo;est l&rsquo;une des bases de donn&eacute;es les plus couramment utilis&eacute;es pour les applications de production.<\/p><ol class=\"wp-block-list\">\n<li><strong>Installer PostgreSQL : <\/strong>Pour int&eacute;grer PostgreSQL &agrave; Django, vous devez d&rsquo;abord installer PostgreSQL sur votre syst&egrave;me :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sudo apt update<\/pre><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sudo apt install postgresql postgresql-contrib<\/pre><ol start=\"2\" class=\"wp-block-list\">\n<li><strong>Installer l&rsquo;adaptateur PostgreSQL pour Django : <\/strong>Django utilise le package <strong>psycopg2 <\/strong>pour interagir avec PostgreSQL. Installez-le &agrave; l&rsquo;aide de <strong>pip <\/strong>:<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">pip install psycopg2<\/pre><ol start=\"3\" class=\"wp-block-list\">\n<li>Passez &agrave; l&rsquo;utilisateur PostgreSQL :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sudo -u postgres psql<\/pre><ol start=\"4\" class=\"wp-block-list\">\n<li>Cr&eacute;er une nouvelle base de donn&eacute;es :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">CREATE DATABASE mydatabase;<\/pre><ol start=\"5\" class=\"wp-block-list\">\n<li>Cr&eacute;er un utilisateur avec un mot de passe :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">CREATE USER mydatabaseuser WITH PASSWORD 'mypassword';<\/pre><ol start=\"6\" class=\"wp-block-list\">\n<li>Accorder &agrave; <strong>mydatabaseuser<\/strong> tous les privil&egrave;ges sur la base de donn&eacute;es :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">GRANT ALL PRIVILEGES ON DATABASE mydatabase TO mydatabaseuser;<\/pre><ol start=\"7\" class=\"wp-block-list\">\n<li>Quitter le shell PostgreSQL :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\\q<\/pre><ol start=\"8\" class=\"wp-block-list\">\n<li><strong>Configurez Django pour utiliser PostgreSQL : <\/strong>Ouvrez votre fichier <strong>settings.py <\/strong>et localisez la section <strong>DATABASES<\/strong>. Modifiez-la pour PostgreSQL comme suit :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">DATABASES = {\n    'default': {\n        'ENGINE': 'django.db.backends.postgresql',\n        'NAME': 'mydatabase',\n        'USER': 'mydatabaseuser',\n        'PASSWORD': 'mypassword',\n        'HOST': 'localhost',  # Use '127.0.0.1' if 'localhost' doesn't work\n        'PORT': '5432',       # Default PostgreSQL port\n    }\n}<\/pre><p>Les valeurs <strong>PASSWORD <\/strong>et <strong>USER <\/strong>doivent correspondre &agrave; celles que vous avez d&eacute;finies &agrave; l&rsquo;<strong>&eacute;tape 5<\/strong>.<\/p><ol start=\"9\" class=\"wp-block-list\">\n<li><strong>Appliquer les migrations :<\/strong> Maintenant que votre base de donn&eacute;es est configur&eacute;e, vous devez appliquer les migrations de votre projet pour configurer les tables n&eacute;cessaires dans PostgreSQL :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">python manage.py migrate<\/pre><p>Cette commande cr&eacute;era les tables n&eacute;cessaires dans votre base de donn&eacute;es PostgreSQL.<\/p><ol start=\"10\" class=\"wp-block-list\">\n<li><strong>Tester la connexion : <\/strong>Enfin, ex&eacute;cutez le serveur de d&eacute;veloppement de Django &agrave; l&rsquo;aide de la commande <strong>runserver<\/strong>, afin de v&eacute;rifier que l&rsquo;int&eacute;gration de PostgreSQL est r&eacute;ussie :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">python manage.py runserver<\/pre><p>Ouvrez <strong>http:\/\/127.0.0.1:8000\/ <\/strong>dans votre navigateur. Si la page d&rsquo;accueil de Django s&rsquo;affiche sans erreur, votre connexion &agrave; la base de donn&eacute;es fonctionne correctement.<\/p><p>Avec votre base de donn&eacute;es PostgreSQL enti&egrave;rement int&eacute;gr&eacute;e, Django est maintenant pr&ecirc;t &agrave; g&eacute;rer des ensembles de donn&eacute;es plus importants et plus complexes, ce qui rend votre projet &eacute;volutif et pr&ecirc;t pour la production.<\/p><h2 class=\"wp-block-heading\" id=\"h-construire-des-vues-et-des-templates\">Construire des vues et des templates<\/h2><p>Une fois la base de donn&eacute;es et les mod&egrave;les mis en place pour g&eacute;rer les donn&eacute;es de votre application, l&rsquo;&eacute;tape suivante consiste &agrave; afficher ces informations aux utilisateurs et &agrave; cr&eacute;er des interfaces interactives.&nbsp;<\/p><p>C&rsquo;est l&agrave; qu&rsquo;interviennent les <strong>vues <\/strong>et les <strong>templates<\/strong>, qui vous permettent de d&eacute;finir la logique et la structure des pages web avec lesquelles les utilisateurs interagiront.<\/p><h3 class=\"wp-block-heading\" id=\"h-comprendre-les-vues\">Comprendre les vues<\/h3><p>Dans Django, les <strong>vues <\/strong>sont un composant essentiel qui d&eacute;finit la logique derri&egrave;re ce qu&rsquo;un utilisateur voit lorsqu&rsquo;il interagit avec votre application.&nbsp;<\/p><p>En termes simples, une vue prend une requ&ecirc;te web, la traite et renvoie une r&eacute;ponse, g&eacute;n&eacute;ralement sous la forme d&rsquo;une page HTML rendue. Les vues font le lien entre votre base de donn&eacute;es et l&rsquo;interface utilisateur gr&acirc;ce &agrave; l&rsquo;utilisation de mod&egrave;les et de gabarits.<\/p><p>Il existe deux types principaux de vues dans Django : <strong>Les vues bas&eacute;es sur les fonctions (FBV<\/strong>) et les <strong>vues bas&eacute;es sur les classes (CBV)<\/strong>. Ces deux types de vues ont le m&ecirc;me objectif, mais offrent diff&eacute;rentes mani&egrave;res d&rsquo;organiser le code.<\/p><p><strong>Vues bas&eacute;es sur les fonctions (FBV)<\/strong><\/p><p>Les vues bas&eacute;es sur des fonctions sont des fonctions Python simples qui acceptent un objet de requ&ecirc;te et renvoient une r&eacute;ponse. Elles sont souvent utilis&eacute;es pour des cas d&rsquo;utilisation plus simples ou lorsque vous avez besoin de plus de contr&ocirc;le sur le flux de la logique.<\/p><p>Voici un exemple d&rsquo;un simple FBV qui rend un mod&egrave;le HTML :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from django.shortcuts import render\n\n# Vue bas&eacute;e sur des fonctions\ndef homepage(request):\n    return render(request, 'homepage.html')<\/pre><p>Dans cet exemple :<\/p><ul class=\"wp-block-list\">\n<li><strong>request <\/strong>: L&rsquo;objet de la requ&ecirc;te HTTP envoy&eacute; par le navigateur de l&rsquo;utilisateur.<\/li>\n\n\n\n<li><strong>render <\/strong>: Combine le mod&egrave;le <strong>homepage.html <\/strong>avec les donn&eacute;es contextuelles fournies et renvoie une r&eacute;ponse HTTP.<\/li>\n<\/ul><p>Les FBV sont faciles &agrave; comprendre et &agrave; mettre en &oelig;uvre, mais lorsque les vues deviennent plus complexes, par exemple lorsqu&rsquo;elles impliquent des formulaires ou l&rsquo;authentification, elles peuvent devenir plus difficiles &agrave; maintenir.<\/p><p><strong>Vues par classe (CBV)<\/strong><\/p><p>Les vues bas&eacute;es sur les classes, quant &agrave; elles, vous permettent de structurer les vues plus efficacement en utilisant les principes de la programmation orient&eacute;e objet. Les CBV sont plus flexibles et r&eacute;utilisables puisqu&rsquo;elles sont bas&eacute;es sur les classes Python.&nbsp;<\/p><p>Django fournit des vues g&eacute;n&eacute;riques int&eacute;gr&eacute;es, comme <strong>ListView <\/strong>et <strong>DetailView<\/strong>, qui g&egrave;rent les cas d&rsquo;utilisation courants. Ces vues vous permettent de vous concentrer sur leur personnalisation plut&ocirc;t que sur la r&eacute;&eacute;criture d&rsquo;une logique r&eacute;p&eacute;titive.<\/p><p>Voici un exemple d&rsquo;un CBV qui remplit la m&ecirc;me fonction que le FBV pr&eacute;c&eacute;dent :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from django.views.generic import TemplateView\n\n# Vue bas&eacute;e sur une classe\nclass HomePageView(TemplateView):\n    template_name = 'homepage.html'<\/pre><p>Dans cet exemple :<\/p><ul class=\"wp-block-list\">\n<li><strong>TemplateView <\/strong>: Une vue g&eacute;n&eacute;rique int&eacute;gr&eacute;e qui rend un mod&egrave;le.<\/li>\n\n\n\n<li><strong>template_name <\/strong>: Sp&eacute;cifie le fichier mod&egrave;le &agrave; rendre, comme dans l&rsquo;exemple FBV.<\/li>\n<\/ul><p>Pour utiliser cette CBV dans la configuration de l&rsquo;URL, vous devez inclure la m&eacute;thode <strong>.as_view() <\/strong>lorsque vous l&rsquo;ajoutez &agrave; <strong>urls.py <\/strong>:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from django.urls import path\nfrom .views import HomePageView\n\nurlpatterns = [\n    path('', HomePageView.as_view(), name='home'),\n]<\/pre><p><strong>Quand utiliser les FBV ou les CBV ?<\/strong><\/p><ul class=\"wp-block-list\">\n<li><strong>Utilisez les FBV <\/strong>lorsque vous avez besoin de simplicit&eacute; et d&rsquo;un contr&ocirc;le total sur la logique de votre vue. Ils sont souvent plus intuitifs pour les petites vues ou les logiques personnalis&eacute;es qui ne correspondent pas aux mod&egrave;les de vues pr&eacute;d&eacute;finis de Django.<\/li>\n\n\n\n<li><strong>Utilisez les CBV <\/strong>lorsque vous souhaitez suivre les principes <strong>DRY (Don&rsquo;t Repeat Yourself) <\/strong>et r&eacute;utiliser la logique existante. Les CBV sont id&eacute;ales lorsque vos vues deviennent de plus en plus complexes, par exemple lorsque vous g&eacute;rez des formulaires, des donn&eacute;es pagin&eacute;es ou des op&eacute;rations CRUD standard.<\/li>\n<\/ul><p>Les FBV et les CBV font tous deux partie int&eacute;grante de Django, et le choix entre les deux d&eacute;pend des exigences de votre projet et de vos pr&eacute;f&eacute;rences personnelles.<\/p><h3 class=\"wp-block-heading\" id=\"h-travailler-avec-des-templates\">Travailler avec des templates<\/h3><p>Le syst&egrave;me de templates de Django est con&ccedil;u pour s&eacute;parer la pr&eacute;sentation des donn&eacute;es de la logique sous-jacente. Les templates sont essentiellement des fichiers HTML qui contiennent un contenu dynamique, vous permettant d&rsquo;afficher des donn&eacute;es pass&eacute;es depuis vos vues. Le langage de template de Django (DTL) fournit des placeholders et de la logique, comme des boucles et des conditionnelles, pour ins&eacute;rer des donn&eacute;es dynamiques dans le HTML.<\/p><p>Les templates jouent un r&ocirc;le crucial dans la d&eacute;finition de l&rsquo;aspect et de la convivialit&eacute; de vos pages web, tout en maintenant une s&eacute;paration nette entre la logique, qui est g&eacute;r&eacute;e par les vues, et l&rsquo;interface utilisateur.<\/p><p><strong>Cr&eacute;ation d&rsquo;un template<\/strong><\/p><p>Pour cr&eacute;er un template dans Django, vous devez cr&eacute;er un fichier HTML dans un r&eacute;pertoire <strong>templates.<\/strong> La structure du r&eacute;pertoire peut ressembler &agrave; ceci :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">myproject\/\n&#9474;\n&#9500;&#9472;&#9472; myapp\/\n&#9474;   &#9500;&#9472;&#9472; templates\/\n&#9474;   &#9474;   &#9492;&#9472;&#9472; myapp\/\n&#9474;   &#9474;       &#9492;&#9472;&#9472; homepage.html\n&#9474;   &#9492;&#9472;&#9472; views.py\n&#9474;\n&#9492;&#9472;&#9472; manage.py<\/pre><p>Dans cette structure, Django recherche automatiquement les templates dans le r&eacute;pertoire <strong>templates <\/strong>de votre application. Vous pouvez &eacute;galement organiser les templates dans des dossiers sp&eacute;cifiques &agrave; l&rsquo;application (comme <strong>myapp\/homepage.html<\/strong>), en veillant &agrave; ce que chaque application ait ses propres templates.<\/p><p>Voici un exemple de template simple (<strong>homepage.html<\/strong>)<strong> :<\/strong><\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;!DOCTYPE html&gt;\n&lt;html lang=\"en\"&gt;\n&lt;head&gt;\n    &lt;meta charset=\"UTF-8\"&gt;\n    &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"&gt;\n    &lt;title&gt;Home&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n    &lt;h1&gt;Welcome to {{ site_name }}&lt;\/h1&gt;\n    &lt;p&gt;{{ message }}&lt;\/p&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/pre><p>Dans ce template, <strong>{{ site_name }} <\/strong>et <strong>{{ message }} <\/strong>sont des espaces r&eacute;serv&eacute;s qui seront remplis avec des donn&eacute;es dynamiques transmises par la vue.<\/p><p><strong>Rendu d&rsquo;un template dans une vue<\/strong><\/p><p>Pour effectuer le rendu d&rsquo;un template, vous devez le passer &agrave; la vue &agrave; l&rsquo;aide de la fonction <strong>render() <\/strong>de Django. Voici un exemple de rendu du template <strong>homepage.html <\/strong>avec quelques donn&eacute;es contextuelles dans une <strong>vue bas&eacute;e sur une fonction (FBV) <\/strong>:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from django.shortcuts import render\n\ndef homepage(request):\n    context = {\n        'site_name': 'My Django Website',\n        'message': 'This is the homepage content!'\n    }\n    return render(request, 'myapp\/homepage.html', context)<\/pre><p>Dans cet exemple :<\/p><ul class=\"wp-block-list\">\n<li><strong>render() <\/strong>: Combine le template (<strong>homepage.html<\/strong>) avec les donn&eacute;es contextuelles.<\/li>\n\n\n\n<li><strong>context <\/strong>: Un dictionnaire contenant les donn&eacute;es (<strong>site_name <\/strong>et <strong>message<\/strong>) &agrave; ins&eacute;rer dans le template.<\/li>\n<\/ul><p>Lorsqu&rsquo;un utilisateur visite cette page, les espaces r&eacute;serv&eacute;s <strong>{{ site_name }} <\/strong>et <strong>{{ message }} <\/strong>du template seront remplac&eacute;s respectivement par &laquo;&nbsp;My Django Website&nbsp;&raquo; et &laquo;&nbsp;This is the homepage content!&nbsp;&raquo;.<\/p><p><strong>Balises et filtres de templates<\/strong><\/p><p>Les templates Django prennent &eacute;galement en charge les <strong>balises de template <\/strong>et les <strong>filtres<\/strong>, qui vous permettent d&rsquo;ajouter du contenu dynamique et de la logique dans vos fichiers HTML.<\/p><ul class=\"wp-block-list\">\n<li><strong>Balises de templates <\/strong>: Effectuer des op&eacute;rations logiques &agrave; l&rsquo;int&eacute;rieur des templates, telles que des boucles et des conditions. Par exemple, une condition <strong>&laquo;&nbsp;if&nbsp;&raquo; :<\/strong><\/li>\n<\/ul><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{% if user.is_authenticated %}\n    &lt;p&gt;Welcome back, {{ user.username }}!&lt;\/p&gt;\n{% else %}\n    &lt;p&gt;Hello, Guest!&lt;\/p&gt;\n{% endif %}<\/pre><ul class=\"wp-block-list\">\n<li><strong>Filtres de templates <\/strong>: Modifier les variables &agrave; des fins d&rsquo;affichage. Par exemple, formater des dates &agrave; l&rsquo;aide d&rsquo;un filtre :<\/li>\n<\/ul><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;p&gt;Published on {{ article.published_date|date:\"F j, Y\" }}&lt;\/p&gt;<\/pre><p><strong>Extension des templates<\/strong><\/p><p>Django prend en charge l&rsquo;h&eacute;ritage de templates, ce qui permet de cr&eacute;er des templates de base que d&rsquo;autres templates peuvent &eacute;tendre. Ceci est particuli&egrave;rement utile pour maintenir une mise en page coh&eacute;rente sur plusieurs pages, comme un en-t&ecirc;te et un pied de page communs.<\/p><ol class=\"wp-block-list\">\n<li>Cr&eacute;er un template de base (<strong>base.html<\/strong>)<strong> :<\/strong><\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;!DOCTYPE html&gt;\n&lt;html lang=\"en\"&gt;\n&lt;head&gt;\n    &lt;meta charset=\"UTF-8\"&gt;\n    &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"&gt;\n    &lt;title&gt;{% block title %}My Site{% endblock %}&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n    &lt;header&gt;\n        &lt;h1&gt;Site Header&lt;\/h1&gt;\n    &lt;\/header&gt;\n\n    &lt;main&gt;\n        {% block content %}\n        &lt;!-- Page-specific content goes here --&gt;\n        {% endblock %}\n    &lt;\/main&gt;\n\n    &lt;footer&gt;\n        &lt;p&gt;Footer Content&lt;\/p&gt;\n    &lt;\/footer&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/pre><ol start=\"2\" class=\"wp-block-list\">\n<li>&Eacute;tendre le template de base dans un template enfant (<strong>homepage.html<\/strong>)<strong> :<\/strong><\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{% extends 'base.html' %}\n\n{% block title %}Home Page{% endblock %}\n\n{% block content %}\n    &lt;h2&gt;Welcome to the homepage!&lt;\/h2&gt;\n    &lt;p&gt;This is the homepage content.&lt;\/p&gt;\n{% endblock %}<\/pre><p>En &eacute;tendant le template de base, vous pouvez r&eacute;utiliser l&rsquo;en-t&ecirc;te et le pied de page sur diff&eacute;rentes pages, en conservant une mise en page coh&eacute;rente et en &eacute;vitant les r&eacute;p&eacute;titions.<\/p><p><strong>Utilisation de fichiers statiques dans les templates<\/strong><\/p><p>Les templates vous permettent &eacute;galement de faire r&eacute;f&eacute;rence &agrave; des fichiers statiques (tels que CSS, JavaScript ou des images) &agrave; l&rsquo;aide de la balise de template <strong>{% static %}.<\/strong> Par exemple, pour inclure un fichier CSS :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;link rel=\"stylesheet\" type=\"text\/css\" href=\"{% static 'css\/style.css' %}\"&gt;<\/pre><p>Assurez-vous d&rsquo;avoir configur&eacute; correctement vos r&eacute;pertoires de fichiers statiques dans <strong>settings.py <\/strong>:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">STATIC_URL = '\/static\/'<\/pre><p>En utilisant efficacement le syst&egrave;me de templates de Django, vous pouvez cr&eacute;er des pages web dynamiques, bas&eacute;es sur des donn&eacute;es, et maintenir une s&eacute;paration nette entre la logique et la pr&eacute;sentation.<\/p><h2 class=\"wp-block-heading\" id=\"h-travailler-avec-des-modeles-d-url\">Travailler avec des mod&egrave;les d&rsquo;URL<\/h2><p>Le distributeur d&rsquo;URL de Django s&rsquo;appuie sur des expressions r&eacute;guli&egrave;res ou des convertisseurs de chemin pour faire correspondre les demandes d&rsquo;URL entrantes avec des vues sp&eacute;cifiques. Ces motifs d&rsquo;URL sont d&eacute;finis dans <strong>urls.py, <\/strong>et Django utilise cette configuration pour d&eacute;terminer quelle vue doit traiter une requ&ecirc;te particuli&egrave;re.<\/p><p>Chaque projet Django poss&egrave;de g&eacute;n&eacute;ralement deux niveaux de configuration d&rsquo;URL :<\/p><ol class=\"wp-block-list\">\n<li><strong>URL au niveau du projet <\/strong>: D&eacute;fini dans le fichier racine <strong>urls.py <\/strong>(qui se trouve dans le r&eacute;pertoire principal du projet), ce fichier contient la structure globale du routage des URL du projet.<\/li>\n\n\n\n<li><strong>URLs au niveau de l&rsquo;application <\/strong>: Chaque application de votre projet peut avoir son propre fichier <strong>urls.py<\/strong>, ce qui permet une gestion modulaire des URL. Ces URLs au niveau de l&rsquo;application sont ensuite li&eacute;es aux URLs au niveau du projet.<\/li>\n<\/ol><p><strong>Configuration de base de l&rsquo;URL<\/strong><\/p><p>Voyons comment un projet simple peut mettre en place des mod&egrave;les d&rsquo;URL :<\/p><ol class=\"wp-block-list\">\n<li>URLs au niveau du projet (<strong>myproject&rarr;urls.py<\/strong>)<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from django.contrib import admin\nfrom django.urls import path, include\n\nurlpatterns = [\n    path('admin\/', admin.site.urls),  # Site d'admin\n    path('', include('myapp.urls')),  # Inclure les URLs au niveau de l'application pour \"myapp\"\n]<\/pre><ul class=\"wp-block-list\">\n<li><strong>path() <\/strong>: Fonction de Django permettant de d&eacute;finir des mod&egrave;les d&rsquo;URL.<\/li>\n\n\n\n<li><strong>admin.site.urls <\/strong>: G&egrave;re toutes les requ&ecirc;tes li&eacute;es &agrave; l&rsquo;administration.<\/li>\n\n\n\n<li><strong>include() <\/strong>: Utilis&eacute;e pour inclure les URL au niveau de l&rsquo;application (&agrave; partir de myapp.urls) dans la configuration du projet principal.<\/li>\n<\/ul><ol start=\"2\" class=\"wp-block-list\">\n<li>URLs au niveau de l&rsquo;application (<strong>myproject&rarr;myapp&rarr;urls.py<\/strong>)<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from django.urls import path\nfrom . import views\n\nurlpatterns = [\n    path('', views.homepage, name='home'),  # Associe l'URL racine &agrave; la vue homepage\n    path('about\/', views.about, name='about'),  # Associe \"\/about\/\" &agrave; la vue about\n]<\/pre><ul class=\"wp-block-list\">\n<li>L&rsquo;<strong>URL racine <\/strong>(repr&eacute;sent&eacute;e par &lsquo; &lsquo;) est associ&eacute;e &agrave; la vue <strong>homepage<\/strong>.<\/li>\n\n\n\n<li><strong>L&rsquo;URL \/about\/ <\/strong>est associ&eacute;e &agrave; la vue <strong>about.<\/strong><\/li>\n<\/ul><p><strong>Routage d&rsquo;URL avec des vues bas&eacute;es sur des fonctions (FBV)<\/strong><\/p><p>Voici &agrave; quoi pourraient ressembler les vues correspondantes dans <strong>views.py <\/strong>pour la configuration d&rsquo;URL ci-dessus :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from django.shortcuts import render\n\ndef homepage(request):\n    return render(request, 'homepage.html')\n\ndef about(request):\n    return render(request, 'about.html')<\/pre><p>Cette configuration lie la page d&rsquo;accueil <strong>&laquo;&nbsp;homepage&nbsp;&raquo; <\/strong>et l&rsquo;URL <strong>&laquo;&nbsp;about&nbsp;&raquo; <\/strong>&agrave; leurs vues respectives, ce qui garantit que lorsqu&rsquo;un utilisateur visite <strong>http:\/\/example.com\/ <\/strong>ou <strong>http:\/\/example.com\/about\/<\/strong>, le template correct est affich&eacute;.<\/p><p><strong>Routage d&rsquo;URL avec des vues bas&eacute;es sur des classes (CBV)<\/strong><\/p><p>Vous pouvez &eacute;galement faire correspondre des URL &agrave; des vues bas&eacute;es sur des classes (CBV), qui sont g&eacute;r&eacute;es de mani&egrave;re l&eacute;g&egrave;rement diff&eacute;rente. Voici un exemple de mappage d&rsquo;une URL CBV :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from django.urls import path\nfrom .views import HomePageView, AboutPageView\n\nurlpatterns = [\n&nbsp; &nbsp; path('', HomePageView.as_view(), name='home'),\n&nbsp; &nbsp; path('about\/', AboutPageView.as_view(), name='about'),\n]<\/pre><p>Et les vues bas&eacute;es sur les classes correspondantes dans <strong>views.py <\/strong>:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from django.views.generic import TemplateView\n\nclass HomePageView(TemplateView):\n    template_name = 'homepage.html'\n\nclass AboutPageView(TemplateView):\n    template_name = 'about.html'<\/pre><p>Dans ce cas, la m&eacute;thode <strong>.as_view() <\/strong>est utilis&eacute;e pour lier les vues bas&eacute;es sur les classes aux mod&egrave;les d&rsquo;URL.<\/p><p><strong>Param&egrave;tres d&rsquo;URL et routage dynamique<\/strong><strong><br><\/strong>Django vous permet &eacute;galement de capturer des param&egrave;tres d&rsquo;URL et de les passer aux vues, ce qui est utile pour le mappage dynamique d&rsquo;URL pour des choses comme des articles de blog ou des pages de produits.<\/p><p>Voici un exemple o&ugrave; l&rsquo;URL capture un param&egrave;tre entier :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from django.urls import path\nfrom . import views\n\nurlpatterns = [\n    path('article\/&lt;int:id&gt;\/', views.article_detail, name='article_detail'),\n]<\/pre><p>Dans ce cas, <strong>&lt;int:id&gt; <\/strong>capture un nombre entier &agrave; partir de l&rsquo;URL et le transmet &agrave; la vue <strong>article_detail <\/strong>en tant qu&rsquo;argument :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">def article_detail(request, id):\n    # Fetch the article using the provided ID\n    article = get_object_or_404(Article, pk=id)\n    return render(request, 'article_detail.html', {'article': article})<\/pre><p>Si un utilisateur visite http:\/\/example.com\/article\/5\/, Django transmettra <strong>5 <\/strong>comme argument <strong>id <\/strong>&agrave; la vue <strong>article_detail<\/strong>, ce qui vous permettra de r&eacute;cup&eacute;rer et d&rsquo;afficher l&rsquo;article en question.<\/p><p><strong>Mod&egrave;les d&rsquo;URL nomm&eacute;s<\/strong><\/p><p>Il est conseill&eacute; de <strong>nommer<\/strong> vos mod&egrave;les d&rsquo;URL. Cela vous permet de r&eacute;f&eacute;rencer les URL par leur nom dans vos templates et vos vues plut&ocirc;t que de les coder en dur.<\/p><p>Dans l&rsquo;exemple <strong>urls.py <\/strong>ci-dessus, chaque URL a un argument <strong>name<\/strong> :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">path('about\/', views.about, name='about')<\/pre><p>Dans vos templates, vous pouvez alors utiliser la balise template <strong>{% url %} <\/strong>pour faire r&eacute;f&eacute;rence &agrave; ces URL nomm&eacute;es :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;a href=\"{% url 'about' %}\"&gt;About Us&lt;\/a&gt;<\/pre><p>Ainsi, si l&rsquo;URL <strong>about<\/strong> change un jour, il suffit de la mettre &agrave; jour dans la configuration de l&rsquo;URL plut&ocirc;t que dans chaque template.<\/p><p>En configurant et en utilisant les mod&egrave;les d&rsquo;URL de Django, vous pouvez faire correspondre efficacement diff&eacute;rentes URL &agrave; leurs vues respectives. Cette flexibilit&eacute; vous permet de g&eacute;rer &agrave; la fois des pages statiques simples et un contenu dynamique plus complexe, adapt&eacute; &agrave; la saisie de l&rsquo;utilisateur.<\/p><h2 class=\"wp-block-heading\" id=\"h-gestion-des-fichiers-statiques-dans-django\">Gestion des fichiers statiques dans Django<\/h2><p>Nous avons mis en place des vues, des templates et des mod&egrave;les d&rsquo;URL. Maintenant, pour construire une application Django pleinement fonctionnelle, nous devons commencer &agrave; manipuler des <strong>fichiers statiques<\/strong>, tels que CSS, JavaScript et des images.&nbsp;<\/p><p>Heureusement, Django offre un moyen simple et efficace de g&eacute;rer les fichiers statiques, en s&rsquo;assurant qu&rsquo;ils sont correctement servis et organis&eacute;s pendant le d&eacute;veloppement et le d&eacute;ploiement.<\/p><p><strong>Mise en place de fichiers statiques dans Django<\/strong><\/p><p>Pour g&eacute;rer les fichiers statiques dans Django, vous devez configurer votre projet pour qu&rsquo;il sache o&ugrave; les rechercher et les servir.<\/p><p>D&eacute;finir l&rsquo;URL statique et le r&eacute;pertoire dans <strong>settings.py <\/strong>:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># settings.py\nSTATIC_URL = '\/static\/'\nSTATICFILES_DIRS = [\n    BASE_DIR \/ \"static\",  # Optional: Add this if you want to store static files in a 'static' folder within your project\n]<\/pre><ul class=\"wp-block-list\">\n<li><strong>STATIC_URL <\/strong>: D&eacute;finit le pr&eacute;fixe de l&rsquo;URL que Django utilisera pour servir les fichiers statiques.<\/li>\n\n\n\n<li><strong>STATICFILES_DIRS <\/strong>: Sp&eacute;cifie des r&eacute;pertoires suppl&eacute;mentaires dans lesquels Django cherchera des fichiers statiques pendant le d&eacute;veloppement.<\/li>\n<\/ul><p>Par d&eacute;faut, Django recherche &eacute;galement les fichiers statiques dans le r&eacute;pertoire <strong>static <\/strong>de chaque application. Par exemple, si vous avez une application nomm&eacute;e <strong>myapp<\/strong>, vous pouvez cr&eacute;er une structure de dossiers comme celle-ci :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">myapp\/\n&#9474;\n&#9500;&#9472;&#9472; static\/\n&#9474;   &#9492;&#9472;&#9472; myapp\/\n&#9474;       &#9492;&#9472;&#9472; style.css\n&#9492;&#9472;&#9472; views.py<\/pre><p>Django reconna&icirc;tra et servira automatiquement ces fichiers pendant le d&eacute;veloppement.<\/p><p><strong>Utilisation de fichiers statiques dans les templates<\/strong><\/p><p>Pour utiliser des fichiers statiques dans vos templates, vous devez d&rsquo;abord charger la balise de template <strong>{% static %} <\/strong>de Django. Ensuite, vous pouvez r&eacute;f&eacute;rencer vos fichiers statiques par leurs chemins relatifs :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;!DOCTYPE html&gt;\n&lt;html lang=\"en\"&gt;\n&lt;head&gt;\n    &lt;meta charset=\"UTF-8\"&gt;\n    &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"&gt;\n    &lt;title&gt;Home Page&lt;\/title&gt;\n    {% load static %}\n    &lt;link rel=\"stylesheet\" href=\"{% static 'myapp\/style.css' %}\"&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n    &lt;h1&gt;Welcome to My Django App&lt;\/h1&gt;\n    &lt;img src=\"{% static 'myapp\/images\/logo.png' %}\" alt=\"Logo\"&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/pre><p>Dans cet exemple :<\/p><ul class=\"wp-block-list\">\n<li><strong>{% load static %} <\/strong>: Charge la balise de template des fichiers statiques.<\/li>\n\n\n\n<li><strong>{% static &lsquo;myapp\/style.css&rsquo; %} <\/strong>: R&eacute;sout le chemin vers le fichier style.css dans le r&eacute;pertoire static\/myapp.<\/li>\n\n\n\n<li><strong>{% static &lsquo;myapp\/images\/logo.png&rsquo; %} <\/strong>: R&eacute;sout le chemin d&rsquo;acc&egrave;s &agrave; un fichier image.<\/li>\n<\/ul><p><strong>Collecte des fichiers statiques pour le d&eacute;ploiement<\/strong><\/p><p>Pendant le d&eacute;veloppement, Django sert automatiquement les fichiers statiques lorsque <strong>DEBUG = True<\/strong>. Cependant, en production, Django ne sert pas les fichiers statiques directement. Au lieu de cela, vous devez collecter tous les fichiers statiques &agrave; partir de diff&eacute;rents emplacements et les stocker dans un seul r&eacute;pertoire.<\/p><p>Pour ce faire, Django fournit la commande de gestion <strong>collectstatic :<\/strong><\/p><ol class=\"wp-block-list\">\n<li>Assurez-vous que <strong>django.contrib.staticfiles <\/strong>est inclus dans le param&egrave;tre <strong>INSTALLED_APPS :<\/strong><\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">INSTALLED_APPS = [\n    # Other installed apps\n    'django.contrib.staticfiles',\n]<\/pre><ol start=\"2\" class=\"wp-block-list\">\n<li>Configurez le r&eacute;pertoire racine statique dans <strong>settings.py <\/strong>:<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">STATIC_ROOT = BASE_DIR \/ 'staticfiles'<\/pre><p><strong>STATIC_ROOT <\/strong>: D&eacute;finit le r&eacute;pertoire dans lequel Django collectera les fichiers statiques pour le d&eacute;ploiement.<\/p><ol start=\"3\" class=\"wp-block-list\">\n<li>Ex&eacute;cutez la commande collectstatic :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">python manage.py collectstatic<\/pre><p>Cette commande collecte tous les fichiers statiques du r&eacute;pertoire <strong>static <\/strong>de chaque application et de tout autre emplacement sp&eacute;cifi&eacute; dans <strong>STATICFILES_DIRS<\/strong>, puis les stocke dans le r&eacute;pertoire <strong>STATIC_ROOT.<\/strong><\/p><p><strong>Servir des fichiers statiques en production<\/strong><\/p><p>Dans un environnement de production, vous utilisez g&eacute;n&eacute;ralement un serveur web (comme <strong>Nginx <\/strong>ou <strong>Apache<\/strong>) pour servir les fichiers statiques. Django recommande de configurer votre serveur web pour qu&rsquo;il serve efficacement le contenu statique, r&eacute;duisant ainsi la charge sur votre application Django.<\/p><p>Voici comment vous pourriez configurer le service de fichiers statiques dans une installation Nginx :<\/p><ol class=\"wp-block-list\">\n<li>Configuration de Nginx pour les fichiers statiques :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">server {\n    listen 80;\n    server_name yourdomain.com;\n\n    location \/static\/ {\n        alias \/path\/to\/your\/project\/staticfiles\/;  # The path to STATIC_ROOT\n    }\n\n    location \/ {\n        proxy_pass http:\/\/127.0.0.1:8000;  # Pass requests to Django app\n    }\n}<\/pre><p>Dans cette configuration, Nginx sert les fichiers statiques directement depuis le r&eacute;pertoire <strong>\/static\/<\/strong>, tout en transmettant toutes les autres requ&ecirc;tes &agrave; l&rsquo;application Django.<\/p><p>En g&eacute;rant correctement les fichiers statiques dans Django, vous vous assurez que votre application n&rsquo;est pas seulement belle avec des styles et des images, mais qu&rsquo;elle fonctionne aussi efficacement lorsqu&rsquo;elle est d&eacute;ploy&eacute;e.<\/p><h2 class=\"wp-block-heading\" id=\"h-mise-en-oeuvre-de-l-authentification-et-de-l-autorisation-des-utilisateurs\">Mise en &oelig;uvre de l&rsquo;authentification et de l&rsquo;autorisation des utilisateurs<\/h2><p>Au fur et &agrave; mesure que nous cr&eacute;ons des applications web plus dynamiques et plus complexes, la n&eacute;cessit&eacute; de g&eacute;rer les utilisateurs, de s&eacute;curiser le contenu et de contr&ocirc;ler l&rsquo;acc&egrave;s devient critique.&nbsp;<\/p><p>Django fournit un syst&egrave;me d&rsquo;authentification int&eacute;gr&eacute; qui facilite la gestion de la connexion, de la d&eacute;connexion, de l&rsquo;enregistrement et des autorisations des utilisateurs. Cela permet &agrave; un d&eacute;veloppeur Django de g&eacute;rer efficacement l&rsquo;authentification et l&rsquo;autorisation des utilisateurs.<\/p><h3 class=\"wp-block-heading\" id=\"h-authentification-de-l-utilisateur\">Authentification de l&rsquo;utilisateur<\/h3><p>Le syst&egrave;me d&rsquo;authentification int&eacute;gr&eacute; de Django simplifie la gestion des utilisateurs avec des fonctionnalit&eacute;s telles que la connexion, la d&eacute;connexion, la gestion des mots de passe et l&rsquo;enregistrement. Par d&eacute;faut, Django offre une fonctionnalit&eacute; de mod&egrave;le d&rsquo;utilisateur et des vues d&rsquo;authentification qui g&egrave;rent la plupart de ces t&acirc;ches.<\/p><p><strong>Configuration de la connexion et de la d&eacute;connexion des utilisateurs<\/strong><\/p><p>Pour mettre en &oelig;uvre les fonctionnalit&eacute;s de connexion et de d&eacute;connexion, vous pouvez utiliser les vues int&eacute;gr&eacute;es de Django qui se trouvent dans <strong>django.contrib.auth.views<\/strong>. Ces vues g&egrave;rent le processus d&rsquo;authentification et simplifient le code n&eacute;cessaire &agrave; ces op&eacute;rations.<\/p><ol class=\"wp-block-list\">\n<li>Configurez les URLs de connexion et de d&eacute;connexion dans votre fichier <strong>urls.py :<\/strong><\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from django.urls import path\nfrom django.contrib.auth import views as auth_views\n\nurlpatterns = [\n    path('login\/', auth_views.LoginView.as_view(), name='login'),\n    path('logout\/', auth_views.LogoutView.as_view(), name='logout'),\n]<\/pre><ul class=\"wp-block-list\">\n<li><strong>LoginView <\/strong>: G&egrave;re la connexion de l&rsquo;utilisateur.<\/li>\n\n\n\n<li><strong>LogoutView <\/strong>: D&eacute;connecte l&rsquo;utilisateur et le redirige vers la page sp&eacute;cifi&eacute;e.<\/li>\n<\/ul><ol start=\"2\" class=\"wp-block-list\">\n<li><strong>Cr&eacute;ez un template de formulaire de connexion : <\/strong>Vous pouvez cr&eacute;er un template de connexion simple (<strong>login.html<\/strong>) dans le r&eacute;pertoire <strong>templates <\/strong>de votre application :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;form method=\"post\"&gt;\n    {% csrf_token %}\n    &lt;div&gt;\n        &lt;label for=\"username\"&gt;Username:&lt;\/label&gt;\n        &lt;input type=\"text\" id=\"username\" name=\"username\" required&gt;\n    &lt;\/div&gt;\n    &lt;div&gt;\n        &lt;label for=\"password\"&gt;Password:&lt;\/label&gt;\n        &lt;input type=\"password\" id=\"password\" name=\"password\" required&gt;\n    &lt;\/div&gt;\n    &lt;button type=\"submit\"&gt;Login&lt;\/button&gt;\n&lt;\/form&gt;<\/pre><p>Ce template g&egrave;re l&rsquo;authentification de l&rsquo;utilisateur lorsqu&rsquo;un nom d&rsquo;utilisateur et un mot de passe valides sont soumis.<\/p><ol start=\"3\" class=\"wp-block-list\">\n<li><strong>Cr&eacute;er la d&eacute;connexion<\/strong> : Vous n&rsquo;avez pas besoin d&rsquo;un template s&eacute;par&eacute; pour vous d&eacute;connecter, car la LogoutView de Django s&rsquo;en charge. Vous pouvez simplement ajouter un lien de d&eacute;connexion dans votre template :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;a href=\"{% url 'logout' %}\"&gt;Logout&lt;\/a&gt;<\/pre><p><strong>Cr&eacute;ation d&rsquo;une vue d&rsquo;enregistrement des utilisateurs<\/strong><\/p><p>Django ne fournit pas de vue d&rsquo;enregistrement int&eacute;gr&eacute;e par d&eacute;faut, mais vous pouvez en cr&eacute;er une en utilisant <strong>UserCreationForm <\/strong>de Django :<\/p><ol class=\"wp-block-list\">\n<li>Cr&eacute;er une vue d&rsquo;enregistrement dans <strong>views.py<\/strong> :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from django.shortcuts import render, redirect\nfrom django.contrib.auth.forms import UserCreationForm\nfrom django.contrib.auth import login\n\ndef register(request):\n    if request.method == 'POST':\n        form = UserCreationForm(request.POST)\n        if form.is_valid():\n            user = form.save()\n            login(request, user)  # Automatically log the user in after registration\n            return redirect('home')  # Redirect to home page after successful registration\n    else:\n        form = UserCreationForm()\n    return render(request, 'register.html', {'form': form})<\/pre><ol start=\"2\" class=\"wp-block-list\">\n<li>Configurez l&rsquo;URL pour l&rsquo;enregistrement dans <strong>urls.py <\/strong>:<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">urlpatterns = [\n    path('register\/', views.register, name='register'),\n]<\/pre><ol start=\"3\" class=\"wp-block-list\">\n<li>Cr&eacute;ez le template de formulaire d&rsquo;inscription (<strong>register.html<\/strong>)<strong> :<\/strong><\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;form method=\"post\"&gt;\n    {% csrf_token %}\n    {{ form.as_p }}\n    &lt;button type=\"submit\"&gt;Register&lt;\/button&gt;\n&lt;\/form&gt;<\/pre><p>Cette vue d&rsquo;enregistrement permet aux utilisateurs de cr&eacute;er un compte &agrave; l&rsquo;aide d&rsquo;un simple formulaire. Une fois l&rsquo;inscription r&eacute;ussie, les utilisateurs sont automatiquement connect&eacute;s.<\/p><h3 class=\"wp-block-heading\" id=\"h-autorisation-de-l-utilisateur\">Autorisation de l&rsquo;utilisateur<\/h3><p>L&rsquo;autorisation de l&rsquo;utilisateur permet de contr&ocirc;ler l&rsquo;acc&egrave;s &agrave; certaines vues et actions en fonction des permissions ou des r&ocirc;les de l&rsquo;utilisateur. Le syst&egrave;me de permissions de Django facilite la gestion des utilisateurs qui peuvent acc&eacute;der &agrave; des parties sp&eacute;cifiques de votre application.<\/p><p><strong>Restreindre l&rsquo;acc&egrave;s &agrave; l&rsquo;aide d&rsquo;une connexion obligatoire<\/strong><\/p><p>Pour restreindre l&rsquo;acc&egrave;s &agrave; certaines vues, vous pouvez utiliser le d&eacute;corateur <strong>@login_required <\/strong>de Django, qui garantit que seuls les utilisateurs authentifi&eacute;s peuvent acc&eacute;der &agrave; une vue :<\/p><ol class=\"wp-block-list\">\n<li>Utilisation de <strong>@login_required <\/strong>dans les vues :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from django.contrib.auth.decorators import login_required\n\n@login_required\ndef dashboard(request):\n    return render(request, 'dashboard.html')<\/pre><p>Cela garantit que si un utilisateur n&rsquo;est pas connect&eacute;, il sera redirig&eacute; vers la page de connexion.<\/p><ol start=\"2\" class=\"wp-block-list\">\n<li>Application de <strong>@login_required <\/strong>dans les URL : Vous pouvez &eacute;galement appliquer <strong>@login_required <\/strong>directement dans votre <strong>fichier urls.py <\/strong>en utilisant le <strong>LoginRequiredMixin <\/strong>de Django pour les vues bas&eacute;es sur des classes :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from django.contrib.auth.mixins import LoginRequiredMixin\nfrom django.views.generic import TemplateView\n\nclass DashboardView(LoginRequiredMixin, TemplateView):\n    template_name = 'dashboard.html'<\/pre><p><strong>Gestion des autorisations des utilisateurs<\/strong><\/p><p>Django vous permet d&rsquo;attribuer diff&eacute;rentes <strong>permissions <\/strong>aux utilisateurs et aux groupes, qui peuvent &ecirc;tre utilis&eacute;es pour contr&ocirc;ler l&rsquo;acc&egrave;s &agrave; des vues ou &agrave; des actions sp&eacute;cifiques. Les permissions peuvent &ecirc;tre ajout&eacute;es aux mod&egrave;les d&rsquo;utilisateurs et v&eacute;rifi&eacute;es dans vos vues.<\/p><ol class=\"wp-block-list\">\n<li><strong>Attribution de permissions : <\/strong>Lors de la cr&eacute;ation d&rsquo;utilisateurs ou de groupes, vous pouvez attribuer des autorisations. Par exemple, un administrateur peut avoir le droit d&rsquo;ajouter ou de supprimer du contenu, tandis que les utilisateurs ordinaires ne peuvent que consulter le contenu.<\/li>\n<\/ol><ol start=\"2\" class=\"wp-block-list\">\n<li><strong>V&eacute;rification des autorisations dans les vues : <\/strong>Vous pouvez v&eacute;rifier si un utilisateur dispose des autorisations requises avant d&rsquo;autoriser l&rsquo;acc&egrave;s &agrave; certaines vues &agrave; l&rsquo;aide du d&eacute;corateur <strong>@permission_required :<\/strong><\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from django.contrib.auth.decorators import permission_required\n\n@permission_required('app.add_article')\ndef add_article(request):\n    # View code for adding an article<\/pre><p>Seuls les utilisateurs disposant de l&rsquo;autorisation add_article pourront acc&eacute;der &agrave; cette vue.<\/p><p><strong>Restreindre l&rsquo;acc&egrave;s en fonction des r&ocirc;les des utilisateurs<\/strong><\/p><p>La fonction de <strong>groupes<\/strong> de<strong> <\/strong>Django vous permet de cr&eacute;er des r&ocirc;les (tels que &laquo;&nbsp;editor ou &laquo;&nbsp;viewer&nbsp;&raquo;) et d&rsquo;assigner des utilisateurs &agrave; ces groupes. Vous pouvez ensuite v&eacute;rifier l&rsquo;appartenance d&rsquo;un utilisateur &agrave; un groupe pour en contr&ocirc;ler l&rsquo;acc&egrave;s.<\/p><ol class=\"wp-block-list\">\n<li><strong>Affectation d&rsquo;utilisateurs &agrave; des groupes :<\/strong> Les groupes peuvent &ecirc;tre cr&eacute;&eacute;s dans le tableau d&rsquo;administration de Django ou par programme :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from django.contrib.auth.models import Group, User\n\ngroup = Group.objects.get(name='editors')\nuser = User.objects.get(username='john')\nuser.groups.add(group)  # Affecte l'utilisateur au groupe 'editors'<\/pre><ol start=\"2\" class=\"wp-block-list\">\n<li><strong>V&eacute;rification de l&rsquo;appartenance &agrave; un groupe dans les vues : <\/strong>Vous pouvez restreindre les vues en fonction de l&rsquo;appartenance &agrave; un groupe :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from django.contrib.auth.decorators import user_passes_test\n\ndef is_editor(user):\n    return user.groups.filter(name='editors').exists()\n\n@user_passes_test(is_editor)\ndef editor_dashboard(request):\n    return render(request, 'editor_dashboard.html')<\/pre><p>Dans cet exemple, seuls les utilisateurs appartenant au groupe &laquo;&nbsp;editors&nbsp;&raquo; peuvent acc&eacute;der &agrave; la vue <strong>editor_dashboard.<\/strong><\/p><p>En tirant parti des syst&egrave;mes d&rsquo;authentification et d&rsquo;autorisation int&eacute;gr&eacute;s &agrave; Django, vous pouvez g&eacute;rer en toute s&eacute;curit&eacute; la connexion, l&rsquo;enregistrement et les autorisations des utilisateurs, en veillant &agrave; ce que les contenus sensibles soient prot&eacute;g&eacute;s et que l&rsquo;acc&egrave;s soit correctement contr&ocirc;l&eacute;.&nbsp;<\/p><h2 class=\"wp-block-heading\" id=\"h-gestion-des-formulaires-dans-django\">Gestion des formulaires dans Django<\/h2><p>Apr&egrave;s la mise en &oelig;uvre de l&rsquo;authentification et de l&rsquo;autorisation de l&rsquo;utilisateur, la prochaine fonctionnalit&eacute; cruciale de toute page web est le traitement des entr&eacute;es de l&rsquo;utilisateur par le biais de formulaires. Django fournit un syst&egrave;me puissant et flexible pour cr&eacute;er, traiter et valider les formulaires.<\/p><p>Le syst&egrave;me de gestion des formulaires de Django est construit sur des classes Python qui repr&eacute;sentent les formulaires comme des objets. Ces formulaires peuvent &ecirc;tre rendus dans des templates, valid&eacute;s et trait&eacute;s en utilisant seulement quelques lignes de code. Les formulaires peuvent &ecirc;tre cr&eacute;&eacute;s manuellement &agrave; l&rsquo;aide de la classe <strong>Form <\/strong>de Django ou g&eacute;n&eacute;r&eacute;s automatiquement &agrave; partir de mod&egrave;les &agrave; l&rsquo;aide de <strong>ModelForm<\/strong>.<\/p><h3 class=\"wp-block-heading\" id=\"h-creation-de-formulaires-a-l-aide-de-la-classe-form-de-django\">Cr&eacute;ation de formulaires &agrave; l&rsquo;aide de la classe Form de Django<\/h3><p>Pour cr&eacute;er un formulaire dans Django, vous commencez par d&eacute;finir une classe de formulaire dans votre fichier <strong>forms.py.<\/strong> Cette classe d&eacute;finira les champs et les r&egrave;gles de validation.<\/p><ol class=\"wp-block-list\">\n<li><strong>D&eacute;finition d&rsquo;un formulaire :<\/strong> Voici un exemple de formulaire de contact simple :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># forms.py\nfrom django import forms\n\nclass ContactForm(forms.Form):\n    name = forms.CharField(max_length=100, label='Votre Nom')\n    email = forms.EmailField(label='Votre Email')\n    message = forms.CharField(widget=forms.Textarea, label='Votre Message')<\/pre><p>Ce formulaire comprend trois champs : le nom, l&rsquo;adresse &eacute;lectronique et le message. Chaque champ est repr&eacute;sent&eacute; par une classe de champ de formulaire, telle que <strong>CharField <\/strong>pour le texte court, <strong>EmailField <\/strong>pour les courriels et <strong>Textarea <\/strong>pour les entr&eacute;es de texte plus longues.<\/p><ol start=\"2\" class=\"wp-block-list\">\n<li><strong>Afficher le formulaire dans un template :<\/strong> Pour afficher le formulaire sur une page web, vous pouvez le rendre dans un template. Vous pouvez rendre le formulaire manuellement ou utiliser les aides au rendu de formulaire int&eacute;gr&eacute;es &agrave; Django :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;form method=\"post\"&gt;\n    {% csrf_token %}\n    {{ form.as_p }}\n    &lt;button type=\"submit\"&gt;Envoyer le Message&lt;\/button&gt;\n&lt;\/form&gt;<\/pre><ul class=\"wp-block-list\">\n<li><strong>{% csrf_token %} <\/strong>: Ajoute un jeton CSRF pour se prot&eacute;ger contre les attaques de type &laquo;&nbsp;cross-site request forgery&nbsp;&raquo;.<\/li>\n\n\n\n<li><strong>{{ form.as_p }} <\/strong>: Rend les champs du formulaire avec chaque champ envelopp&eacute; dans une balise <strong>&lt;p&gt; <\/strong>pour faciliter la mise en forme.<\/li>\n<\/ul><ol start=\"3\" class=\"wp-block-list\">\n<li><strong>Traitement des soumissions de formulaires :<\/strong> Dans la vue qui g&egrave;re la soumission du formulaire, vous devrez valider les donn&eacute;es du formulaire et les traiter si le formulaire est valide :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># views.py\nfrom django.shortcuts import render\nfrom .forms import ContactForm\n\ndef contact_view(request):\n    if request.method == 'POST':\n        form = ContactForm(request.POST)\n        if form.is_valid():\n            # Traiter les donn&eacute;es, par exemple envoyer un e-mail ou les enregistrer dans la base de donn&eacute;es\n            name = form.cleaned_data['name']\n            email = form.cleaned_data['email']\n            message = form.cleaned_data['message']\n            # Rediriger vers une page de succ&egrave;s ou afficher un message de succ&egrave;s\n            return render(request, 'thanks.html')\n    else:\n        form = ContactForm()\n    return render(request, 'contact.html', {'form': form})<\/pre><p>Dans cette vue :<\/p><ul class=\"wp-block-list\">\n<li>Si le formulaire est soumis via une requ&ecirc;te POST, les donn&eacute;es du formulaire sont valid&eacute;es.<\/li>\n\n\n\n<li><strong>form.is_valid() <\/strong>: V&eacute;rifie si les donn&eacute;es du formulaire sont valid&eacute;es.<\/li>\n\n\n\n<li><strong>form.cleaned_data <\/strong>: Contient les donn&eacute;es valid&eacute;es du formulaire qui peuvent maintenant &ecirc;tre trait&eacute;es (par exemple, envoi d&rsquo;un courrier &eacute;lectronique).<\/li>\n\n\n\n<li>Si la requ&ecirc;te n&rsquo;est pas un <strong>POST<\/strong>, un formulaire vide est affich&eacute; pour que l&rsquo;utilisateur puisse le remplir.<\/li>\n<\/ul><h3 class=\"wp-block-heading\" id=\"h-validation-des-formulaires-et-traitement-des-erreurs\">Validation des formulaires et traitement des erreurs<\/h3><p>Les formulaires de Django sont dot&eacute;s d&rsquo;une validation int&eacute;gr&eacute;e qui garantit que les donn&eacute;es soumises sont correctes et s&eacute;curis&eacute;es. Les champs tels que <strong>EmailField <\/strong>valident automatiquement que l&rsquo;entr&eacute;e est une adresse &eacute;lectronique valide. Vous pouvez &eacute;galement cr&eacute;er une logique de validation personnalis&eacute;e pour appliquer des r&egrave;gles sp&eacute;cifiques.<\/p><p><strong>Validation int&eacute;gr&eacute;e<\/strong><\/p><p>Django effectue automatiquement certains contr&ocirc;les de validation pour vous :<\/p><ul class=\"wp-block-list\">\n<li><strong>Champs obligatoires <\/strong>: Par d&eacute;faut, tous les champs sont obligatoires, sauf si vous sp&eacute;cifiez required=False.<\/li>\n\n\n\n<li><strong>Types de champs <\/strong>: Les champs tels que <strong>EmailField<\/strong>, <strong>IntegerField <\/strong>et <strong>URLField <\/strong>valident automatiquement le type de donn&eacute;es saisies.<\/li>\n<\/ul><p><strong>Validation personnalis&eacute;e<\/strong><\/p><p>Vous pouvez &eacute;galement d&eacute;finir une logique de validation personnalis&eacute;e en rempla&ccedil;ant la m&eacute;thode <strong>clean() <\/strong>ou en cr&eacute;ant des validateurs de champs personnalis&eacute;s.<\/p><ol class=\"wp-block-list\">\n<li>Ajout d&rsquo;un validateur personnalis&eacute; pour le champ name :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># forms.py\nfrom django import forms\nfrom django.core.exceptions import ValidationError\n\nclass ContactForm(forms.Form):\n    name = forms.CharField(max_length=100, label='Your Name')\n    email = forms.EmailField(label='Your Email')\n    message = forms.CharField(widget=forms.Textarea, label='Your Message')\n\n    def clean_name(self):\n        name = self.cleaned_data.get('name')\n        if \"spam\" in name.lower():\n            raise ValidationError(\"Invalid name: 'spam' is not allowed.\")\n        return name<\/pre><p>Dans cet exemple, si le nom contient le mot <strong>spam<\/strong>, Django l&egrave;vera une erreur de validation.<\/p><ol start=\"2\" class=\"wp-block-list\">\n<li><strong>Gestion des erreurs de formulaire dans les templates :<\/strong> Vous pouvez personnaliser l&rsquo;affichage des erreurs de formulaire dans les templates. Django ajoute automatiquement des messages d&rsquo;erreur &agrave; chaque champ, que vous pouvez afficher comme suit :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;form method=\"post\"&gt;\n    {% csrf_token %}\n    &lt;div&gt;\n        {{ form.name.label_tag }} {{ form.name }}\n        {% if form.name.errors %}\n            &lt;div class=\"error\"&gt;{{ form.name.errors }}&lt;\/div&gt;\n        {% endif %}\n    &lt;\/div&gt;\n    &lt;div&gt;\n        {{ form.email.label_tag }} {{ form.email }}\n        {% if form.email.errors %}\n            &lt;div class=\"error\"&gt;{{ form.email.errors }}&lt;\/div&gt;\n        {% endif %}\n    &lt;\/div&gt;\n    &lt;div&gt;\n        {{ form.message.label_tag }} {{ form.message }}\n        {% if form.message.errors %}\n            &lt;div class=\"error\"&gt;{{ form.message.errors }}&lt;\/div&gt;\n        {% endif %}\n    &lt;\/div&gt;\n    &lt;button type=\"submit\"&gt;Send Message&lt;\/button&gt;\n&lt;\/form&gt;<\/pre><p>Les utilisateurs peuvent ainsi voir les messages d&rsquo;erreur pertinents &agrave; c&ocirc;t&eacute; des champs qu&rsquo;ils doivent corriger.<\/p><h3 class=\"wp-block-heading\" id=\"h-creation-de-formulaires-a-partir-de-modeles-a-l-aide-de-modelform\">Cr&eacute;ation de formulaires &agrave; partir de mod&egrave;les &agrave; l&rsquo;aide de ModelForm<\/h3><p>Dans de nombreux cas, les formulaires sont li&eacute;s &agrave; des mod&egrave;les. Django facilite la cr&eacute;ation de formulaires directement &agrave; partir de mod&egrave;les en utilisant <strong>ModelForm<\/strong>. Cela permet de gagner du temps en g&eacute;n&eacute;rant automatiquement des champs de formulaire bas&eacute;s sur les champs du mod&egrave;le.<\/p><ol class=\"wp-block-list\">\n<li><strong>Cr&eacute;ation d&rsquo;un ModelForm : <\/strong>Supposons que vous ayez un mod&egrave;le <strong>Post <\/strong>dans votre fichier <strong>models.py :<\/strong><\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># models.py\nfrom django.db import models\n\nclass Post(models.Model):\n    title = models.CharField(max_length=200)\n    content = models.TextField()\n    created_at = models.DateTimeField(auto_now_add=True)<\/pre><p>Vous pouvez cr&eacute;er un formulaire pour ce mod&egrave;le comme suit :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># forms.py\nfrom django import forms\nfrom .models import Post\n\nclass PostForm(forms.ModelForm):\n    class Meta:\n        model = Post\n        fields = ['title', 'content']<\/pre><ol start=\"2\" class=\"wp-block-list\">\n<li>Utilisation du <strong>ModelForm <\/strong>dans une vue :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># views.py\nfrom django.shortcuts import render\nfrom .forms import PostForm\n\ndef create_post(request):\n    if request.method == 'POST':\n        form = PostForm(request.POST)\n        if form.is_valid():\n            form.save()  # Enregistre les donn&eacute;es du formulaire dans la base de donn&eacute;es\n            return redirect('post_list')  # Redirige vers une liste de posts\n    else:\n        form = PostForm()\n    return render(request, 'create_post.html', {'form': form})<\/pre><p>En utilisant <strong>ModelForm<\/strong>, Django g&eacute;n&egrave;re automatiquement des champs de formulaire bas&eacute;s sur les champs du mod&egrave;le Post et g&egrave;re l&rsquo;enregistrement du formulaire dans la base de donn&eacute;es.<\/p><h2 class=\"wp-block-heading\" id=\"h-deployer-une-application-django\">D&eacute;ployer une application Django<\/h2><p>Une fois que votre application est enti&egrave;rement d&eacute;velopp&eacute;e et test&eacute;e sur votre machine locale, l&rsquo;&eacute;tape finale consiste &agrave; la d&eacute;ployer sur un serveur r&eacute;el afin que les utilisateurs puissent y acc&eacute;der. Le d&eacute;ploiement d&rsquo;un projet Django n&eacute;cessite un examen attentif des meilleures pratiques pour garantir la s&eacute;curit&eacute;, l&rsquo;&eacute;volutivit&eacute; et les performances. Dans cette section, nous aborderons les &eacute;tapes essentielles du d&eacute;ploiement de votre application sur un VPS que tout d&eacute;veloppeur Django devrait conna&icirc;tre.<\/p><h3 class=\"wp-block-heading\" id=\"h-meilleures-pratiques-pour-le-deploiement-d-un-projet-django\">Meilleures pratiques pour le d&eacute;ploiement d&rsquo;un projet Django<\/h3><p>Avant de plonger dans les &eacute;tapes techniques, il est important de suivre quelques bonnes pratiques lors de la pr&eacute;paration de votre projet Django pour le d&eacute;ploiement :<\/p><ol class=\"wp-block-list\">\n<li><strong>Utilisez des variables d&rsquo;environnement <\/strong>: Stockez les informations sensibles telles que les cl&eacute;s secr&egrave;tes, les identifiants de base de donn&eacute;es et les cl&eacute;s d&rsquo;API dans des variables d&rsquo;environnement au lieu de les coder en dur dans vos param&egrave;tres.<\/li>\n\n\n\n<li><strong>D&eacute;sactiver le mode d&eacute;bogage <\/strong>: Assurez-vous de d&eacute;finir <strong>DEBUG = False <\/strong>dans votre fichier <strong>settings.py <\/strong>avant de d&eacute;ployer votre projet en production. Le mode d&eacute;bogage peut exposer des informations sensibles aux attaquants.<\/li>\n\n\n\n<li><strong>D&eacute;finissez les h&ocirc;tes autoris&eacute;s <\/strong>: Dans votre fichier <strong>settings.py<\/strong>, d&eacute;finissez le param&egrave;tre <strong>ALLOWED_HOSTS <\/strong>pour inclure le(s) nom(s) de domaine o&ugrave; votre application sera h&eacute;berg&eacute;e. Par exemple :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">ALLOWED_HOSTS = ['votredomaine.com', 'www.votredomaine.com']<\/pre><ol start=\"4\" class=\"wp-block-list\">\n<li><strong>S&eacute;curisez l&rsquo;application <\/strong>: Envisagez d&rsquo;utiliser HTTPS pour s&eacute;curiser les communications entre le serveur et les utilisateurs, et utilisez les param&egrave;tres de s&eacute;curit&eacute; int&eacute;gr&eacute;s de Django tels que <strong>SECURE_SSL_REDIRECT<\/strong>, <strong>CSRF_COOKIE_SECURE et SESSION_COOKIE_SECURE<\/strong>.<\/li>\n\n\n\n<li><strong>Traitement des fichiers statiques <\/strong>: Assurez-vous que les fichiers statiques tels que CSS et JavaScript sont correctement collect&eacute;s et servis. Django fournit la commande <strong>collectstatic <\/strong>pour g&eacute;rer cela.<\/li>\n\n\n\n<li><strong>Configuration de la base de donn&eacute;es <\/strong>: Assurez-vous que la base de donn&eacute;es est correctement configur&eacute;e et &eacute;vitez d&rsquo;utiliser SQLite pour la production. Utilisez une base de donn&eacute;es plus robuste comme PostgreSQL ou MySQL.<\/li>\n<\/ol><h3 class=\"wp-block-heading\" id=\"h-deployer-django-sur-un-vps\">D&eacute;ployer Django sur un VPS<\/h3><p>Maintenant que vous avez appris les meilleures pratiques pour pr&eacute;parer un projet Django, il est temps de le d&eacute;ployer sur un serveur priv&eacute; virtuel (VPS). Dans cette section, nous vous guiderons &agrave; travers les &eacute;tapes pour mettre en place votre serveur, configurer les services n&eacute;cessaires et rendre votre application Django vivante et accessible aux utilisateurs.<\/p><p><strong>Cr&eacute;ation d&rsquo;un fichier requirements.txt en Python<\/strong><\/p><p>Un fichier <strong>requirements.txt <\/strong>liste toutes les d&eacute;pendances Python dont votre projet Django a besoin pour fonctionner. Ce fichier vous permet d&rsquo;installer tous les paquets n&eacute;cessaires en une seule commande.<\/p><p>Assurez-vous d&rsquo;&ecirc;tre dans le r&eacute;pertoire principal de votre projet, o&ugrave; vous avez le fichier <strong>manage.py<\/strong>, et assurez-vous que votre environnement virtuel est actif.<\/p><p>Ensuite, g&eacute;n&eacute;rez le fichier <strong>requirements.txt <\/strong>avec la commande suivante :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">pip3 freeze &gt; requirements.txt<\/pre><p>Cette commande cr&eacute;era un fichier <strong>requirements.txt <\/strong>dans votre r&eacute;pertoire actuel avec tous les paquets install&eacute;s et leurs versions que vous avez dans votre environnement virtuel actuel.<\/p><p>Ensuite, ouvrez <strong>requirements.txt <\/strong>et assurez-vous que toutes les d&eacute;pendances n&eacute;cessaires &agrave; l&rsquo;ex&eacute;cution de votre projet y figurent.<\/p><p><strong>T&eacute;l&eacute;chargement du projet vers un d&eacute;p&ocirc;t distant (GitHub)<\/strong><\/p><p>Avant de d&eacute;ployer votre projet sur un VPS, il est conseill&eacute; de t&eacute;l&eacute;charger votre code sur un d&eacute;p&ocirc;t distant, tel que GitHub, afin de contr&ocirc;ler les versions et de faciliter la collaboration. De plus, cela simplifie le processus de d&eacute;ploiement lui-m&ecirc;me.<\/p><ol class=\"wp-block-list\">\n<li><strong>Installez Git CLI et initialisez un d&eacute;p&ocirc;t local. <\/strong>Assurez-vous d&rsquo;&ecirc;tre dans le dossier principal de votre projet, o&ugrave; vous avez le fichier <strong>manage.py<\/strong>, et ex&eacute;cutez ces commandes :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sudo apt install git-all<\/pre><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git init<\/pre><ol start=\"2\" class=\"wp-block-list\">\n<li><strong>Cr&eacute;ez un fichier .gitignore et ajoutez-y du contenu.<\/strong> Le <a href=\"https:\/\/docs.github.com\/fr\/get-started\/getting-started-with-git\/ignoring-files\" target=\"_blank\" rel=\"noopener\">fichier .gitignore<\/a> indique &agrave; Git les fichiers &agrave; ignorer lors de l&rsquo;envoi de code vers votre d&eacute;p&ocirc;t distant. Cela permet d&rsquo;ignorer les fichiers contenant des informations sensibles ainsi que les fichiers locaux non pertinents tels que les journaux. Voici un exemple de fichier <strong>.gitignore <\/strong>pour un projet Django :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">venv\/\n__pycache__\/\ndb.sqlite3\n*.pyc\n*.log\nmedia\/<\/pre><ol start=\"3\" class=\"wp-block-list\">\n<li><strong>Assainissez les informations sensibles dans votre fichier settings.py.<\/strong> Assurez-vous d&rsquo;assainir les informations sensibles dans votre fichier settings.py, telles que les mots de passe, les noms d&rsquo;utilisateur, etc. Une fois le projet d&eacute;ploy&eacute;, vous pouvez ajouter les informations d&rsquo;identification &agrave; votre VPS.<\/li>\n\n\n\n<li>Ajoutez et engagez vos fichiers<strong>.<\/strong><\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git add .<\/pre><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git commit -m \"Initial commit\"<\/pre><ol start=\"5\" class=\"wp-block-list\">\n<li><strong>S&rsquo;inscrire sur GitHub et cr&eacute;er un d&eacute;p&ocirc;t distant<\/strong>. Allez sur <a href=\"https:\/\/github.com\/signup\" target=\"_blank\" rel=\"noopener\">GitHub<\/a> et inscrivez-vous ou connectez-vous &agrave; votre compte. Cr&eacute;ez un nouveau d&eacute;p&ocirc;t, d&eacute;finissez-le comme priv&eacute; et copiez son lien distant.<\/li>\n\n\n\n<li>Configurez l&rsquo;origine et la branche Git distante.<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git remote add origin https:\/\/github.com\/url-to-repository-you-created<\/pre><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git branch -M main<\/pre><ol start=\"7\" class=\"wp-block-list\">\n<li><strong>V&eacute;rifiez l&rsquo;&eacute;tat de votre d&eacute;p&ocirc;t local et transf&eacute;rez des fichiers.<\/strong> Avant de transf&eacute;rer des fichiers, vous devez ex&eacute;cuter la commande <strong>status <\/strong>et vous assurer qu&rsquo;aucun fichier que vous ne souhaitez pas transf&eacute;rer n&rsquo;a &eacute;t&eacute; ajout&eacute; :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git status<\/pre><p>Confirmez que seuls les fichiers que vous souhaitez t&eacute;l&eacute;charger sont ajout&eacute;s et transf&eacute;rez-les dans le r&eacute;f&eacute;rentiel distant :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git push -u origin main <\/pre><ol start=\"8\" class=\"wp-block-list\">\n<li>Acc&eacute;dez &agrave; votre d&eacute;p&ocirc;t distant sur GitHub et confirmez les fichiers t&eacute;l&eacute;charg&eacute;s.<\/li>\n<\/ol><p><strong>Pr&eacute;parez votre VPS et r&eacute;cup&eacute;rez le code du projet<\/strong><\/p><p>Ensuite, vous devez pr&eacute;parer votre VPS pour le d&eacute;ploiement et y t&eacute;l&eacute;charger votre code :<\/p><ol class=\"wp-block-list\">\n<li>SSH dans votre VPS<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">ssh root@votre_ip_vps<\/pre><ol start=\"2\" class=\"wp-block-list\">\n<li>Installer <strong>Nginx <\/strong>et <strong>Gunicorn<\/strong><\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sudo apt install nginx<\/pre><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sudo pip3 install gunicorn<\/pre><p>Nous utiliserons <strong>Nginx <\/strong>comme serveur web et <strong>Gunicorn <\/strong>comme serveur d&rsquo;application.<\/p><ol start=\"3\" class=\"wp-block-list\">\n<li>R&eacute;cup&eacute;rer le code de GitHub<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git clone https:\/\/github.com\/your-repository\/project-name.git<\/pre><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">cd project-name<\/pre><ol start=\"4\" class=\"wp-block-list\">\n<li>D&eacute;marrer un environnement virtuel et installer les d&eacute;pendances<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">python3 -m venv env_namesource env_name\/bin\/activate<\/pre><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">pip3 install -r requirements.txt<\/pre><ol start=\"5\" class=\"wp-block-list\">\n<li>Remplir les donn&eacute;es assainies dans votre fichier <strong>settings.py<\/strong><\/li>\n<\/ol><ol start=\"6\" class=\"wp-block-list\">\n<li>Ex&eacute;cuter les migrations et collecter les fichiers statiques<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">python manage.py migrate<\/pre><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">python manage.py collectstatic<\/pre><ol start=\"7\" class=\"wp-block-list\">\n<li>Configurer Gunicorn comme serveur d&rsquo;application. Cr&eacute;ez un fichier de service :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sudo nano \/etc\/systemd\/system\/gunicorn.service<\/pre><p>Ajoutez la configuration suivante :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">[Unit]\nDescription=gunicorn daemon\nAfter=network.target\n\n[Service]\nUser=your-username\nGroup=www-data\nWorkingDirectory=\/your\/project\/directory\nExecStart=\/your\/project\/directory\/env_name\/bin\/gunicorn --access-logfile - --workers 3 --bind unix:\/your\/project\/directory.sock myproject.wsgi:application\n\n[Install]\nWantedBy=multi-user.target<\/pre><p>Veillez &agrave; saisir votre nom d&rsquo;utilisateur factuel et le chemin du r&eacute;pertoire du projet au lieu de <strong>your-username <\/strong>et <strong>\/your\/project\/directory<\/strong>.<\/p><ol start=\"8\" class=\"wp-block-list\">\n<li>D&eacute;marrer et activer Gunicorn<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sudo systemctl start gunicorn<\/pre><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sudo systemctl enable gunicorn<\/pre><ol start=\"9\" class=\"wp-block-list\">\n<li>Configurer Nginx comme serveur web. Cr&eacute;ez un fichier de configuration :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sudo nano \/etc\/nginx\/sites-available\/myproject<\/pre><p>Ajoutez la configuration suivante :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">server {\n    listen 80;\n    server_name yourdomain.com www.yourdomain.com;\n\n    location \/ {\n        proxy_pass http:\/\/unix:\/your\/project\/directory\/project-name.sock;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n\n    location \/static\/ {\n        alias \/your\/project\/directory\/static\/;\n    }\n\n    location \/media\/ {\n        alias \/your\/project\/directory\/media\/;\n    }\n}<\/pre><p>Veillez &agrave; saisir le chemin de votre r&eacute;pertoire factuel au lieu de <strong>\/your\/project\/directory<\/strong>.<\/p><ol start=\"10\" class=\"wp-block-list\">\n<li>Activer le site et red&eacute;marrer Nginx<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sudo ln -s \/etc\/nginx\/sites-available\/myproject \/etc\/nginx\/sites-enabled<\/pre><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sudo systemctl restart nginx<\/pre><ol start=\"11\" class=\"wp-block-list\">\n<li>S&eacute;curiser le serveur avec SSL. Nous allons utiliser Certbot pour appliquer un certificat SSL et rediriger le trafic de HTTP vers HTTPS :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sudo apt install certbot python3-certbot-nginxsudo certbot --nginx -d yourdomain.com -d www.yourdomain.com<\/pre><p>En suivant ces &eacute;tapes, vous avez d&eacute;ploy&eacute; avec succ&egrave;s votre application Django sur un VPS en utilisant les meilleures pratiques, en assurant &agrave; la fois la s&eacute;curit&eacute; et la performance.&nbsp;<\/p><p>Avec Nginx et Gunicorn qui s&rsquo;occupent du web et de l&rsquo;application, votre application est maintenant pr&ecirc;te &agrave; g&eacute;rer du trafic en direct. Visitez votre domaine &ndash; si vous avez tout configur&eacute; correctement, vous devriez maintenant voir votre application web en direct.<\/p><h2 class=\"wp-block-heading\" id=\"h-conclusion\">Conclusion<\/h2><p>Dans ce tutoriel, nous avons couvert les &eacute;tapes essentielles pour d&eacute;marrer avec Django, de la mise en place de votre environnement de d&eacute;veloppement au d&eacute;ploiement de votre projet sur un serveur virtuel. Vous avez appris &agrave; cr&eacute;er un projet, &agrave; g&eacute;rer des mod&egrave;les et &agrave; stocker des donn&eacute;es, &agrave; construire des vues et des templates, &agrave; travailler avec des URL, &agrave; g&eacute;rer des fichiers statiques, &agrave; mettre en &oelig;uvre l&rsquo;authentification des utilisateurs et &agrave; d&eacute;ployer votre application sur un serveur live.<\/p><p>Avec ces comp&eacute;tences de base, vous &ecirc;tes maintenant &eacute;quip&eacute; pour commencer &agrave; construire vos propres projets Django. Qu&rsquo;il s&rsquo;agisse d&rsquo;un simple blog ou d&rsquo;une application web plus complexe, Django vous fournit les outils n&eacute;cessaires pour donner vie &agrave; vos id&eacute;es. Plongez, exp&eacute;rimentez et voyez ce que vous pouvez cr&eacute;er avec ce puissant framework web.<\/p><h2 class=\"wp-block-heading\" id=\"h-tutoriel-django-faq\">Tutoriel Django &ndash; FAQ<\/h2><div class=\"schema-faq wp-block-yoast-faq-block\"><div class=\"schema-faq-section\" id=\"faq-question-1737809900163\"><h3 class=\"schema-faq-question\">Qu&rsquo;est-ce que Django ?<\/h3> <p class=\"schema-faq-answer\">Django est un framework web Python de haut niveau con&ccedil;u pour un d&eacute;veloppement rapide et une conception propre et pragmatique. Il simplifie le processus de cr&eacute;ation d&rsquo;applications web en fournissant des composants r&eacute;utilisables tels que l&rsquo;authentification, l&rsquo;ORM et le routage, tout en promouvant les meilleures pratiques telles que DRY (Don&rsquo;t Repeat Yourself) et la s&eacute;curit&eacute;.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1737809909801\"><h3 class=\"schema-faq-question\">Pourquoi utiliser Django ?<\/h3> <p class=\"schema-faq-answer\">Django est utilis&eacute; pour sa rapidit&eacute;, sa s&eacute;curit&eacute; et son &eacute;volutivit&eacute;. Il simplifie le d&eacute;veloppement web gr&acirc;ce &agrave; des fonctionnalit&eacute;s int&eacute;gr&eacute;es telles que l&rsquo;authentification, un ORM pour la gestion des bases de donn&eacute;es et le routage des URL. Sa philosophie &laquo;&nbsp;batteries incluses&nbsp;&raquo; permet aux d&eacute;veloppeurs Django de cr&eacute;er rapidement des applications robustes tout en respectant les meilleures pratiques.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1737809922676\"><h3 class=\"schema-faq-question\">Dois-je conna&icirc;tre Python pour apprendre Django ?<\/h3> <p class=\"schema-faq-answer\">Oui, il est essentiel de conna&icirc;tre Python pour apprendre Django, un framework web bas&eacute; sur Python. Une bonne connaissance de la syntaxe, des structures de donn&eacute;es et de la programmation orient&eacute;e objet de Python vous aidera &agrave; comprendre la structure et les fonctionnalit&eacute;s de Django, ce qui rendra le processus d&rsquo;apprentissage plus fluide et plus efficace.<\/p> <\/div> <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Django est un framework web Python de haut niveau utilis&eacute; pour un d&eacute;veloppement rapide et une conception propre et pragmatique. Il simplifie de nombreuses t&acirc;ches de d&eacute;veloppement web, vous permettant de vous concentrer sur l&rsquo;&eacute;criture de votre application sans avoir &agrave; r&eacute;inventer la roue. Cela en fait l&rsquo;un des frameworks web les plus populaires et [&#8230;]<\/p>\n<p><a class=\"btn btn-secondary understrap-read-more-link\" href=\"\/fr\/tutoriels\/tutoriel-django\">Read More&#8230;<\/a><\/p>\n","protected":false},"author":355,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"rank_math_title":"Tutoriel Django : Cr\u00e9er et d\u00e9ployer votre premier projet","rank_math_description":"D\u00e9couvrez notre tutoriel Django pour apprendre les bases essentielles de ce framework web con\u00e7u pour un d\u00e9veloppement rapide et efficace.","rank_math_focus_keyword":"tutoriel django","footnotes":""},"categories":[4760],"tags":[],"class_list":["post-37819","post","type-post","status-publish","format-standard","hentry","category-vps"],"hreflangs":[{"locale":"en-US","link":"https:\/\/www.hostinger.com\/tutorials\/django-tutorial","default":0},{"locale":"pt-BR","link":"https:\/\/www.hostinger.com\/br\/tutoriais\/tutorial-django","default":0},{"locale":"fr-FR","link":"https:\/\/www.hostinger.com\/fr\/tutoriels\/tutoriel-django","default":0},{"locale":"en-UK","link":"https:\/\/www.hostinger.com\/uk\/tutorials\/django-tutorial","default":0},{"locale":"en-MY","link":"https:\/\/www.hostinger.com\/my\/tutorials\/coolify-vs-dokploy-10","default":0},{"locale":"en-PH","link":"https:\/\/www.hostinger.com\/ph\/tutorials\/django-tutorial","default":0},{"locale":"en-IN","link":"https:\/\/www.hostinger.com\/in\/tutorials\/django-tutorial","default":0},{"locale":"en-CA","link":"https:\/\/www.hostinger.com\/ca\/tutorials\/django-tutorial","default":0},{"locale":"pt-PT","link":"https:\/\/www.hostinger.com\/pt\/tutoriais\/tutorial-django","default":0},{"locale":"en-AU","link":"https:\/\/www.hostinger.com\/au\/tutorials\/django-tutorial","default":0},{"locale":"en-NG","link":"https:\/\/www.hostinger.com\/ng\/tutorials\/django-tutorial","default":0}],"_links":{"self":[{"href":"https:\/\/www.hostinger.com\/fr\/tutoriels\/wp-json\/wp\/v2\/posts\/37819","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hostinger.com\/fr\/tutoriels\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hostinger.com\/fr\/tutoriels\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/fr\/tutoriels\/wp-json\/wp\/v2\/users\/355"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/fr\/tutoriels\/wp-json\/wp\/v2\/comments?post=37819"}],"version-history":[{"count":7,"href":"https:\/\/www.hostinger.com\/fr\/tutoriels\/wp-json\/wp\/v2\/posts\/37819\/revisions"}],"predecessor-version":[{"id":37917,"href":"https:\/\/www.hostinger.com\/fr\/tutoriels\/wp-json\/wp\/v2\/posts\/37819\/revisions\/37917"}],"wp:attachment":[{"href":"https:\/\/www.hostinger.com\/fr\/tutoriels\/wp-json\/wp\/v2\/media?parent=37819"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hostinger.com\/fr\/tutoriels\/wp-json\/wp\/v2\/categories?post=37819"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hostinger.com\/fr\/tutoriels\/wp-json\/wp\/v2\/tags?post=37819"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}