{"id":12879,"date":"2026-07-11T05:58:22","date_gmt":"2026-07-10T22:58:22","guid":{"rendered":"\/de\/tutorials\/?p=12879"},"modified":"2026-07-11T05:58:24","modified_gmt":"2026-07-10T22:58:24","slug":"django-tutorial","status":"publish","type":"post","link":"\/de\/tutorials\/django-tutorial\/","title":{"rendered":"Django-Tutorial: Die Grundlagen des Django-Frameworks verstehen"},"content":{"rendered":"<p>Django ist ein hochentwickeltes Python-Web-Framework, das f&uuml;r die schnelle Entwicklung und ein klares, pragmatisches Design eingesetzt wird. Es vereinfacht viele Aufgaben der Webentwicklung, sodass Sie sich auf das Schreiben Ihrer Anwendung konzentrieren k&ouml;nnen, ohne alles neu einrichten zu m&uuml;ssen.<\/p><p>Dies macht es zu einem der beliebtesten und am weitesten verbreiteten Web-Frameworks f&uuml;r die Erstellung dynamischer, datengesteuerter Websites und Anwendungen.<\/p><p>In diesem Tutorial f&uuml;hren wir Sie durch die Kerngrundlagen von Django und vermitteln Ihnen eine solide Basis f&uuml;r die Erstellung Ihrer ersten Webanwendung. Wir behandeln alles von der Einrichtung eines VPS &uuml;ber die Installation von Python bis hin zur Bereitstellung Ihres Django-Projekts.<\/p><p>Am Ende dieses Tutorials sind Sie rundum &uuml;ber voll funktionsf&auml;hige Webanwendungen informiert und verf&uuml;gen &uuml;ber ein solides Verst&auml;ndnis, wie Sie Ihre eigenen Projekte mit Django weiterentwickeln k&ouml;nnen. Ganz gleich, ob Sie gerade erst mit der Webentwicklung starten oder Ihre Kenntnisse erweitern m&ouml;chten &ndash; dieses Django-Tutorial wird Ihnen helfen, die Grundlagen zu meistern.<\/p><h2 class=\"wp-block-heading\" id=\"h-installation-des-django-frameworks\">Installation des Django-Frameworks<\/h2><p>Bevor wir uns mit der Erstellung Ihrer Django-Anwendung befassen, m&uuml;ssen Sie Ihre Entwicklungsumgebung einrichten. Dieser Vorgang umfasst die Einrichtung eines VPS, die Installation von Python, die Erstellung einer virtuellen Umgebung und die Installation von Django.<\/p><h3 class=\"wp-block-heading\">Voraussetzungen<\/h3><p>Bevor Sie mit Django arbeiten, ist es wichtig, &uuml;ber ein grundlegendes Verst&auml;ndnis bestimmter Konzepte zu verf&uuml;gen. Folgendes sollten Sie bereits kennen:<\/p><ul class=\"wp-block-list\">\n<li><strong>Grundkenntnisse in Python<\/strong>: Fundiertes Verst&auml;ndnis der Python-Grundlagen &ndash; Datentypen, Kontrollfluss, Funktionen, Klassen, Module.<\/li>\n\n\n\n<li><strong>Grundlagen <\/strong>von <strong>HTML, CSS und JavaScript<\/strong>: Grundkenntnisse in HTML, CSS und JavaScript.<\/li>\n\n\n\n<li><strong>Verst&auml;ndnis von Datenbanken<\/strong>: Datenbankkonzepte &ndash; Tabellen, Datens&auml;tze, Prim&auml;rschl&uuml;ssel, Fremdschl&uuml;ssel. SQL-Kenntnisse sind von Vorteil.<\/li>\n\n\n\n<li><strong>Vertrautheit mit der Befehlszeilenschnittstelle (CLI)<\/strong>: Grundkenntnisse der <a href=\"\/de\/tutorials\/linux-befehle\/\">wichtigsten Linux-Befehle<\/a>.<\/li>\n<\/ul><p>Wenn Sie diese Voraussetzungen erf&uuml;llen, k&ouml;nnen Sie die erforderlichen Schritte zur Installation von Django verstehen und auszuf&uuml;hren. Sie sind bereit, mit der Entwicklung Ihrer Webanwendungen zu beginnen.<\/p><h3 class=\"wp-block-heading\">Einen Django-VPS kaufen<\/h3><p>Die Wahl der richtigen Hosting-Umgebung ist entscheidend f&uuml;r den reibungslosen Betrieb Ihrer Django-Anwendung. Ein Virtual Private Server (VPS) bietet mehr Kontrolle, Skalierbarkeit und Ressourcen als Shared Hosting und eignet sich daher ideal f&uuml;r Django-Projekte. <a href=\"\/de\/vps\/django-hosting\">Hostingers Django VPS-Hosting<\/a> ist eine ausgezeichnete Wahl und bietet sowohl erschwingliche Pl&auml;ne als auch Server, die sich einfach einrichten und verwalten lassen.<\/p><p>Ber&uuml;cksichtigen Sie bei der Auswahl eines VPS-Plans von Hostinger die Anforderungen Ihres Projekts:<\/p><ul class=\"wp-block-list\">\n<li><strong>CPU und RAM<\/strong>: Eine schnellere CPU und mehr RAM sorgen f&uuml;r eine bessere Leistung, insbesondere bei komplexeren Anwendungen oder h&ouml;heren Datenverkehrsaufkommen.<\/li>\n\n\n\n<li><strong>Speicherplatz<\/strong>: Django-Anwendungen arbeiten h&auml;ufig mit Datenbanken und statischen Dateien. Stellen Sie sicher, dass Ihr VPS &uuml;ber ausreichend SSD-Speicherplatz f&uuml;r Ihre Anforderungen verf&uuml;gt.<\/li>\n\n\n\n<li><strong>Bandbreite<\/strong>: W&auml;hlen Sie je nach erwartetem Datenverkehr einen Plan mit ausreichender Bandbreite, um Ihren Besucher ein verz&ouml;gerungsfreies Erlebnis zu bieten.<\/li>\n<\/ul><p>F&uuml;r ein einfaches Django-Projekt sollte ein VPS-Plan der unteren Preisklasse wie <strong>KVM 1 <\/strong>oder <strong>KVM 2 <\/strong>ausreichen; wenn Ihr Projekt jedoch w&auml;chst, k&ouml;nnen Sie problemlos auf Pl&auml;ne der h&ouml;heren Preisklasse upgraden und mehr Ressourcen erhalten.<\/p><figure class=\"wp-block-image size-large\"><a href=\"\/de\/vps-server\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" width=\"1024\" height=\"300\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2024\/02\/DE-VPS-hosting_in-text-banner.png\/w=1024,h=1024,fit=scale-down\" alt=\"\" class=\"wp-image-3556\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2024\/02\/DE-VPS-hosting_in-text-banner.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2024\/02\/DE-VPS-hosting_in-text-banner.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2024\/02\/DE-VPS-hosting_in-text-banner.png\/w=768,fit=scale-down 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure><p>Sobald Sie sich f&uuml;r einen VPS-Plan entschieden und den Kauf abgeschlossen haben, m&uuml;ssen Sie nur noch diesen Schritten folgen, um den Server einzurichten:<\/p><ol class=\"wp-block-list\">\n<li><strong>Starten Sie die VPS-Einrichtung<\/strong>: Melden Sie sich bei <a href=\"https:\/\/hpanel.hostinger.com\/de\" target=\"_blank\" rel=\"noopener\">hPanel<\/a> an &ndash; auf der Startseite sehen Sie eine ausstehende VPS-Einrichtung, die in etwa so aussieht:<\/li>\n<\/ol><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"6a51a5a5a0c0c\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a51a5a5a0c0c\" class=\"aligncenter size-full wp-lightbox-container\"><img decoding=\"async\" width=\"1121\" height=\"138\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/de\/tutorials\/wp-content\/uploads\/sites\/29\/2026\/07\/vps-setup.avif\" alt=\"Ausstehende Einrichtung von Hostinger KVM-Pl&auml;nen\n\" class=\"wp-image-13102\" srcset=\"https:\/\/www.hostinger.com\/de\/tutorials\/wp-content\/uploads\/sites\/29\/2026\/07\/vps-setup.avif 1121w, https:\/\/www.hostinger.com\/de\/tutorials\/wp-content\/uploads\/sites\/29\/2026\/07\/vps-setup-300x37.avif 300w, https:\/\/www.hostinger.com\/de\/tutorials\/wp-content\/uploads\/sites\/29\/2026\/07\/vps-setup-1024x126.avif 1024w, https:\/\/www.hostinger.com\/de\/tutorials\/wp-content\/uploads\/sites\/29\/2026\/07\/vps-setup-768x95.avif 768w\" sizes=\"(max-width: 1121px) 100vw, 1121px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--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>\n<\/div><p>Klicken Sie im n&auml;chsten Fenster auf <strong>Einrichten<\/strong> und <strong>Loslegen<\/strong>.<\/p><ol start=\"2\" class=\"wp-block-list\">\n<li><strong>W&auml;hlen Sie einen Standort f&uuml;r Ihren VPS aus<\/strong>: &Uuml;berlegen Sie, aus welcher Region Sie Traffic erwarten k&ouml;nnen. Die Region mit der geringsten Latenz ist nicht unbedingt die beste f&uuml;r Ihre Anwendung &ndash; etwa wenn der erwartete Traffic aus Australien kommt, w&auml;hrend Sie sich in Europa befinden.<\/li>\n<\/ol><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"6a51a5a5a1652\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a51a5a5a1652\" 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--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/de\/tutorials\/wp-content\/uploads\/sites\/29\/2026\/07\/vps-location-hpanel.avif\" alt=\"Standort f&uuml;r VPS ausw&auml;hlen\" class=\"wp-image-13103\" srcset=\"https:\/\/www.hostinger.com\/de\/tutorials\/wp-content\/uploads\/sites\/29\/2026\/07\/vps-location-hpanel.avif 515w, https:\/\/www.hostinger.com\/de\/tutorials\/wp-content\/uploads\/sites\/29\/2026\/07\/vps-location-hpanel-300x181.avif 300w\" sizes=\"(max-width: 515px) 100vw, 515px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--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>\n<\/div><ol start=\"3\" class=\"wp-block-list\">\n<li><strong>W&auml;hlen Sie eine Betriebssystemvorlage aus<\/strong>: F&uuml;r diese Anleitung sollten Sie <strong>Plain OS Ubuntu<\/strong> ausw&auml;hlen; Hostinger bietet jedoch auch ein Betriebssystem mit Panel-Optionen und ein Betriebssystem mit Anwendungsstack (vorinstallierte Software-Abh&auml;ngigkeiten) an.<\/li>\n\n\n\n<li><strong>Richten Sie Ihre VPS-Anmeldedaten ein<\/strong>: Geben Sie das Root-Passwort ein und f&uuml;gen Sie gegebenenfalls einen SSH-Schl&uuml;ssel hinzu. Schlie&szlig;en Sie die Einrichtung ab.<\/li>\n\n\n\n<li><strong>Stellen Sie eine Verbindung &uuml;ber SSH her<\/strong>: Verwenden Sie einen SSH-Client (z. B. PuTTY f&uuml;r Windows oder das Terminal f&uuml;r macOS\/Linux), um eine Verbindung zum Server herzustellen. Geben Sie in Ihrem Terminal Folgendes ein:<\/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@your_vps_ip<\/pre><p>Ersetzen Sie <strong>your_vps_ip <\/strong>durch die VPS-IP-Adresse von Hostinger. Sie werden anschlie&szlig;end aufgefordert, Ihr Root-Passwort einzugeben.<\/p><ol start=\"6\" class=\"wp-block-list\">\n<li><strong>Aktualisieren Sie den Server<\/strong>: Es ist wichtig, sicherzustellen, dass Ihr Server auf dem neuesten Stand ist. F&uuml;hren Sie den folgenden Befehl aus, um die Systempakete zu aktualisieren:<\/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>Nachdem der VPS nun bereit ist, k&ouml;nnen Sie Python und andere Abh&auml;ngigkeiten f&uuml;r die Django-Entwicklung installieren.<\/p><h3 class=\"wp-block-heading\">Python installieren<\/h3><p>Um Django ausf&uuml;hren zu k&ouml;nnen, m&uuml;ssen Sie <a href=\"\/de\/tutorials\/pip-auf-ubuntu-installieren\/\">Python und pip auf Ihrem VPS installieren<\/a>. Bei den meisten modernen Linux-Distributionen, wie beispielsweise Ubuntu, ist Python bereits vorinstalliert.<\/p><p>Falls Python bei Ihnen nicht installiert ist oder aktualisiert werden muss, k&ouml;nnen Sie dies ganz einfach tun. Verwenden Sie die folgenden Befehle, um die aktuelle Python-Version zu &uuml;berpr&uuml;fen und die neueste Version von Python 3 zu installieren:<\/p><ol class=\"wp-block-list\">\n<li>&Uuml;berpr&uuml;fen Sie, ob Python installiert ist:<\/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\":\"6a51a5a5a210b\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a51a5a5a210b\" 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--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/07\/python-version.png\/public\" alt=\"\" class=\"wp-image-13104\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--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>\n<\/div><ol start=\"2\" class=\"wp-block-list\">\n<li>Wenn Ihre Befehlszeile die Python-Versionsnummer ausgibt, ist die Programmiersprache bereits installiert. In diesem Fall m&uuml;ssen Sie lediglich pip installieren:<\/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-pip<\/pre><ol start=\"3\" class=\"wp-block-list\">\n<li>Installieren Sie Python und pip (falls erforderlich):<\/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>Sobald Python installiert ist, k&ouml;nnen Sie eine virtuelle Umgebung einrichten.<\/p><h3 class=\"wp-block-heading\">Eine virtuelle Umgebung einrichten<\/h3><p>Eine virtuelle Umgebung ist ein isolierter Bereich, in dem Sie Python-Pakete und Abh&auml;ngigkeiten f&uuml;r ein bestimmtes Projekt installieren k&ouml;nnen. Diese Vorgehensweise hat keine Auswirkungen auf die systemweite Python-Umgebung oder andere Projekte.<\/p><p>Dies ist bei der Arbeit mit Django von entscheidender Bedeutung, da verschiedene Projekte m&ouml;glicherweise unterschiedliche Versionen von Paketen erfordern. Eine virtuelle Umgebung stellt sicher, dass die Abh&auml;ngigkeiten jedes Projekts klar abgegrenzt sind und nicht mit anderen in Konflikt geraten.<\/p><p>Gr&uuml;nde f&uuml;r die Verwendung einer virtuellen Umgebung sind:<\/p><ul class=\"wp-block-list\">\n<li><strong>Isolation<\/strong>: H&auml;lt die Abh&auml;ngigkeiten Ihres Projekts von anderen Python-Projekten getrennt.<\/li>\n\n\n\n<li><strong>Versionsverwaltung<\/strong>: Sie k&ouml;nnen in jedem virtuellen Arbeitsbereich unterschiedliche Versionen von Paketen installieren und so Konflikte zwischen Projekten vermeiden.<\/li>\n\n\n\n<li><strong>&Uuml;bersichtlichere Umgebung<\/strong>: Sie k&ouml;nnen mit Paketen experimentieren, ohne die globale Python-Umgebung auf Ihrem Server zu beeintr&auml;chtigen.<\/li>\n<\/ul><p>Befolgen Sie diese Schritte, um eine virtuelle Umgebung auf Ihrem VPS einzurichten:<\/p><ol class=\"wp-block-list\">\n<li>Installieren Sie das <strong>venv<\/strong>-Paket (falls es noch nicht installiert ist):<\/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>Erstellen Sie das Verzeichnis, in dem Sie Ihr Django-Projekt speichern m&ouml;chten, wechseln Sie dorthin und erstellen Sie eine virtuelle Umgebung:<\/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>Ersetzen Sie <strong>myproject <\/strong>durch den Namen, den Sie Ihrem Projektordner geben m&ouml;chten.<\/p><ol start=\"3\" class=\"wp-block-list\">\n<li>Erstellen Sie mit <strong>venv<\/strong> eine virtuelle Umgebung:<\/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>Aktivieren Sie die virtuelle Umgebung:<\/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>Nach der Aktivierung &auml;ndert sich die Shell-Eingabeaufforderung entsprechend der Umgebung (z. B. <strong>(env_name)<\/strong>), was anzeigt, dass Sie in Ihrer virtuellen Umgebung arbeiten.<\/p><p>Diese Konfiguration stellt sicher, dass alle Django-bezogenen Abh&auml;ngigkeiten innerhalb der virtuellen Umgebung isoliert sind, wodurch Ihr Server &uuml;bersichtlich und strukturiert bleibt.<\/p><h3 class=\"wp-block-heading\">Django installieren<\/h3><p>Nachdem Sie Ihre virtuelle Umgebung eingerichtet haben, besteht der n&auml;chste Schritt darin, das Django-Framework selbst zu installieren. Dies k&ouml;nnen Sie mithilfe des Python-Paketmanagers <strong>pip<\/strong> tun. Durch die Installation von Django in Ihrer virtuellen Umgebung wird sichergestellt, dass es von anderen Projekten isoliert ist und unabh&auml;ngig verwaltet werden kann.<\/p><p>Befolgen Sie zur Installation von Django die folgenden Schritte:<\/p><ol class=\"wp-block-list\">\n<li>Installieren Sie bei aktivierter virtueller Umgebung mit pip die neueste Version von 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>Dadurch werden alle Abh&auml;ngigkeiten sowie das Django-Web-Framework in die virtuelle Umgebung heruntergeladen und installiert.<\/p><ol start=\"2\" class=\"wp-block-list\">\n<li>Verwenden Sie den folgenden Befehl, um zu &uuml;berpr&uuml;fen, ob Django installiert ist, und um die Version zu ermitteln:<\/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\":\"6a51a5a5a30c3\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a51a5a5a30c3\" 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--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/07\/django-installation.png\/public\" alt=\"\" class=\"wp-image-13106\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--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>\n<\/div><p>Dadurch wird die aktuell in Ihrer Umgebung installierte Django-Version angezeigt, was zus&auml;tzlich best&auml;tigt, dass die Installation erfolgreich war.<\/p><p>Nachdem Ihr VPS f&uuml;r das Django-Hosting vorbereitet ist, k&ouml;nnen Sie mit der Entwicklung Ihrer Anwendung beginnen.<\/p><h2 class=\"wp-block-heading\" id=\"h-ein-neues-django-projekt-erstellen\">Ein neues Django-Projekt erstellen<\/h2><p>Nun ist es an der Zeit, Ihre erste Django-App zu erstellen. In diesem Abschnitt legen Sie die Grundlage f&uuml;r den Code, die Sie ben&ouml;tigen, um mit der Entwicklung Ihrer Website zu beginnen.<\/p><p>Erstellen Sie folgenderma&szlig;en ein neues Django-Projekt:<\/p><ol class=\"wp-block-list\">\n<li><strong>Wechseln Sie in Ihr Projektverzeichnis<\/strong>: Falls Sie sich noch nicht in dem Verzeichnis befinden, in dem Sie das Projekt erstellen m&ouml;chten, dann verwenden Sie den Befehl <strong>cd<\/strong>, um dorthin zu wechseln.<\/li>\n\n\n\n<li><strong>F&uuml;hren Sie den Befehl startproject aus<\/strong>: Verwenden Sie den Django-Befehl<strong> startproject<\/strong>, um ein neues Projekt zu erstellen. Ersetzen Sie <strong>myproject<\/strong> durch den Namen Ihres Projekts:<\/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>Dadurch wird ein neues Verzeichnis namens <strong>myproject<\/strong> erstellt, das die Standard-Projektstruktur enth&auml;lt.<\/p><ol start=\"3\" class=\"wp-block-list\">\n<li>Navigieren Sie anschlie&szlig;end in den inneren Ordner Ihres Projekts:<\/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>F&uuml;gen Sie die IP-Adresse Ihres Servers zu ALLOWED_HOSTS hinzu<\/strong>: Verwenden Sie einen der standardm&auml;&szlig;igen Ubuntu-Texteditoren (<strong>nano <\/strong>oder <strong>vim<\/strong>) und &ouml;ffnen Sie die Datei <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>Suchen Sie die Einstellung <strong>&bdquo;ALLOWED_HOSTS&ldquo; <\/strong>und bearbeiten Sie sie, um die IP-Adresse Ihres VPS wie folgt hinzuzuf&uuml;gen:<\/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 = ['your_vps_ip']<\/pre><p>Ersetzen Sie <strong>&bdquo;your_vps_ip&ldquo; <\/strong>durch die tats&auml;chliche IP-Adresse Ihres VPS aus der Hostinger-Konsole.<\/p><ol start=\"5\" class=\"wp-block-list\">\n<li><strong>Starten Sie den Entwicklungsserver<\/strong>: Um zu &uuml;berpr&uuml;fen, ob alles korrekt eingerichtet ist, k&ouml;nnen Sie den Django-Entwicklungsserver starten. Kehren Sie zur &uuml;bergeordneten Projektkategorie zur&uuml;ck und f&uuml;hren Sie <strong>&bdquo;runserver&ldquo;<\/strong> aus:<\/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>&Ouml;ffnen Sie nun Ihren Browser und rufen Sie <strong>http:\/\/your_vps_ip:8000\/<\/strong> auf &ndash; ersetzen Sie dabei <strong>&bdquo;your_vps_ip&ldquo; <\/strong>durch Ihre tats&auml;chliche VPS-IP-Adresse. Wenn alles korrekt ausgef&uuml;hrt wurde, sollte die Django-Begr&uuml;&szlig;ungsseite angezeigt werden:<\/p><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"6a51a5a5a3cfe\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a51a5a5a3cfe\" 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--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/de\/tutorials\/wp-content\/uploads\/sites\/29\/2026\/07\/install-django-page.avif\" alt=\"Django-Anzeige zur erfolgreichen Installation\n\" class=\"wp-image-13107\" srcset=\"https:\/\/www.hostinger.com\/de\/tutorials\/wp-content\/uploads\/sites\/29\/2026\/07\/install-django-page.avif 521w, https:\/\/www.hostinger.com\/de\/tutorials\/wp-content\/uploads\/sites\/29\/2026\/07\/install-django-page-300x204.avif 300w\" sizes=\"(max-width: 521px) 100vw, 521px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--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>\n<\/div><p>Wenn Sie diese Schritte befolgt haben, haben Sie erfolgreich ein Standard-Django-Projekt auf Ihrem VPS erstellt und ausgef&uuml;hrt. Im weiteren Verlauf dieses Django-Tutorials werden wir uns eingehender mit der Entwicklung der Anwendung und dem allgemeinen Verst&auml;ndnis von Django befassen.<\/p><h3 class=\"wp-block-heading\">Die Struktur eines Django-Projekts verstehen<\/h3><p>Durch die Ausf&uuml;hrung des Befehls<strong> &bdquo;startproject&ldquo; <\/strong>wird eine grundlegende Django-Projektstruktur erstellt, die mehrere wichtige Dateien und Verzeichnisse umfasst. Hier finden Sie eine &Uuml;bersicht &uuml;ber die Struktur und den Zweck der einzelnen Komponenten:<\/p><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"6a51a5a5a4473\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a51a5a5a4473\" 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--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/de\/tutorials\/wp-content\/uploads\/sites\/29\/2026\/07\/django-structure.avif\" alt=\" &Uuml;bersicht &uuml;ber die Struktur und den Zweck der einzelnen Komponenten eines Django-Projekts\" class=\"wp-image-13108\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--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>\n<\/div><p>Jede dieser Dateien und Verzeichnisse spielt eine bestimmte Rolle in Ihrem Django-Projekt:<\/p><ol class=\"wp-block-list\">\n<li><strong>manage.py<\/strong>:<\/li>\n<\/ol><p>Dies ist ein Befehlszeilenprogramm, das Ihnen die Interaktion mit Ihrem Django-Projekt erleichtert. Sie verwenden es f&uuml;r Aufgaben wie das Starten des Entwicklungsservers, die Migration von Datenbanken und die Verwaltung Ihrer Anwendung. So sieht es aus:<\/p><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"6a51a5a5a4d18\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a51a5a5a4d18\" 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--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/de\/tutorials\/wp-content\/uploads\/sites\/29\/2026\/07\/django-code.avif\" alt=\"Befehlszeilenprogramm im Django-Projekt\" class=\"wp-image-13109\" srcset=\"https:\/\/www.hostinger.com\/de\/tutorials\/wp-content\/uploads\/sites\/29\/2026\/07\/django-code.avif 678w, https:\/\/www.hostinger.com\/de\/tutorials\/wp-content\/uploads\/sites\/29\/2026\/07\/django-code-300x196.avif 300w\" sizes=\"(max-width: 678px) 100vw, 678px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--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>\n<\/div><p>Dies sind seine wichtigsten Funktionen:<\/p><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"6a51a5a5a551b\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a51a5a5a551b\" 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--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/de\/tutorials\/wp-content\/uploads\/sites\/29\/2026\/07\/django-key-function.avif\" alt=\"Befehlszeilenprogramm im Django-Projekt\" class=\"wp-image-13110\" srcset=\"https:\/\/www.hostinger.com\/de\/tutorials\/wp-content\/uploads\/sites\/29\/2026\/07\/django-key-function.avif 590w, https:\/\/www.hostinger.com\/de\/tutorials\/wp-content\/uploads\/sites\/29\/2026\/07\/django-key-function-300x11.avif 300w\" sizes=\"(max-width: 590px) 100vw, 590px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--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>\n<\/div><p>Legt die Umgebungsvariable fest, um Django mitzuteilen, welche Konfigurationsdatei verwendet werden soll.<\/p><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"6a51a5a5a5d23\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a51a5a5a5d23\" 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--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/de\/tutorials\/wp-content\/uploads\/sites\/29\/2026\/07\/setting-file-to-use-django.avif\" alt=\"Befehlszeilenprogramm im Django-Projekt\" class=\"wp-image-13111\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--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>\n<\/div><p>F&uuml;hrt verschiedene Django-Befehle aus, wie z. B. <strong>&bdquo;runserver&ldquo;<\/strong>, <strong>&bdquo;migrate<\/strong>&ldquo; und andere.<\/p><ol start=\"2\" class=\"wp-block-list\">\n<li><strong>myproject\/:<\/strong><\/li>\n<\/ol><p>Das innere Projektverzeichnis, das die zentralen Einstellungen, Konfigurationen und andere Standarddateien f&uuml;r ein Django-Projekt enth&auml;lt.<\/p><ol start=\"3\" class=\"wp-block-list\">\n<li><strong><strong>__init__.py:<\/strong><\/strong><\/li>\n<\/ol><p>Diese Datei kennzeichnet das Verzeichnis als Python-Paket, sodass der Code als Modul in Python importiert werden kann. Sie ist standardm&auml;&szlig;ig leer.<\/p><ol start=\"4\" class=\"wp-block-list\">\n<li><strong>settings.py:<\/strong><\/li>\n<\/ol><p>Dies ist eine der wichtigsten Dateien in Django. Sie enth&auml;lt alle Konfigurationseinstellungen f&uuml;r Ihr Projekt, einschlie&szlig;lich Datenbankkonfigurationen, installierter Apps, Middleware und Einstellungen f&uuml;r statische Dateien.<\/p><ol start=\"5\" class=\"wp-block-list\">\n<li><strong>urls.py:<\/strong><\/li>\n<\/ol><p>Diese Datei definiert die URL-Routen f&uuml;r Ihre Anwendung. Sie ordnet URLs den Views zu, die Anfragen verarbeiten und Antworten zur&uuml;ckgeben.<\/p><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"6a51a5a5a68dd\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a51a5a5a68dd\" 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--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/de\/tutorials\/wp-content\/uploads\/sites\/29\/2026\/07\/django-url-file.avif\" alt=\"Befehlszeilenprogramm im Django-Projekt\" class=\"wp-image-13112\" srcset=\"https:\/\/www.hostinger.com\/de\/tutorials\/wp-content\/uploads\/sites\/29\/2026\/07\/django-url-file.avif 365w, https:\/\/www.hostinger.com\/de\/tutorials\/wp-content\/uploads\/sites\/29\/2026\/07\/django-url-file-300x111.avif 300w\" sizes=\"(max-width: 365px) 100vw, 365px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--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>\n<\/div><p>Wenn Sie Ihrer Anwendung weitere Funktionen hinzuf&uuml;gen, erweitern Sie <strong>die urlpatterns<\/strong>, um die Routen f&uuml;r Ihre eigenen Views einzubinden.<\/p><ol start=\"6\" class=\"wp-block-list\">\n<li><strong>asgi.py:<\/strong><\/li>\n<\/ol><p>Diese Datei dient als Einstiegspunkt f&uuml;r ASGI-kompatible Webserver, um Ihr Projekt bereitzustellen. ASGI (Asynchronous Server Gateway Interface) ist der Standard f&uuml;r asynchrone Django-Anwendungen.<\/p><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"6a51a5a5a71b3\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a51a5a5a71b3\" 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--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/de\/tutorials\/wp-content\/uploads\/sites\/29\/2026\/07\/asgi-file.avif\" alt=\"Befehlszeilenprogramm im Django-Projekt\" class=\"wp-image-13113\" srcset=\"https:\/\/www.hostinger.com\/de\/tutorials\/wp-content\/uploads\/sites\/29\/2026\/07\/asgi-file.avif 645w, https:\/\/www.hostinger.com\/de\/tutorials\/wp-content\/uploads\/sites\/29\/2026\/07\/asgi-file-300x72.avif 300w\" sizes=\"(max-width: 645px) 100vw, 645px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--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>\n<\/div><ol start=\"6\" class=\"wp-block-list\">\n<li><strong>wsgi.py:<\/strong><\/li>\n<\/ol><p>Diese Datei ist der Einstiegspunkt f&uuml;r WSGI-kompatible Webserver wie Gunicorn oder uWSGI, um Ihr Projekt in einer Produktionsumgebung bereitzustellen.<\/p><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"6a51a5a5a7aa8\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a51a5a5a7aa8\" 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--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/de\/tutorials\/wp-content\/uploads\/sites\/29\/2026\/07\/wsgi-file.avif\" alt=\"Befehlszeilenprogramm im Django-Projekt\" class=\"wp-image-13114\" srcset=\"https:\/\/www.hostinger.com\/de\/tutorials\/wp-content\/uploads\/sites\/29\/2026\/07\/wsgi-file.avif 647w, https:\/\/www.hostinger.com\/de\/tutorials\/wp-content\/uploads\/sites\/29\/2026\/07\/wsgi-file-300x70.avif 300w\" sizes=\"(max-width: 647px) 100vw, 647px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--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>\n<\/div><p>Wenn Sie die Rolle der einzelnen Dateien und Verzeichnisse verstehen, sind Sie in der Lage, Einstellungen anzupassen, URLs hinzuzuf&uuml;gen und die Struktur Ihres Projekts zu verwalten.<\/p><h2 class=\"wp-block-heading\" id=\"h-django-modelle-und-datenbanken-verstehen\">Django-Modelle und Datenbanken verstehen<\/h2><p>Nachdem Ihr Django-Projekt eingerichtet ist und l&auml;uft, besteht der n&auml;chste Schritt darin, sich mit einer der Kernkomponenten jeder Webanwendung auseinanderzusetzen: der Datenverwaltung. Untersuchen wir, wie Django mit Modellen und Datenbanken umgeht, um dynamische, datengesteuerte Anwendungen zu erm&ouml;glichen.<\/p><h3 class=\"wp-block-heading\">Modelle erstellen und migrieren<\/h3><p>In Django definieren <strong>Modelle <\/strong>die Struktur Ihrer Datenbanktabellen. Es handelt sich um Python-Klassen, die direkt Datenbanktabellen zugeordnet sind und Ihnen eine bequeme Interaktion mit Ihren Daten erm&ouml;glichen. Jede Modellklasse repr&auml;sentiert eine Tabelle, und jedes Modellattribut repr&auml;sentiert ein Feld in der Tabelle.<\/p><p>Django abstrahiert den SQL-Code, wodurch das Erstellen, Aktualisieren und Verwalten von Datenbanken vereinfacht wird, ohne dass Sie rohe SQL-Abfragen schreiben m&uuml;ssen.<\/p><p><strong>Ein Modell erstellen<\/strong><\/p><p>Um ein Modell zu erstellen, m&uuml;ssen Sie eine Python-Klasse in der Datei <strong>&bdquo;models.py&ldquo; <\/strong>einer Ihrer Apps definieren. Jedes Attribut der Klasse entspricht einem Datenbankfeld, und Django k&uuml;mmert sich automatisch um die zugrunde liegende Datenbankstruktur.<\/p><p>Hier ist ein Beispiel f&uuml;r ein einfaches Modell in 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=\"\"># In your app's models.py file\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>und <strong>author<\/strong>: Zeichenfelder (<strong>CharField<\/strong>) mit einer maximalen L&auml;nge<\/li>\n\n\n\n<li><strong>published_date<\/strong>: Ein Datumsfeld (<strong>DateField<\/strong>)<\/li>\n\n\n\n<li><strong>isbn<\/strong>: Ein Zeichenfeld mit einer Eindeutigkeitsbeschr&auml;nkung<\/li>\n<\/ul><p>Die Methode <strong>__str__() <\/strong>stellt sicher, dass bei der Abfrage eines Buches der Titel des Buches als Zeichenfolgenrepr&auml;sentation zur&uuml;ckgegeben wird.<\/p><p><strong>Hinzuf&uuml;gen des Modells zur Datenbank<\/strong><\/p><p>Sobald Sie Ihr Modell erstellt haben, muss Django es in eine Datenbanktabelle umsetzen. Dies geschieht mithilfe von <strong>Migrationen <\/strong>&ndash; Dateien, mit denen Django &Auml;nderungen an Ihren Modellen nachverfolgt.<\/p><ol class=\"wp-block-list\">\n<li><strong>Erstellen Sie eine Migration<\/strong>: Um die Migrationsdatei f&uuml;r Ihr neues Modell zu erstellen, f&uuml;hren Sie folgenden Befehl aus:<\/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 analysiert die &Auml;nderungen in Ihrer Datei <strong>&bdquo;models.py&ldquo; <\/strong>und generiert eine Migrationsdatei, die diese &Auml;nderungen in SQL-&auml;hnlichen Anweisungen beschreibt.<\/p><p>Sie erhalten eine Ausgabe, die in etwa so aussieht:<\/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>Wenden Sie die Migration an<\/strong>: Nachdem die Migration generiert wurde, sollten Sie sie mit dem Befehl <strong>migrate<\/strong> auf die Datenbank anwenden:<\/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>Dadurch werden die erforderlichen Tabellen in Ihrer Datenbank angelegt. Nun wird das Modell <strong>&bdquo;Book&ldquo; <\/strong>durch eine entsprechende Tabelle <strong>&bdquo;Book&ldquo; <\/strong>in Ihrer Datenbank repr&auml;sentiert, und Sie k&ouml;nnen Daten hinzuf&uuml;gen, abfragen und verwalten.<\/p><h3 class=\"wp-block-heading\">Einrichten der Datenbank<\/h3><p>Django unterst&uuml;tzt mehrere Datenbanken, sodass Sie die f&uuml;r Ihr Projekt am besten geeignete ausw&auml;hlen k&ouml;nnen. Die Standarddatenbank in Django ist <strong>SQLite<\/strong>, die ressourcenschonend und einfach einzurichten ist und sich daher ideal f&uuml;r die Entwicklung und f&uuml;r kleine Projekte eignet.<\/p><p>F&uuml;r Produktionsumgebungen werden jedoch aufgrund ihrer Skalierbarkeit und Leistungsf&auml;higkeit robustere Datenbanken wie <strong>PostgreSQL<\/strong>, <strong>MySQL <\/strong>oder <strong>MariaDB <\/strong>empfohlen.<\/p><p>Django bietet integrierte Unterst&uuml;tzung f&uuml;r all diese Datenbanken. Beginnen wir mit der Einrichtung der Standard-SQLite-Datenbank.<\/p><p><strong>Einrichtung der Standard-SQLite-Datenbank<\/strong><\/p><p>Standardm&auml;&szlig;ig ist Django f&uuml;r die Verwendung von SQLite konfiguriert, das bereits mit Python vorinstalliert ist, sodass keine zus&auml;tzliche Einrichtung erforderlich ist. Auf diese Weise stellen Sie sicher, dass Ihr Projekt f&uuml;r die Verwendung von SQLite bereit ist:<\/p><ol class=\"wp-block-list\">\n<li>&Ouml;ffnen Sie die Datei <strong>settings.py <\/strong>Ihres Projekts, die sich im Projektordner befindet (<strong>myproject&rarr;myproject&rarr;settings.py<\/strong>).<\/li>\n\n\n\n<li>Gehen Sie zum Abschnitt <strong>&bdquo;DATABASES&ldquo; <\/strong>in <strong>der Datei &bdquo;settings.py<\/strong>&ldquo;, wo Django SQLite bereits als Standarddatenbank konfiguriert hat. So sieht der Eintrag aus:<\/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>: Gibt das Datenbank-Backend an (in diesem Fall SQLite).<\/li>\n\n\n\n<li><strong>NAME<\/strong>: Der Pfad zur SQLite-Datenbankdatei (<strong>db.sqlite3<\/strong>). Django erstellt diese Datei automatisch, wenn Sie die erste Migration ausf&uuml;hren.<\/li>\n<\/ul><ol start=\"3\" class=\"wp-block-list\">\n<li>Nachdem Sie die Datenbankeinstellungen &uuml;berpr&uuml;ft haben, m&uuml;ssen Sie die ersten Migrationen durchf&uuml;hren, um die Standardtabellen (wie &bdquo;users&ldquo; und &bdquo;sessions&ldquo;) einzurichten. F&uuml;hren Sie den folgenden Befehl aus:<\/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>Dieser Befehl erstellt die Datei <strong>&bdquo;db.sqlite3&ldquo; <\/strong>im Stammverzeichnis Ihres Projektverzeichnisses und richtet alle f&uuml;r den Betrieb Ihrer Anwendung erforderlichen Tabellen ein.<\/p><ol start=\"4\" class=\"wp-block-list\">\n<li>Sobald die Migrationen abgeschlossen sind, sollten Sie &uuml;berpr&uuml;fen, ob die Datei <strong>&bdquo;db.sqlite3&ldquo; <\/strong>in Ihrem Projektordner erstellt wurde. Diese Datei speichert Ihre Datenbank lokal und wird mit dem Hinzuf&uuml;gen weiterer Daten immer gr&ouml;&szlig;er.<\/li>\n<\/ol><h3 class=\"wp-block-heading\"><strong>Datenbankintegration<\/strong><\/h3><p>Nachdem Sie die Standard-SQLite-Datenbank f&uuml;r die Entwicklung eingerichtet haben, m&uuml;ssen Sie m&ouml;glicherweise ein leistungsf&auml;higeres Datenbankmanagementsystem (DBMS) integrieren, wenn Ihr Projekt w&auml;chst. Django unterst&uuml;tzt mehrere DBMS, darunter <strong>PostgreSQL<\/strong>, <strong>MySQL<\/strong>, <strong>MariaDB <\/strong>und <strong>Oracle<\/strong>, die jeweils ihre eigenen St&auml;rken und Integrationsprozesse aufweisen.<\/p><p>Werfen wir einen Blick auf die einzelnen Optionen:<\/p><ul class=\"wp-block-list\">\n<li><strong>SQLite<\/strong>: Dies ist die Standarddatenbank in Django und eignet sich ideal f&uuml;r <strong>die Entwicklung <\/strong>sowie f&uuml;r kleine Projekte. Sie ist ressourcenschonend, dateibasiert und erfordert keine &uuml;ber die von Django standardm&auml;&szlig;ig bereitgestellten Funktionen hinausgehende Einrichtung. F&uuml;r Produktionsumgebungen ist sie jedoch nicht geeignet, da ihr fortgeschrittene Funktionen wie gleichzeitige Schreibvorg&auml;nge, Skalierbarkeit und Robustheit bei hohem Datenverkehr fehlen.<br><br><strong>Einrichtung<\/strong>: SQLite erfordert keine zus&auml;tzliche Einrichtung in Django; es ist sofort einsatzbereit.<br><br><strong>Konfiguration<\/strong>: Django ist f&uuml;r die Verwendung von SQLite mit den folgenden Einstellungen in settings.py vorkonfiguriert:<\/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>Beachten Sie, dass SQLite nur zwei Parameter ben&ouml;tigt &ndash; <strong>ENGINE <\/strong>und <strong>NAME<\/strong>.<\/p><ul class=\"wp-block-list\">\n<li><strong>PostgreSQL<\/strong>: Eine leistungsstarke Open-Source-Datenbank mit erweiterten Funktionen wie der Unterst&uuml;tzung komplexer Abfragen, Datentypen wie JSON und Volltextsuche. Aufgrund ihrer Skalierbarkeit und ihres Funktionsumfangs wird sie f&uuml;r Django-Anwendungen <strong>in der Produktion<\/strong> dringend empfohlen. PostgreSQL ist daf&uuml;r bekannt, sich streng an SQL-Standards zu halten und hat sich als zuverl&auml;ssig f&uuml;r komplexe und gro&szlig; angelegte Anwendungen erwiesen.<br><br><strong>Einrichtung<\/strong>: F&uuml;r PostgreSQL muss das Paket<strong>&bdquo;psycopg2&ldquo;<\/strong> installiert werden, das als Adapter zwischen Django und der PostgreSQL-Datenbank fungiert.<br><br><strong>Konfiguration<\/strong>: Neben den Standardparametern <strong>&bdquo;ENGINE&ldquo; <\/strong>und <strong>&bdquo;NAME&ldquo; <\/strong>f&uuml;r SQLite erfordert PostgreSQL zus&auml;tzlich <strong>die Angaben &bdquo;USER&ldquo;<\/strong>, <strong>&bdquo;PASSWORD&ldquo;<\/strong>, <strong>&bdquo;HOST&ldquo; <\/strong>und <strong>&bdquo;PORT&ldquo;.<\/strong> Alle diese Parameter werden in der Datei <strong>&bdquo;settings.py&ldquo; <\/strong>im Abschnitt <strong>&bdquo;DATABASES&ldquo; <\/strong>konfiguriert:<\/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>Unterschiede<\/strong>: Im Gegensatz zu SQLite ist PostgreSQL eine voll ausgestattete Datenbank, die mehrere gleichzeitige Benutzer, erweiterte Abfragen und Transaktionen unterst&uuml;tzt. Sie m&uuml;ssen PostgreSQL auf Ihrem Server installieren, eine Datenbank und einen Benutzer anlegen sowie komplexere Konfigurationen vornehmen.<\/p><ul class=\"wp-block-list\">\n<li><strong>MySQL \/ MariaDB<\/strong>: Beide sind schnelle und zuverl&auml;ssige relationale Datenbanken, die in der Webentwicklung weit verbreitet sind. MySQL ist f&uuml;r seine Geschwindigkeit bekannt, w&auml;hrend MariaDB &ndash; ein Fork von MySQL &ndash; sich st&auml;rker auf die gemeinschaftsgetriebene Entwicklung konzentriert und vollst&auml;ndig mit MySQL kompatibel ist. Diese Datenbanken eignen sich hervorragend f&uuml;r <strong>Webanwendungen mit hohem Datenverkehr <\/strong>und werden oft aufgrund ihrer Leistung bevorzugt.<br><br><strong>Einrichtung<\/strong>: Sowohl MySQL als auch MariaDB nutzen das mysqlclient-Paket f&uuml;r die Anbindung an Django.<br><br><strong>Konfiguration: <\/strong>Beide verwenden dieselben Parameter wie PostgreSQL, die in der Datei <strong>settings.py<\/strong> im Abschnitt <strong>DATABASES<\/strong> konfiguriert werden:<\/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>Unterschiede: <\/strong>MySQL und MariaDB sind f&uuml;r ihre Leistung bei gro&szlig;en Datens&auml;tzen und stark frequentierten Webanwendungen bekannt. Sie unterst&uuml;tzen mehrere Speicher-Engines, erm&ouml;glichen schnelle Lesevorg&auml;nge und k&ouml;nnen Millionen von Abfragen z&uuml;gig verarbeiten.<\/p><ul class=\"wp-block-list\">\n<li><strong>Oracle \/ Microsoft SQL Server<\/strong>: Diese Datenbanken der Enterprise-Klasse bieten erhebliche Leistungsf&auml;higkeit, insbesondere in gro&szlig;en Webanwendungen. Ihre Einrichtung kann jedoch komplexer sein, und sie werden in der Regel nur in bestimmten <strong>Unternehmensumgebungen<\/strong> eingesetzt, in denen das Unternehmen Oracle oder SQL Server bereits f&uuml;r andere Software nutzt.<br><br><strong>Einrichtung<\/strong>: Beide erfordern zus&auml;tzliche Treiber f&uuml;r die Integration mit Django, wie beispielsweise <strong>cx_Oracle <\/strong>f&uuml;r Oracle oder <strong>pyodbc <\/strong>f&uuml;r SQL Server. Diese Datenbanken werden typischerweise in Unternehmensumgebungen eingesetzt, in denen andere Unternehmenssoftware auf diese Systeme angewiesen ist.<br><br><strong>Konfiguration<\/strong>: Jedes dieser Systeme erfordert komplexere Einrichtungsprozesse, darunter die Serverinstallation, die Einrichtung von Treibern und die Konfiguration der Datenbank-Anmeldedaten in der Datei <strong>settings.py<\/strong> &ndash; &auml;hnlich wie bei den vorherigen Optionen.<br><br><strong>Unterschiede<\/strong>: Oracle und SQL Server bieten Funktionen auf Unternehmensniveau wie erweiterte Transaktionsverarbeitung, optimierte Leistung und die Integration in gro&szlig; angelegte Systeme. Ihre Einrichtung ist komplexer und wird h&auml;ufig von spezialisierten Datenbankadministratoren &uuml;bernommen.<\/li>\n<\/ul><p>F&uuml;r welche L&ouml;sung sollten Sie sich also entscheiden? Lassen Sie es uns einfach und klar formulieren:<\/p><ul class=\"wp-block-list\">\n<li><strong>Entwicklung und Tests<\/strong>: Bleiben Sie bei SQLite. Es ist einfach, erfordert keine Einrichtung und eignet sich ideal f&uuml;r lokale Tests.<\/li>\n\n\n\n<li><strong>Kleine Produktionsumgebungen<\/strong>: F&uuml;r kleinere Webanwendungen mit geringem Datenverkehr sind MySQL oder MariaDB eine gute Wahl, da diese eine bessere Leistung als SQLite bieten und leichter zu erlernen sind als PostgreSQL.<\/li>\n\n\n\n<li><strong>Gro&szlig; angelegte Produktion<\/strong>: PostgreSQL wird am ehesten f&uuml;r Django-Projekte empfohlen, die Skalierbarkeit, Sicherheit und erweiterte Funktionen erfordern.<\/li>\n\n\n\n<li><strong>Unternehmensumgebungen<\/strong>: Wenn Sie in einem Unternehmensumfeld arbeiten, in dem Oracle oder SQL Server f&uuml;r andere Anwendungen verwendet werden, sind diese Datenbanken aufgrund von Integrationsanforderungen m&ouml;glicherweise die beste Wahl.<\/li>\n<\/ul><p><strong>Einrichtung von PostgreSQL mit Django<\/strong><\/p><p>In diesem Abschnitt gehen wir den Prozess der Integration von <strong>PostgreSQL <\/strong>in Django durch, da es sich um eine der am h&auml;ufigsten verwendeten Datenbanken f&uuml;r Produktionsanwendungen handelt.<\/p><ol class=\"wp-block-list\">\n<li><strong>Installieren Sie PostgreSQL: <\/strong>Um PostgreSQL in Django zu integrieren, m&uuml;ssen Sie zun&auml;chst PostgreSQL auf Ihrem System installieren:<\/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>Installieren Sie den PostgreSQL-Adapter f&uuml;r Django: <\/strong>Django nutzt das Paket<strong>&bdquo;psycopg2&ldquo; <\/strong>f&uuml;r die Kommunikation mit PostgreSQL. Installieren Sie es mit <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>Wechseln Sie zum PostgreSQL-Benutzer:<\/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>Erstellen Sie eine neue Datenbank:<\/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>Erstellen Sie einen Benutzer mit einem Passwort:<\/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>Gew&auml;hren Sie <strong>&bdquo;mydatabaseuser&ldquo; <\/strong>alle Berechtigungen f&uuml;r die Datenbank:<\/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>Beenden Sie die PostgreSQL-Shell:<\/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>Konfigurieren Sie Django f&uuml;r die Verwendung von PostgreSQL: <\/strong>&Ouml;ffnen Sie Ihre Datei <strong>&bdquo;settings.py&ldquo; <\/strong>und suchen Sie den Abschnitt <strong>&bdquo;DATABASES<\/strong>&ldquo;. Passen Sie ihn wie folgt f&uuml;r PostgreSQL an:<\/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>Die tats&auml;chlichen Werte f&uuml;r <strong>PASSWORD <\/strong>und <strong>USER <\/strong>sollten mit denen &uuml;bereinstimmen, die Sie in <strong>Schritt 5 <\/strong>festgelegt haben.<\/p><ol start=\"9\" class=\"wp-block-list\">\n<li><strong>Wenden Sie die Migrationen an: <\/strong>Nachdem Ihre Datenbank nun konfiguriert ist, m&uuml;ssen Sie die Migrationen Ihres Projekts anwenden, um die erforderlichen Tabellen in PostgreSQL einzurichten:<\/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>Dieser Befehl erstellt die erforderlichen Tabellen in Ihrer PostgreSQL-Datenbank.<\/p><ol start=\"10\" class=\"wp-block-list\">\n<li><strong>Testen Sie die Verbindung: <\/strong>Starten Sie abschlie&szlig;end den Django-Entwicklungsserver mit dem Befehl<strong>&bdquo;runserver&ldquo;<\/strong>, um zu &uuml;berpr&uuml;fen, ob die PostgreSQL-Integration erfolgreich war:<\/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>&Ouml;ffnen Sie<strong> http:\/\/127.0.0.1:8000\/ <\/strong>in Ihrem Browser. Wenn die Django-Begr&uuml;&szlig;ungsseite ohne Fehler angezeigt wird, funktioniert Ihre Datenbankverbindung einwandfrei.<\/p><p>Da Ihre PostgreSQL-Datenbank nun vollst&auml;ndig integriert ist, ist Django bereit, gr&ouml;&szlig;ere und komplexere Datens&auml;tze zu verarbeiten, wodurch Ihr Projekt skalierbar und produktionsreif wird.<\/p><h2 class=\"wp-block-heading\" id=\"h-erstellen-von-ansichten-und-vorlagen\">Erstellen von Ansichten und Vorlagen<\/h2><p>Nachdem die Datenbank und die Modelle f&uuml;r die Verwaltung der Daten Ihrer Anwendung eingerichtet sind, besteht der n&auml;chste Schritt darin, diese Informationen den Benutzern anzuzeigen und interaktive Oberfl&auml;chen zu erstellen.<\/p><p>Hier kommen <strong>Ansichten <\/strong>und <strong>Vorlagen <\/strong>ins Spiel, mit denen Sie die Logik und Struktur hinter den Webseiten definieren k&ouml;nnen, mit denen die Benutzer interagieren werden.<\/p><h3 class=\"wp-block-heading\">Views verstehen<\/h3><p>Django-Ansichten sind eine wesentliche Komponente, die die Logik hinter dem definiert, was ein Benutzer sieht, wenn er mit Ihrer Anwendung interagiert.<\/p><p>Einfach ausgedr&uuml;ckt: Eine Ansicht nimmt eine Webanfrage entgegen, verarbeitet sie und gibt eine Antwort zur&uuml;ck &ndash; in der Regel in Form einer gerenderten HTML-Seite. Ansichten bilden mithilfe von Modellen und Vorlagen eine Br&uuml;cke zwischen Ihrer Datenbank und der Benutzeroberfl&auml;che.<\/p><p>In Django gibt es zwei Haupttypen von Views: <strong>funktionsbasierte Views (FBVs) <\/strong>und <strong>klassenbasierte Views (CBVs)<\/strong>. Beide dienen demselben Zweck, bieten jedoch unterschiedliche M&ouml;glichkeiten zur Organisation des Codes.<\/p><p><strong>Funktionsbasierte Views (FBVs)<\/strong><\/p><p>Funktionsbasierte Views sind einfache Python-Funktionen, die ein Anfrageobjekt entgegennehmen und eine Antwort zur&uuml;ckgeben. Sie werden h&auml;ufig f&uuml;r einfachere Anwendungsf&auml;lle verwendet oder wenn Sie mehr Kontrolle &uuml;ber den Ablauf der Logik ben&ouml;tigen.<\/p><p>Hier ist ein Beispiel f&uuml;r eine einfache FBV, die eine HTML-Vorlage rendert:<\/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# Function-based view\ndef homepage(request):\n    return render(request, 'homepage.html')<\/pre><p>In diesem Beispiel:<\/p><ul class=\"wp-block-list\">\n<li><strong>request<\/strong>: Das vom Browser des Benutzers gesendete HTTP-Anfrageobjekt.<\/li>\n\n\n\n<li><strong>render<\/strong>: Kombiniert die Vorlage <strong>&bdquo;homepage.html&ldquo; <\/strong>mit den bereitgestellten Kontextdaten und gibt eine HTTP-Antwort zur&uuml;ck.<\/li>\n<\/ul><p>FBVs sind leicht zu verstehen und zu implementieren, doch wenn Views komplexer werden &ndash; beispielsweise durch Formulare oder Authentifizierung &ndash;, kann ihre Wartung aufwendiger werden.<\/p><p><strong>Klassenbasierte Ansichten (CBVs)<\/strong><\/p><p>Klassenbasierte Views hingegen erm&ouml;glichen es Ihnen, Views mithilfe objektorientierter Programmierprinzipien effizienter zu strukturieren. CBVs sind flexibler und wiederverwendbarer, da sie auf Python-Klassen basieren.<\/p><p>Django bietet integrierte generische Views wie <strong>&bdquo;ListView&ldquo; <\/strong>und <strong>&bdquo;DetailView&ldquo;<\/strong>, die g&auml;ngige Anwendungsf&auml;lle abdecken. Diese Views erm&ouml;glichen es Ihnen, sich st&auml;rker auf deren Anpassung zu konzentrieren, anstatt sich wiederholende Logik neu zu schreiben.<\/p><p>Hier ist ein Beispiel f&uuml;r eine CBV, die dieselbe Funktion wie die vorherige FBV erf&uuml;llt:<\/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# Class-based view\nclass HomePageView(TemplateView):\n    template_name = 'homepage.html'<\/pre><p>In diesem Beispiel:<\/p><ul class=\"wp-block-list\">\n<li><strong>TemplateView<\/strong>: Eine integrierte generische Ansicht, die eine Vorlage rendert.<\/li>\n\n\n\n<li><strong>template_name<\/strong>: Gibt die darzustellende Vorlagendatei an, genau wie im FBV-Beispiel.<\/li>\n<\/ul><p>Um dieses CBV in der URL-Konfiguration zu verwenden, m&uuml;ssen Sie die Methode <strong>.as_view() <\/strong>einbinden, wenn Sie es in <strong>die Datei &bdquo;urls.py&ldquo; <\/strong>einf&uuml;gen:<\/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>Wann sollten FBVs gegen&uuml;ber CBVs verwendet werden?<\/strong><\/p><ul class=\"wp-block-list\">\n<li><strong>Verwenden Sie FBVs, <\/strong>wenn Sie Einfachheit und vollst&auml;ndige Kontrolle &uuml;ber Ihre View-Logik ben&ouml;tigen. Sie sind oft intuitiver f&uuml;r kleine Views oder benutzerdefinierte Logik, die nicht in die vordefinierten View-Muster von Django passt.<\/li>\n\n\n\n<li><strong>Verwenden Sie CBVs, <\/strong>wenn Sie den DRY-Prinzipien<strong> (Don&rsquo;t Repeat Yourself) <\/strong>folgen und vorhandene Logik wiederverwenden m&ouml;chten. CBVs sind ideal, wenn Ihre Ansichten an Komplexit&auml;t zunehmen, beispielsweise bei der Verarbeitung von Formularen, paginierten Daten oder Standard-CRUD-Operationen.<\/li>\n<\/ul><p>Sowohl FBVs als auch CBVs sind fester Bestandteil von Django, und die Wahl zwischen beiden h&auml;ngt von den Anforderungen Ihres Projekts und Ihren pers&ouml;nlichen Vorlieben ab.<\/p><h3 class=\"wp-block-heading\">Arbeiten mit Vorlagen<\/h3><p>Das Template-System in Django ist darauf ausgelegt, die Darstellung von Daten von der zugrunde liegenden Logik zu trennen. Templates sind im Wesentlichen HTML-Dateien, die dynamische Inhalte enthalten und es Ihnen erm&ouml;glichen, von Ihren Views &uuml;bergebene Daten anzuzeigen. Die Django Template Language (DTL) stellt Platzhalter und Logik wie Schleifen und Bedingungen bereit, um dynamische Daten in HTML einzuf&uuml;gen.<\/p><p>Vorlagen spielen eine entscheidende Rolle bei der Gestaltung des Erscheinungsbilds Ihrer Webseiten und sorgen gleichzeitig f&uuml;r eine klare Trennung der Zust&auml;ndigkeiten zwischen der Logik, die von den Views &uuml;bernommen wird, und der Benutzeroberfl&auml;che.<\/p><p><strong>Erstellen einer Vorlage<\/strong><\/p><p>Um eine Vorlage in Django zu erstellen, m&uuml;ssen Sie eine HTML-Datei in einem <strong>Verzeichnisnamens &bdquo;templates&ldquo;<\/strong> anlegen. Die Verzeichnisstruktur k&ouml;nnte wie folgt aussehen:<\/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>In dieser Struktur sucht Django automatisch nach Vorlagen im Verzeichnis<strong> &bdquo;templates&ldquo; <\/strong>Ihrer App. Sie k&ouml;nnen die Vorlagen zus&auml;tzlich in app-spezifischen Ordnern organisieren (z. B. <strong>myapp\/homepage.html<\/strong>), um sicherzustellen, dass jede App &uuml;ber eigene Vorlagen verf&uuml;gt.<\/p><p>Hier ist ein Beispiel f&uuml;r eine einfache Vorlage (<strong>homepage.html<\/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>In dieser Vorlage sind <strong>{{ site_name }} <\/strong>und <strong>{{ message }} <\/strong>Platzhalter, die mit dynamischen Daten aus der Ansicht gef&uuml;llt werden.<\/p><p><strong>Rendern einer Vorlage in einer Ansicht<\/strong><\/p><p>Um eine Vorlage darzustellen, m&uuml;ssen Sie diese mithilfe der Django-Funktion <strong>render() <\/strong>an die Ansicht &uuml;bergeben. Hier ist ein Beispiel daf&uuml;r, wie die Vorlage <strong>&bdquo;homepage.html&ldquo; <\/strong>mit einigen Kontextdaten in einer <strong>funktionsbasierten Ansicht (FBV) <\/strong>dargestellt wird:<\/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>In diesem Beispiel:<\/p><ul class=\"wp-block-list\">\n<li><strong>render()<\/strong>: Kombiniert die Vorlage (<strong>homepage.html<\/strong>) mit den Kontextdaten.<\/li>\n\n\n\n<li><strong>context<\/strong>: Ein W&ouml;rterbuch, das die Daten (<strong>site_name <\/strong>und <strong>message<\/strong>) enth&auml;lt, die in die Vorlage eingef&uuml;gt werden sollen.<\/li>\n<\/ul><p>Wenn ein Benutzer diese Seite aufruft, werden die Platzhalter <strong>{{ site_name }} <\/strong>und <strong>{{ message }} <\/strong>in der Vorlage durch &bdquo;Meine Django-Website&ldquo; bzw. &bdquo;Dies ist der Inhalt der Startseite!&ldquo; ersetzt.<\/p><p><strong>Vorlagen-Tags und Filter<\/strong><\/p><p>Django-Vorlagen unterst&uuml;tzen zudem <strong>Vorlagen-Tags <\/strong>und <strong>Filter<\/strong>, mit denen Sie dynamische Inhalte und Logik in Ihre HTML-Dateien einf&uuml;gen k&ouml;nnen.<\/p><ul class=\"wp-block-list\">\n<li><strong>Vorlagen-Tags<\/strong>: F&uuml;hren Sie Logik innerhalb von Vorlagen aus, wie beispielsweise Schleifen und Bedingungen. Beispielsweise eine <strong>if<\/strong>-Bedingung:<\/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>Vorlagenfilter<\/strong>: Passen Sie Variablen f&uuml;r die Anzeige an. Beispielsweise k&ouml;nnen Sie Datumsangaben mit einem Filter formatieren:<\/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>Erweiterung von Vorlagen<\/strong><\/p><p>Django unterst&uuml;tzt die Vererbung von Vorlagen, sodass Sie Basisvorlagen erstellen k&ouml;nnen, die von anderen Vorlagen erweitert werden k&ouml;nnen. Dies ist besonders n&uuml;tzlich, um ein einheitliches Layout &uuml;ber mehrere Seiten hinweg beizubehalten, wie beispielsweise eine gemeinsame Kopf- und Fu&szlig;zeile.<\/p><ol class=\"wp-block-list\">\n<li>Erstellen Sie eine Basisvorlage (<strong>base.html<\/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>Erweitern Sie die Basisvorlage in einer untergeordneten Vorlage (<strong>homepage.html<\/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>Durch die Erweiterung der Basisvorlage k&ouml;nnen Sie die Kopf- und Fu&szlig;zeile auf verschiedenen Seiten wiederverwenden, wodurch ein einheitliches Layout gew&auml;hrleistet wird und Wiederholungen vermieden werden.<\/p><p><strong>Verwendung statischer Dateien in Vorlagen<\/strong><\/p><p>Vorlagen erm&ouml;glichen es Ihnen au&szlig;erdem, mithilfe des Vorlagen-Tags <strong>{% static %} <\/strong>auf statische Dateien (wie CSS, JavaScript oder Bilder) zu verweisen. Nutzen Sie Folgendes, um beispielsweise eine CSS-Datei einzubinden:<\/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>Stellen Sie sicher, dass Sie Ihre Verzeichnisse f&uuml;r statische Dateien in <strong>settings.py <\/strong>korrekt eingerichtet haben:<\/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>Durch den effektiven Einsatz des Django-Vorlagensystems k&ouml;nnen Sie dynamische, datengesteuerte Webseiten erstellen und eine klare Trennung zwischen Logik und Darstellung gew&auml;hrleisten.<\/p><h2 class=\"wp-block-heading\" id=\"h-arbeiten-mit-url-mustern\">Arbeiten mit URL-Mustern<\/h2><p>Der URL-Dispatcher von Django nutzt regul&auml;re Ausdr&uuml;cke oder Pfadkonverter, um eingehende URL-Anfragen bestimmten Views zuzuordnen. Diese URL-Muster werden in <strong>der Datei urls.py <\/strong>definiert, und Django verwendet diese Konfiguration, um zu bestimmen, welcher View eine bestimmte Anfrage bearbeiten soll.<\/p><p>Jedes Django-Projekt verf&uuml;gt in der Regel &uuml;ber zwei Ebenen der URL-Konfiguration:<\/p><ol class=\"wp-block-list\">\n<li><strong>URLs auf Projektebene<\/strong>: Diese werden in der Stammdatei <strong>&bdquo;urls.py<\/strong>&ldquo; (im Hauptverzeichnis des Projekts) definiert; diese Datei enth&auml;lt die Gesamtstruktur des URL-Routings des Projekts.<\/li>\n\n\n\n<li><strong>URLs auf App-Ebene<\/strong>: Jede App innerhalb Ihres Projekts kann &uuml;ber eine eigene <strong>&bdquo;urls.<\/strong>py&ldquo;-Datei verf&uuml;gen, was eine modulare URL-Verwaltung erm&ouml;glicht. Diese URLs auf App-Ebene werden dann mit den URLs auf Projektebene verkn&uuml;pft.<\/li>\n<\/ol><p><strong>Grundlegende URL-Konfiguration<\/strong><\/p><p>Sehen wir uns an, wie in einem einfachen Projekt URL-Muster eingerichtet werden k&ouml;nnten:<\/p><ol class=\"wp-block-list\">\n<li>URLs auf Projektebene (<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),  # Admin site\n    path('', include('myapp.urls')),  # Include app-level URLs for \"myapp\"\n]<\/pre><ul class=\"wp-block-list\">\n<li><strong>path()<\/strong>: Djangos Funktion zur Definition von URL-Mustern.<\/li>\n\n\n\n<li><strong>admin.site.urls<\/strong>: Verarbeitet alle adminbezogenen Anfragen.<\/li>\n\n\n\n<li><strong>include()<\/strong>: Wird verwendet, um URLs auf App-Ebene (aus myapp.urls) in die Hauptprojektkonfiguration einzubinden.<\/li>\n<\/ul><ol start=\"2\" class=\"wp-block-list\">\n<li>URLs auf App-Ebene (<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'),  # Maps the root URL to the homepage view\n    path('about\/', views.about, name='about'),  # Maps \"\/about\/\" to the about view\n]<\/pre><ul class=\"wp-block-list\">\n<li>Die <strong>Stamm-URL <\/strong>(dargestellt durch &bdquo; &ldquo;) wird der Ansicht &bdquo;homepage&ldquo; zugeordnet.<\/li>\n\n\n\n<li>Die <strong>URL &bdquo;\/about\/&ldquo; <\/strong>wird der Ansicht<strong> &bdquo;about&ldquo;<\/strong> zugeordnet.<\/li>\n<\/ul><p><strong>URL-Routing mit funktionsbasierten Ansichten (FBVs)<\/strong><\/p><p>So k&ouml;nnten die entsprechenden Ansichten in <strong>der Datei &bdquo;views.py&ldquo; <\/strong>f&uuml;r die oben genannte URL-Konfiguration aussehen:<\/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>Diese Konfiguration verkn&uuml;pft die URLs <strong>f&uuml;r die Startseite <\/strong>und die<strong> &bdquo;&Uuml;ber uns<\/strong>&ldquo;-Seite mit den entsprechenden Views und stellt so sicher, dass beim Aufruf von<strong> http:\/\/example.com\/ <\/strong>oder<strong> http:\/\/example.com\/about\/ <\/strong>die richtige Vorlage gerendert wird.<\/p><p><strong>URL-Routing mit klassenbasierten Ansichten (CBVs)<\/strong><\/p><p>Sie k&ouml;nnen URLs auch klassenbasierten Ansichten (CBVs) zuordnen, die etwas anders behandelt werden. Hier ist ein Beispiel f&uuml;r eine CBV-URL-Zuordnung:<\/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    path('', HomePageView.as_view(), name='home'),\n    path('about\/', AboutPageView.as_view(), name='about'),\n]<\/pre><p>Und die entsprechenden klassenbasierten Ansichten in <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>In diesem Fall wird die Methode <strong>.as_view() <\/strong>verwendet, um die klassenbasierten Ansichten mit den URL-Mustern zu verkn&uuml;pfen.<\/p><p><strong>URL-Parameter und dynamisches Routing<\/strong><\/p><p>Django erm&ouml;glicht es Ihnen au&szlig;erdem, URL-Parameter zu erfassen und an Views weiterzugeben, was f&uuml;r die dynamische URL-Zuordnung beispielsweise bei Blogbeitr&auml;gen oder Produktseiten n&uuml;tzlich ist.<\/p><p>Hier ist ein Beispiel, bei dem die URL einen ganzzahligen Parameter erfasst:<\/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>In diesem Fall erfasst <strong>&lt;int:id&gt; <\/strong>eine Ganzzahl aus der URL und &uuml;bergibt sie als Argument an die Ansicht <strong>&bdquo;article_detail<\/strong>&ldquo;:<\/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>Wenn ein Benutzer die Seite<strong> http:\/\/example.com\/article\/5\/<\/strong> aufruft, &uuml;bergibt Django den Wert<strong> 5 <\/strong>als Argument <strong>&bdquo;id&ldquo; <\/strong>an die Ansicht <strong>&bdquo;article_detail&ldquo;<\/strong>, sodass Sie den entsprechenden Artikel abrufen und anzeigen k&ouml;nnen<\/p><p><strong>Benannte URL-Muster<\/strong><\/p><p>Es empfiehlt sich, Ihren URL-Mustern <strong>Namen zuzuweisen<\/strong>. Auf diese Weise k&ouml;nnen Sie in Ihren Vorlagen und Ansichten per Namen auf URLs verweisen, anstatt diese fest einprogrammieren zu m&uuml;ssen.<\/p><p>Im obigen Beispiel in <strong>&bdquo;urls.py&ldquo; <\/strong>verf&uuml;gt jede URL &uuml;ber ein &bdquo;name&ldquo;-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=\"\">path('about\/', views.about, name='about')<\/pre><p>In Ihren Vorlagen k&ouml;nnen Sie dann das Template-Tag <strong>{% url %} <\/strong>verwenden, um auf diese benannten URLs zu verweisen:<\/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>Auf diese Weise m&uuml;ssen Sie, sollte sich die &bdquo;about&ldquo;-URL jemals &auml;ndern, diese nur in der URL-Konfiguration aktualisieren und nicht in jeder einzelnen Vorlage.<\/p><p>Durch die Konfiguration und Nutzung der URL-Muster von Django k&ouml;nnen Sie verschiedene URLs effizient ihren jeweiligen Views zuordnen. Diese Flexibilit&auml;t erm&ouml;glicht es Ihnen, sowohl einfache statische Seiten als auch komplexere, dynamische Inhalte zu verarbeiten, die auf Benutzereingaben zugeschnitten sind.<\/p><h2 class=\"wp-block-heading\" id=\"h-verwaltung-statischer-dateien-in-django\">Verwaltung statischer Dateien in Django<\/h2><p>Wir haben Views, Vorlagen und URL-Muster eingerichtet. Um nun eine voll funktionsf&auml;hige Django-Anwendung zu erstellen, m&uuml;ssen wir uns mit der Verwaltung statischer Dateien wie CSS, JavaScript und Bildern befassen.<\/p><p>Gl&uuml;cklicherweise bietet Django eine einfache und effiziente M&ouml;glichkeit, statische Dateien zu verwalten, und stellt sicher, dass diese w&auml;hrend der Entwicklung und Bereitstellung ordnungsgem&auml;&szlig; bereitgestellt und organisiert werden.<\/p><p><strong>Einrichten statischer Dateien in Django<\/strong><\/p><p>Um statische Dateien in Django zu verwalten, m&uuml;ssen Sie Ihr Projekt so konfigurieren, dass es wei&szlig;, wo es diese suchen und bereitstellen soll.<\/p><p>Definieren Sie die statische URL und das Verzeichnis in <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>: Legt das URL-Pr&auml;fix fest, das Django beim Bereitstellen statischer Dateien verwendet.<\/li>\n\n\n\n<li><strong>STATICFILES_DIRS<\/strong>: Gibt zus&auml;tzliche Verzeichnisse an, in denen Django w&auml;hrend der Entwicklung nach statischen Dateien sucht.<\/li>\n<\/ul><p>Standardm&auml;&szlig;ig sucht Django auch im Verzeichnis<strong> &bdquo;static&ldquo;<\/strong> jeder App nach statischen Dateien. Wenn Sie beispielsweise eine App namens <strong>&bdquo;myapp&ldquo;<\/strong> haben, k&ouml;nnen Sie eine Ordnerstruktur wie folgt erstellen:<\/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 erkennt diese Dateien w&auml;hrend der Entwicklung automatisch und stellt sie bereit.<\/p><p><strong>Verwendung statischer Dateien in Vorlagen<\/strong><\/p><p>Um statische Dateien in Ihren Vorlagen zu verwenden, m&uuml;ssen Sie zun&auml;chst das Django-Vorlagen-Tag <strong>{% static %} <\/strong>einbinden. Anschlie&szlig;end k&ouml;nnen Sie Ihre statischen Dateien &uuml;ber ihre relativen Pfade referenzieren:<\/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>In diesem Beispiel:<\/p><ul class=\"wp-block-list\">\n<li><strong>{% load static %}<\/strong>: L&auml;dt das Template-Tag f&uuml;r statische Dateien.<\/li>\n\n\n\n<li><strong>{% static &lsquo;myapp\/style.css&rsquo; %}<\/strong>: L&ouml;st den Pfad zur Datei &bdquo;style.css&ldquo; im Verzeichnis &bdquo;static\/myapp&ldquo; auf.<\/li>\n\n\n\n<li><strong>{% static &sbquo;myapp\/images\/logo.png&lsquo; %}<\/strong>: L&ouml;st den Pfad zu einer Bilddatei auf.<\/li>\n<\/ul><p><strong>Sammeln statischer Dateien f&uuml;r die Bereitstellung<\/strong><\/p><p>W&auml;hrend der Entwicklung stellt Django statische Dateien automatisch bereit, wenn <strong>DEBUG = True <\/strong>ist. In der Produktionsumgebung stellt Django statische Dateien jedoch nicht direkt bereit. Stattdessen m&uuml;ssen Sie alle statischen Dateien aus verschiedenen Verzeichnissen sammeln und in einem einzigen Verzeichnis speichern.<\/p><p>Hierf&uuml;r stellt Django den Management-Befehl <strong>collectstatic <\/strong>zur Verf&uuml;gung:<\/p><ol class=\"wp-block-list\">\n<li>Stellen Sie sicher, dass <strong>&bdquo;django.contrib.staticfiles&ldquo; <\/strong>in der Einstellung<strong> &bdquo;INSTALLED_APPS&ldquo; <\/strong>enthalten ist:<\/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>Konfigurieren Sie das Verzeichnis f&uuml;r statische Dateien in <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>: Legt das Verzeichnis fest, in dem Django statische Dateien f&uuml;r die Bereitstellung sammelt.<\/p><ol start=\"3\" class=\"wp-block-list\">\n<li>F&uuml;hren Sie den Befehl collectstatic aus:<\/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>Dieser Befehl sammelt alle statischen Dateien aus dem Verzeichnis<strong> &bdquo;static&ldquo;<\/strong> jeder App sowie aus allen weiteren in <strong>STATICFILES_DIRS<\/strong> angegebenen Speicherorten und speichert sie anschlie&szlig;end im Verzeichnis <strong>STATIC_ROOT<\/strong>.<\/p><p><strong>Bereitstellung statischer Dateien in der Produktionsumgebung<\/strong><\/p><p>In einer Produktionsumgebung verwenden Sie in der Regel einen Webserver (wie <strong>Nginx <\/strong>oder <strong>Apache<\/strong>), um statische Dateien bereitzustellen. Django empfiehlt, Ihren Webserver so zu konfigurieren, dass statische Inhalte effizient bereitgestellt werden, um die Auslastung Ihrer Django-Anwendung zu verringern.<\/p><p>So k&ouml;nnten Sie die Bereitstellung statischer Dateien in einer Nginx-Konfiguration einrichten:<\/p><ol class=\"wp-block-list\">\n<li>Nginx-Konfiguration f&uuml;r statische Dateien:<\/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>In dieser Konfiguration stellt Nginx statische Dateien direkt aus dem Verzeichnis <strong>\/static\/ <\/strong>bereit, w&auml;hrend alle anderen Anfragen an die Django-Anwendung weitergeleitet werden.<\/p><p>Durch die ordnungsgem&auml;&szlig;e Verwaltung statischer Dateien in Django stellen Sie sicher, dass Ihre Anwendung nicht nur mit Stilen und Bildern ansprechend aussieht, sondern auch nach der Bereitstellung effizient l&auml;uft.<\/p><h2 class=\"wp-block-heading\" id=\"h-implementierung-der-benutzerauthentifizierung-und-autorisierung\">Implementierung der Benutzerauthentifizierung und -autorisierung<\/h2><p>Da wir immer dynamischere und komplexere Webanwendungen entwickeln, wird die Notwendigkeit, Benutzer zu verwalten, Inhalte zu sichern und den Zugriff zu kontrollieren, immer wichtiger.<\/p><p>Django bietet ein integriertes Authentifizierungssystem, das die Abwicklung von Benutzeranmeldung, -abmeldung, -registrierung und -berechtigungen vereinfacht. Dies erm&ouml;glicht es einem Django-Entwickler, sowohl die Benutzerauthentifizierung als auch die Autorisierung effizient zu verwalten.<\/p><h3 class=\"wp-block-heading\">Benutzerauthentifizierung<\/h3><p>Das integrierte Authentifizierungssystem von Django vereinfacht die Benutzerverwaltung durch Funktionen wie Anmeldung, Abmeldung, Passwortverwaltung und Registrierung. Standardm&auml;&szlig;ig bietet Django Funktionen f&uuml;r das Benutzermodell sowie Authentifizierungsansichten, die die meisten dieser Aufgaben sofort &uuml;bernehmen.<\/p><p><strong>Einrichten der Benutzeranmeldung und -abmeldung<\/strong><\/p><p>Um die Anmelde- und Abmeldefunktionalit&auml;t zu implementieren, k&ouml;nnen Sie die integrierten Ansichten von Django nutzen, die sich in <strong>django.contrib.auth.views <\/strong>befinden. Diese Ansichten &uuml;bernehmen den Authentifizierungsprozess und vereinfachen den f&uuml;r diese Vorg&auml;nge erforderlichen Code.<\/p><ol class=\"wp-block-list\">\n<li>Richten Sie in Ihrer Datei <strong>urls.py <\/strong>URLs f&uuml;r die Anmeldung und Abmeldung ein:<\/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>: Verarbeitet die Benutzeranmeldung.<\/li>\n\n\n\n<li><strong>LogoutView<\/strong>: Meldet den Benutzer ab und leitet ihn auf die angegebene Seite weiter.<\/li>\n<\/ul><ol start=\"2\" class=\"wp-block-list\">\n<li><strong>Erstellen Sie eine Vorlage f&uuml;r das Anmeldeformular: <\/strong>Sie k&ouml;nnen eine einfache Anmeldevorlage (<strong>login.html<\/strong>) im Verzeichnis<strong> &bdquo;templates&ldquo;<\/strong> Ihrer App erstellen:<\/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>Diese Vorlage &uuml;bernimmt die Benutzerauthentifizierung, wenn ein g&uuml;ltiger Benutzername und ein g&uuml;ltiges Passwort &uuml;bermittelt werden.<\/p><ol start=\"3\" class=\"wp-block-list\">\n<li><strong>Erstellen Sie eine Abmeldung: <\/strong>Sie ben&ouml;tigen keine separate Vorlage f&uuml;r die Abmeldung, da dies von Djangos LogoutView &uuml;bernommen wird. Sie k&ouml;nnen einfach einen Abmeldelink in Ihre Vorlage einf&uuml;gen:<\/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>Erstellen einer Ansicht f&uuml;r die Benutzerregistrierung<\/strong><\/p><p>Django bietet standardm&auml;&szlig;ig keine integrierte Registrierungsansicht, aber Sie k&ouml;nnen mithilfe von Djangos <strong>UserCreationForm<\/strong> eine solche erstellen:<\/p><ol class=\"wp-block-list\">\n<li>Erstellen Sie eine Registrierungsansicht in <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>Richten Sie die URL f&uuml;r die Registrierung in <strong>urls.py <\/strong>ein:<\/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>Erstellen Sie die Vorlage f&uuml;r das Registrierungsformular (<strong>register.html<\/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>Diese Registrierungsansicht erm&ouml;glicht es Benutzern, mithilfe eines einfachen Formulars ein Konto zu erstellen. Nach erfolgreicher Registrierung werden die Benutzer automatisch angemeldet.<\/p><h3 class=\"wp-block-heading\">Benutzerautorisierung<\/h3><p>Die Benutzerautorisierung erm&ouml;glicht es, den Zugriff auf bestimmte Ansichten und Aktionen basierend auf den Berechtigungen oder Rollen des Benutzers zu steuern. Das Berechtigungssystem von Django erleichtert die Verwaltung, welche Benutzer auf bestimmte Teile Ihrer Anwendung zugreifen d&uuml;rfen.<\/p><p><strong>Zugriffseinschr&auml;nkung durch Anmeldepflicht<\/strong><\/p><p>Um den Zugriff auf bestimmte Ansichten einzuschr&auml;nken, k&ouml;nnen Sie den Django-Dekorator <strong>@login_required<\/strong> verwenden, der sicherstellt, dass nur authentifizierte Benutzer auf eine Ansicht zugreifen k&ouml;nnen:<\/p><ol class=\"wp-block-list\">\n<li>Verwendung von <strong>@login_required <\/strong>in Ansichten:<\/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>Dadurch wird sichergestellt, dass ein Benutzer, der nicht angemeldet ist, auf die Anmeldeseite weitergeleitet wird.<\/p><ol start=\"2\" class=\"wp-block-list\">\n<li>Wenden Sie <strong>@login_required <\/strong>in URLs an: Alternativ k&ouml;nnen Sie <strong>@login_required <\/strong>direkt in Ihrer <strong>urls.py <\/strong>anwenden, indem Sie Djangos <strong>LoginRequiredMixin <\/strong>f&uuml;r klassenbasierte Ansichten verwenden:<\/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>Verwaltung von Benutzerberechtigungen<\/strong><\/p><p>Mit Django k&ouml;nnen Sie Benutzern und Gruppen unterschiedliche <strong>Berechtigungen <\/strong>zuweisen, mit denen sich der Zugriff auf bestimmte Ansichten oder Aktionen steuern l&auml;sst. Berechtigungen k&ouml;nnen zu Benutzermodellen hinzugef&uuml;gt und in Ihren Ansichten &uuml;berpr&uuml;ft werden.<\/p><ol class=\"wp-block-list\">\n<li><strong>Berechtigungen zuweisen: <\/strong>Beim Anlegen von Benutzern oder Gruppen k&ouml;nnen Sie Berechtigungen zuweisen. So kann beispielsweise ein Administrator die Berechtigung zum Hinzuf&uuml;gen oder L&ouml;schen von Inhalten haben, w&auml;hrend normale Benutzer Inhalte lediglich anzeigen d&uuml;rfen.<\/li>\n\n\n\n<li><strong>&Uuml;berpr&uuml;fung von Berechtigungen in Ansichten: <\/strong>Mit dem Dekorator <strong>@permission_required<\/strong> k&ouml;nnen Sie pr&uuml;fen, ob ein Benutzer &uuml;ber die erforderlichen Berechtigungen verf&uuml;gt, bevor Sie ihm den Zugriff auf bestimmte Ansichten gew&auml;hren:<\/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>Nur Benutzer mit der Berechtigung &bdquo;add_article&ldquo; k&ouml;nnen auf diese Ansicht zugreifen.<\/p><p><strong>Zugriffsbeschr&auml;nkung anhand von Benutzerrollen<\/strong><\/p><p>Mit der Gruppenfunktion von Django k&ouml;nnen Sie Rollen (wie z. B. &bdquo;Redakteur&ldquo; oder &bdquo;Leser&ldquo;) erstellen und Benutzer diesen Gruppen zuweisen. Anschlie&szlig;end k&ouml;nnen Sie die Gruppenzugeh&ouml;rigkeit eines Benutzers &uuml;berpr&uuml;fen, um den Zugriff zu steuern.<\/p><ol class=\"wp-block-list\">\n<li><strong>Zuweisung von Benutzern zu Gruppen: <\/strong>Gruppen k&ouml;nnen im Django-Admin-Panel oder programmgesteuert angelegt werden:<\/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)  # Assign the user to the 'editors' group<\/pre><ol start=\"2\" class=\"wp-block-list\">\n<li><strong>&Uuml;berpr&uuml;fen der Gruppenmitgliedschaft in Ansichten: <\/strong>Sie k&ouml;nnen Ansichten basierend auf der Gruppenmitgliedschaft einschr&auml;nken:<\/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>In diesem Beispiel k&ouml;nnen nur Benutzer, die der Gruppe &bdquo;editors&ldquo; angeh&ouml;ren, auf die Ansicht <strong>&bdquo;editor_dashboard&ldquo;<\/strong> zugreifen.<\/p><p>Durch die Nutzung der in Django integrierten Authentifizierungs- und Autorisierungssysteme k&ouml;nnen Sie die Anmeldung, Registrierung und Berechtigungen von Benutzern sicher verwalten und so sicherstellen, dass sensible Inhalte gesch&uuml;tzt sind und der Zugriff ordnungsgem&auml;&szlig; kontrolliert wird.<\/p><h2 class=\"wp-block-heading\" id=\"h-umgang-mit-formularen-in-django\">Umgang mit Formularen in Django<\/h2><p>Nach der Implementierung der Benutzerauthentifizierung und -autorisierung ist die Verarbeitung von Benutzereingaben &uuml;ber Formulare die n&auml;chste entscheidende Funktion jeder Webseite. Django bietet ein leistungsstarkes und flexibles System zum Erstellen, Verarbeiten und Validieren von Formularen.<\/p><p>Das Formularverarbeitungssystem von Django basiert auf Python-Klassen, die Formulare als Objekte darstellen. Diese Formulare lassen sich in Vorlagen ausgeben, validieren und mit nur wenigen Zeilen Code verarbeiten. Formulare k&ouml;nnen entweder manuell mithilfe der Form-Klasse von Django erstellt oder automatisch aus Modellen mithilfe von <strong>ModelForm<\/strong> generiert werden.<\/p><h3 class=\"wp-block-heading\"><strong>Erstellen von Formularen mithilfe der Form-Klasse von Django<\/strong><\/h3><p>Um ein Formular in Django zu erstellen, definieren Sie zun&auml;chst eine Formularklasse in Ihrer Datei <strong>&bdquo;forms.py<\/strong>&ldquo;. Diese Klasse definiert die Felder und die Validierungsregeln.<\/p><ol class=\"wp-block-list\">\n<li><strong>Ein Formular definieren: <\/strong>Hier ist ein Beispiel f&uuml;r ein einfaches Kontaktformular:<\/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='Your Name')\n    email = forms.EmailField(label='Your Email')\n    message = forms.CharField(widget=forms.Textarea, label='Your Message')<\/pre><p>Dieses Formular enth&auml;lt drei Felder: Name, E-Mail und Nachricht. Jedes Feld wird durch eine Formularfeldklasse repr&auml;sentiert, beispielsweise <strong>CharField <\/strong>f&uuml;r kurzen Text, <strong>EmailField <\/strong>f&uuml;r E-Mail-Adressen und <strong>Textarea <\/strong>f&uuml;r l&auml;ngere Texteingaben.<\/p><ol start=\"2\" class=\"wp-block-list\">\n<li><strong>Darstellung des Formulars in einer Vorlage: <\/strong>Um das Formular auf einer Webseite anzuzeigen, m&uuml;ssen Sie es in einer Vorlage darstellen. Sie k&ouml;nnen das Formular manuell darstellen oder die in Django integrierten Hilfsfunktionen zur Formulardarstellung verwenden:<\/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;Send Message&lt;\/button&gt;\n&lt;\/form&gt;<\/pre><ul class=\"wp-block-list\">\n<li><strong>{% csrf_token %}<\/strong>: F&uuml;gt ein CSRF-Token hinzu, um vor Cross-Site-Request-Forgery-Angriffen zu sch&uuml;tzen.<\/li>\n\n\n\n<li><strong>{{ form.as_p }}<\/strong>: Rendert die Formularfelder, wobei jedes Feld zur einfachen Formatierung in ein <strong>&lt;p&gt;<\/strong>-Tag eingeschlossen ist.<\/li>\n<\/ul><ol start=\"3\" class=\"wp-block-list\">\n<li><strong>Verarbeitung von Formular&uuml;bermittlungen: <\/strong>In der Ansicht, die die Formular&uuml;bermittlung verarbeitet, m&uuml;ssen Sie die Formulardaten validieren und diese verarbeiten, sofern das Formular g&uuml;ltig ist:<\/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            # Process the data, e.g., send an email or save it to the database\n            name = form.cleaned_data['name']\n            email = form.cleaned_data['email']\n            message = form.cleaned_data['message']\n            # Redirect to a success page or show a success message\n            return render(request, 'thanks.html')\n    else:\n        form = ContactForm()\n    return render(request, 'contact.html', {'form': form})<\/pre><p>In dieser Ansicht:<\/p><ul class=\"wp-block-list\">\n<li>Wenn das Formular &uuml;ber eine POST-Anfrage &uuml;bermittelt wird, werden die Formulardaten validiert.<\/li>\n\n\n\n<li><strong>form.is_valid()<\/strong>: Pr&uuml;ft, ob die Formulardaten die Validierung bestehen.<\/li>\n\n\n\n<li><strong>form.cleaned_data<\/strong>: Enth&auml;lt die validierten Formulardaten, die nun verarbeitet werden k&ouml;nnen (z. B. zum Versenden einer E-Mail).<\/li>\n\n\n\n<li>Wenn es sich bei der Anfrage nicht um einen <strong>POST-Request<\/strong> handelt, wird dem Benutzer ein leeres Formular zum Ausf&uuml;llen angezeigt.<\/li>\n<\/ul><h3 class=\"wp-block-heading\">Formularvalidierung und Fehlerbehandlung<\/h3><p>Die Formulare von Django verf&uuml;gen &uuml;ber eine integrierte Validierung, die sicherstellt, dass die &uuml;bermittelten Daten korrekt und sicher sind. Felder wie <strong>EmailField <\/strong>&uuml;berpr&uuml;fen automatisch, ob die Eingabe eine g&uuml;ltige E-Mail-Adresse ist. Sie k&ouml;nnen auch eine benutzerdefinierte Validierungslogik erstellen, um bestimmte Regeln durchzusetzen.<\/p><p><strong>Integrierte Validierung<\/strong><\/p><p>Django f&uuml;hrt automatisch einige Validierungspr&uuml;fungen f&uuml;r Sie durch:<\/p><ul class=\"wp-block-list\">\n<li><strong>Pflichtfelder<\/strong>: Standardm&auml;&szlig;ig sind alle Felder Pflichtfelder, es sei denn, Sie geben required=False an.<\/li>\n\n\n\n<li><strong>Feldtypen<\/strong>: Felder wie <strong>&bdquo;EmailField&ldquo;<\/strong>, <strong>&bdquo;IntegerField&ldquo; <\/strong>und <strong>&bdquo;URLField&ldquo; <\/strong>&uuml;berpr&uuml;fen automatisch den Typ der eingegebenen Daten.<\/li>\n<\/ul><p><strong>Benutzerdefinierte Validierung<\/strong><\/p><p>Sie k&ouml;nnen auch eine benutzerdefinierte Validierungslogik definieren, indem Sie die Methode <strong>clean() <\/strong>&uuml;berschreiben oder benutzerdefinierte Feldvalidatoren erstellen.<\/p><ol class=\"wp-block-list\">\n<li>Hinzuf&uuml;gen eines benutzerdefinierten Validators f&uuml;r das Feld &bdquo;name&ldquo;:<\/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>In diesem Beispiel l&ouml;st Django einen Validierungsfehler aus, wenn der Name das Wort <strong>&bdquo;spam&ldquo;<\/strong> enth&auml;lt.<\/p><ol start=\"2\" class=\"wp-block-list\">\n<li><strong>Behandlung von Formularfehlern in Vorlagen: <\/strong>Sie k&ouml;nnen die Darstellung von Formularfehlern in Vorlagen individuell anpassen. Django f&uuml;gt jedem Feld automatisch Fehlermeldungen hinzu, die Sie wie folgt anzeigen k&ouml;nnen:<\/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>Dadurch wird sichergestellt, dass Nutzer relevante Fehlermeldungen neben den Feldern sehen, die sie korrigieren m&uuml;ssen.<\/p><h3 class=\"wp-block-heading\"><strong>Erstellen von Formularen aus Modellen mit ModelForm<\/strong><\/h3><p>In vielen F&auml;llen sind Formulare an Modelle gekoppelt. Django erleichtert das direkte Erstellen von Formularen aus Modellen mithilfe von <strong>ModelForm<\/strong>. Dies spart Zeit, da Formularfelder automatisch auf der Grundlage der Felder des Modells generiert werden.<\/p><ol class=\"wp-block-list\">\n<li><strong>Erstellen eines ModelForm: <\/strong>Angenommen, Sie haben ein <strong>&bdquo;Post<\/strong>&ldquo;-Modell in Ihrer Datei <strong>&bdquo;models.py<\/strong>&ldquo;:<\/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>Sie k&ouml;nnen wie folgt ein Formular f&uuml;r dieses Modell erstellen:<\/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>Verwendung von <strong>ModelForm <\/strong>in einer Ansicht:<\/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()  # Saves the form data to the database\n            return redirect('post_list')  # Redirect to a list of posts\n    else:\n        form = PostForm()\n    return render(request, 'create_post.html', {'form': form})<\/pre><p>Durch die Verwendung von <strong>ModelForm<\/strong> generiert Django automatisch Formularfelder auf der Grundlage der Felder des Post-Modells und &uuml;bernimmt das Speichern des Formulars in der Datenbank.<\/p><h2 class=\"wp-block-heading\" id=\"h-bereitstellung-einer-django-anwendung\">Bereitstellung einer Django-Anwendung<\/h2><p>Sobald Ihre Anwendung vollst&auml;ndig entwickelt und auf Ihrem lokalen Rechner getestet wurde, besteht der letzte Schritt darin, sie auf einem Live-Server bereitzustellen, damit Nutzer darauf zugreifen k&ouml;nnen. Die Bereitstellung eines Django-Projekts erfordert die sorgf&auml;ltige Ber&uuml;cksichtigung von Best Practices, um Sicherheit, Skalierbarkeit und Leistung zu gew&auml;hrleisten. In diesem Abschnitt behandeln wir die wesentlichen Schritte zur Bereitstellung Ihrer Anwendung auf einem VPS, die jeder Django-Entwickler kennen sollte.<\/p><h3 class=\"wp-block-heading\"><strong>Bew&auml;hrte Vorgehensweisen f&uuml;r die Bereitstellung eines Django-Projekts<\/strong><\/h3><p>Bevor Sie sich mit den technischen Schritten befassen, ist es wichtig, bei der <a href=\"\/de\/tutorials\/django-best-practices\/\">Vorbereitung Ihres Django-Projekts<\/a> auf die Bereitstellung einige bew&auml;hrte Vorgehensweisen zu beachten:<\/p><ol class=\"wp-block-list\">\n<li><strong>Verwenden Sie Umgebungsvariablen<\/strong>: Speichern Sie sensible Informationen wie geheime Schl&uuml;ssel, Datenbank-Anmeldedaten und API-Schl&uuml;ssel in Umgebungsvariablen, anstatt sie fest in Ihre Einstellungen einzubinden.<\/li>\n\n\n\n<li><strong>Deaktivieren Sie den Debug-Modus<\/strong>: Stellen Sie sicher, dass Sie in Ihrer Datei <strong>&bdquo;settings.py&ldquo; DEBUG = False <\/strong>festlegen, bevor Sie Ihr Projekt in der Produktion bereitstellen. Der Debug-Modus kann sensible Informationen f&uuml;r Angreifer offenlegen.<\/li>\n\n\n\n<li><strong>Legen Sie zul&auml;ssige Hosts fest<\/strong>: Legen Sie in Ihrer <strong>settings.py<\/strong> den Parameter <strong>ALLOWED_HOSTS <\/strong>so fest, dass er die Domainnamen enth&auml;lt, unter denen Ihre App gehostet wird. Zum Beispiel:<\/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 = ['yourdomain.com', 'www.yourdomain.com']<\/pre><ol start=\"4\" class=\"wp-block-list\">\n<li><strong>Sichern Sie die Anwendung<\/strong>: Erw&auml;gen Sie die Verwendung von HTTPS f&uuml;r die sichere Kommunikation zwischen dem Server und den Benutzern und nutzen Sie die integrierten Sicherheitseinstellungen von Django wie <strong>SECURE_SSL_REDIRECT<\/strong>, <strong>CSRF_COOKIE_SECURE <\/strong>und <strong>SESSION_COOKIE_SECURE<\/strong>.<\/li>\n\n\n\n<li><strong>Lassen Sie statische Dateien verarbeiten<\/strong>: Stellen Sie sicher, dass statische Dateien wie CSS und JavaScript ordnungsgem&auml;&szlig; gesammelt und bereitgestellt werden. Django stellt hierf&uuml;r den Befehl<strong>collectstatic <\/strong>zur Verf&uuml;gung.<\/li>\n\n\n\n<li><strong>Konfigurieren Sie die Datenbank<\/strong>: Stellen Sie sicher, dass die Datenbank ordnungsgem&auml;&szlig; konfiguriert ist, und vermeiden Sie die Verwendung von SQLite in der Produktion. Verwenden Sie eine robustere Datenbank wie PostgreSQL oder MySQL.<\/li>\n<\/ol><h3 class=\"wp-block-heading\">Bereitstellung von Django auf einem VPS<\/h3><p>Nachdem Sie nun die bew&auml;hrten Vorgehensweisen zur Vorbereitung eines Django-Projekts kennengelernt haben, ist es an der Zeit, es auf einem Virtual Private Server (VPS) bereitzustellen. In diesem Abschnitt f&uuml;hren wir Sie durch die Schritte zur Einrichtung Ihres Servers, zur Konfiguration der erforderlichen Dienste und dazu, Ihre Django-Anwendung live zu schalten und f&uuml;r Benutzer zug&auml;nglich zu machen.<\/p><p><strong>Erstellen einer Python-Datei &bdquo;requirements.txt&ldquo;<\/strong><\/p><p>Eine <strong>&bdquo;requirements.<\/strong>txt&ldquo;-Datei listet alle Python-Abh&auml;ngigkeiten auf, die Ihr Django-Projekt zur Ausf&uuml;hrung ben&ouml;tigt. Mit dieser Datei k&ouml;nnen Sie alle erforderlichen Pakete mit einem einzigen Befehl installieren.<\/p><p>Stellen Sie sicher, dass Sie sich im Hauptverzeichnis Ihres Projekts befinden, in dem sich die Datei <strong>&bdquo;manage.py&ldquo; <\/strong>befindet, und vergewissern Sie sich, dass Ihre virtuelle Umgebung aktiv ist.<\/p><p>Generieren Sie anschlie&szlig;end die Datei <strong>&bdquo;requirements.txt&ldquo; <\/strong>mit dem folgenden Befehl:<\/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 &amp;gt; requirements.txt<\/pre><p>Dieser Befehl erstellt in Ihrem aktuellen Verzeichnis eine <strong>&bdquo;requirements.<\/strong>txt&ldquo;-Datei mit allen installierten Paketen und deren Versionen, die sich in Ihrer aktuellen virtuellen Umgebung befinden.<\/p><p>&Ouml;ffnen Sie anschlie&szlig;end die Datei <strong>&bdquo;requirements.txt&ldquo; <\/strong>und vergewissern Sie sich, dass alle f&uuml;r die Ausf&uuml;hrung Ihres Projekts erforderlichen Abh&auml;ngigkeiten aufgef&uuml;hrt sind.<\/p><p><strong>Hochladen des Projekts in ein Remote-Repository (GitHub)<\/strong><\/p><p>Bevor Sie Ihr Projekt auf einem VPS bereitstellen, empfiehlt es sich, Ihren Code zur Versionskontrolle und zur einfachen Zusammenarbeit in ein Remote-Repository wie GitHub hochzuladen. Au&szlig;erdem vereinfacht dies den Bereitstellungsprozess selbst.<\/p><ol class=\"wp-block-list\">\n<li>Installieren Sie die Git-CLI und initialisieren Sie ein lokales Repository. Vergewissern Sie sich, dass Sie sich in Ihrem Hauptprojektordner befinden, in dem sich die Datei <strong>&bdquo;manage.py<\/strong>&ldquo; befindet, und f&uuml;hren Sie folgende Befehle aus:<\/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>Erstellen Sie eine <strong>.<\/strong>gitignore-Datei und f&uuml;gen Sie Inhalte hinzu. Die <a href=\"https:\/\/docs.github.com\/en\/get-started\/getting-started-with-git\/ignoring-files\" target=\"_blank\" rel=\"noopener\">.gitignore-Datei<\/a> teilt Git mit, welche Dateien beim Pushen von Code in Ihr Remote-Repository ignoriert werden sollen. Dies geschieht, um zu verhindern, dass Dateien mit sensiblen Informationen sowie lokale, irrelevante Dateien wie Protokolle ver&ouml;ffentlicht werden. Hier ist ein Beispiel f&uuml;r eine<strong>.<\/strong>gitignore-Datei f&uuml;r ein Django-Projekt:<\/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>Bereinigen Sie sensible Informationen in Ihrer <strong>settings.py<\/strong>. Stellen Sie sicher, dass Sie sensible Informationen in Ihrer settings.py-Datei, wie z. B. Passw&ouml;rter, Benutzernamen usw., bereinigen. Sobald das Projekt bereitgestellt ist, k&ouml;nnen Sie die Anmeldedaten zu Ihrem VPS hinzuf&uuml;gen.<\/li>\n\n\n\n<li>F&uuml;gen Sie Ihre Dateien hinzu und f&uuml;hren Sie ein Commit durch.<\/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>Registrieren Sie sich bei GitHub und erstellen Sie ein Remote-Repository. Rufen Sie <a href=\"https:\/\/github.com\/signup\" target=\"_blank\" rel=\"noopener\">GitHub<\/a> auf und registrieren Sie sich oder melden Sie sich bei Ihrem Konto an. Erstellen Sie ein neues Repository, legen Sie es als privat fest und kopieren Sie den Remote-Link.<\/li>\n\n\n\n<li>Richten Sie den Remote-Git-Origin und den Branch ein.<\/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>&Uuml;berpr&uuml;fen Sie den Status Ihres lokalen Repositorys und &uuml;bertragen Sie die Dateien. Bevor Sie Dateien &uuml;bertragen, sollten Sie den Befehl<strong> &bdquo;status&ldquo;<\/strong> ausf&uuml;hren und sicherstellen, dass keine Dateien hinzugef&uuml;gt wurden, die Sie nicht &uuml;bertragen m&ouml;chten:<\/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>Vergewissern Sie sich, dass nur die Dateien hinzugef&uuml;gt wurden, die Sie hochladen m&ouml;chten, und &uuml;bertragen Sie diese in das Remote-Repository:<\/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&amp;nbsp;<\/pre><ol start=\"8\" class=\"wp-block-list\">\n<li>Rufen Sie Ihr Remote-Repository auf GitHub auf und &uuml;berpr&uuml;fen Sie die hochgeladenen Dateien.<\/li>\n<\/ol><p><strong>Bereiten Sie Ihren VPS vor und laden Sie den Projektcode herunter<\/strong><\/p><p>Als N&auml;chstes m&uuml;ssen Sie Ihren VPS f&uuml;r die Bereitstellung vorbereiten und Ihren Code darauf herunterladen:<\/p><ol class=\"wp-block-list\">\n<li>Stellen Sie eine SSH-Verbindung zu Ihrem VPS her<\/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@Ihre_VPS-IP<\/pre><ol start=\"2\" class=\"wp-block-list\">\n<li>Installieren Sie <strong>Nginx <\/strong>und <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>Wir verwenden <strong>Nginx <\/strong>als Webserver und <strong>Gunicorn <\/strong>als Anwendungsserver<\/p><ol start=\"3\" class=\"wp-block-list\">\n<li>Rufen Sie Code von GitHub ab<\/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 Projektname<\/pre><ol start=\"4\" class=\"wp-block-list\">\n<li>Starten Sie eine virtuelle Umgebung und installieren Sie die Abh&auml;ngigkeiten<\/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 source 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>Tragen Sie die bereinigten Daten wieder in Ihre Datei <strong>&bdquo;settings.py&ldquo; <\/strong>ein<\/li>\n\n\n\n<li>F&uuml;hren Sie Migrationen durch und stellen Sie statische Dateien bereit<\/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>Richten Sie Gunicorn als Anwendungsserver ein. Erstellen Sie eine Dienstdatei:<\/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>F&uuml;gen Sie die folgende Konfiguration hinzu:<\/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>Stellen Sie sicher, dass Sie anstelle von <strong>&bdquo;your-username&ldquo; <\/strong>und <strong>&bdquo;\/your\/project\/directory&ldquo; <\/strong>Ihren tats&auml;chlichen Benutzernamen und den Pfad zu Ihrem Projektverzeichnis eingeben.<\/p><ol start=\"8\" class=\"wp-block-list\">\n<li>Starten und aktivieren Sie 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>Konfigurieren Sie Nginx als Webserver. Erstellen Sie eine Konfigurationsdatei:<\/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>F&uuml;gen Sie die folgende Konfiguration hinzu:<\/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>Stellen Sie sicher, dass Sie anstelle von <strong>\/Ihr\/Projekt\/Verzeichnis<\/strong> Ihren tats&auml;chlichen Verzeichnispfad eingeben.<\/p><ol start=\"10\" class=\"wp-block-list\">\n<li>Aktivieren Sie die Website und starten Sie Nginx neu<\/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>Sichern Sie den Server mit SSL. Wir verwenden Certbot, um ein SSL-Zertifikat zu installieren und den Datenverkehr von HTTP auf HTTPS umzuleiten:<\/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>Mit diesen Schritten haben Sie Ihre Django-Anwendung erfolgreich auf einem VPS unter Einhaltung bew&auml;hrter Verfahren bereitgestellt und damit sowohl Sicherheit als auch Leistung gew&auml;hrleistet.<\/p><p>Da Nginx und Gunicorn nun f&uuml;r den Web- und Anwendungsbetrieb zust&auml;ndig sind, ist Ihre App bereit, Live-Datenverkehr zu verarbeiten. Rufen Sie Ihre Domain auf &ndash; wenn Sie alles richtig eingerichtet haben, sollten Sie Ihre Webanwendung nun live sehen.<\/p><h2 class=\"wp-block-heading\" id=\"h-fazit\">Fazit<\/h2><p>In diesem Tutorial haben wir die wesentlichen Schritte f&uuml;r den Einstieg in Django behandelt, von der Einrichtung Ihrer Entwicklungsumgebung bis zur Bereitstellung Ihres Projekts auf einem VPS. Sie haben gelernt, wie Sie ein Projekt erstellen, Modelle verwalten und Daten speichern, Ansichten und Vorlagen erstellen, mit URLs arbeiten, statische Dateien handhaben, die Benutzerauthentifizierung implementieren und Ihre Anwendung auf einem Live-Server bereitstellen.<\/p><p>Mit diesen grundlegenden Kenntnissen sind Sie nun bestens ger&uuml;stet, um mit der Entwicklung Ihrer eigenen Django-Projekte zu beginnen. Ob es sich um einen einfachen Blog oder eine komplexere Webanwendung handelt &ndash; Django bietet Ihnen die Werkzeuge, um Ihre Ideen zum Leben zu erwecken. Tauchen Sie ein, experimentieren Sie und entdecken Sie, was Sie mit diesem leistungsstarken Web-Framework alles erschaffen k&ouml;nnen.<\/p><h2 class=\"wp-block-heading\" id=\"h-haufig-gestellte-fragen-zum-django-tutorial\">H&auml;ufig gestellte Fragen zum Django-Tutorial<\/h2><div id=\"rank-math-faq\" class=\"rank-math-block\">\n<div class=\"rank-math-list \">\n<div id=\"faq-question-1783324087100\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Was ist Django?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Django ist ein hochentwickeltes Python-Web-Framework, das f&uuml;r schnelle Entwicklung und ein klares, pragmatisches Design konzipiert ist. Es vereinfacht den Prozess der Erstellung von Webanwendungen durch die Bereitstellung wiederverwendbarer Komponenten wie Authentifizierung, ORM und Routing und f&ouml;rdert gleichzeitig Best Practices wie DRY (Don&rsquo;t Repeat Yourself) und Sicherheit.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1783324088313\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Warum Django verwenden?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Django wird wegen seiner Geschwindigkeit, Sicherheit und Skalierbarkeit eingesetzt. Es vereinfacht die Webentwicklung durch integrierte Funktionen wie Authentifizierung, ein ORM f&uuml;r die Datenbankverwaltung und URL-Routing. Dank seiner &bdquo;Batteries-included&ldquo;-Philosophie k&ouml;nnen Django-Entwickler schnell robuste Anwendungen erstellen und dabei Best Practices befolgen.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1783324091855\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Muss ich Python beherrschen, um Django zu erlernen?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Ja, Python-Kenntnisse sind f&uuml;r das Erlernen von Django, einem Python-basierten Web-Framework, unerl&auml;sslich. Die Vertrautheit mit der Python-Syntax, den Datenstrukturen und der objektorientierten Programmierung wird Ihnen helfen, die Struktur und Funktionalit&auml;t von Django zu verstehen, wodurch der Lernprozess reibungsloser und effizienter verl&auml;uft.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1783324093249\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Welche Alternativen zu Django gibt es f&uuml;r die Erstellung von Webanwendungen?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Flask, FastAPI und Pyramid sind Python-basierte Alternativen, w&auml;hrend Next.js und Express.js im JavaScript-Bereich beliebt sind. Auch PHP-Optionen wie Laravel und Symfony sind weit verbreitet. In j&uuml;ngster Zeit sind KI-gest&uuml;tzte No-Code-Tools wie Hostinger Horizons auf den Markt gekommen, mit denen Nutzer <a href=\"\/de\/horizons\">Full-Stack-Webanwendungen<\/a> mithilfe von Befehlen in nat&uuml;rlicher Sprache erstellen k&ouml;nnen.<\/p>\n\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Lernen Sie die Grundlagen von Django und erstellen Sie Ihr erstes Webprojekt mit diesem praxisnahen Tutorial. [&#8230;]<\/p>\n<p><a class=\"btn btn-secondary understrap-read-more-link\" href=\"\/de\/tutorials\/django-tutorial\/\">Read More&#8230;<\/a><\/p>\n","protected":false},"author":612,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"rank_math_title":"Django-Tutorial: Erstes Projekt erstellen","rank_math_description":"Lernen Sie die Grundlagen von Django und erstellen Sie Ihr erstes Webprojekt mit diesem praxisnahen Tutorial.","rank_math_focus_keyword":"django-tutorial","footnotes":""},"categories":[25],"tags":[],"class_list":["post-12879","post","type-post","status-publish","format-standard","hentry","category-vps"],"hreflangs":[],"_links":{"self":[{"href":"https:\/\/www.hostinger.com\/de\/tutorials\/wp-json\/wp\/v2\/posts\/12879","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hostinger.com\/de\/tutorials\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hostinger.com\/de\/tutorials\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/de\/tutorials\/wp-json\/wp\/v2\/users\/612"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/de\/tutorials\/wp-json\/wp\/v2\/comments?post=12879"}],"version-history":[{"count":7,"href":"https:\/\/www.hostinger.com\/de\/tutorials\/wp-json\/wp\/v2\/posts\/12879\/revisions"}],"predecessor-version":[{"id":13335,"href":"https:\/\/www.hostinger.com\/de\/tutorials\/wp-json\/wp\/v2\/posts\/12879\/revisions\/13335"}],"wp:attachment":[{"href":"https:\/\/www.hostinger.com\/de\/tutorials\/wp-json\/wp\/v2\/media?parent=12879"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hostinger.com\/de\/tutorials\/wp-json\/wp\/v2\/categories?post=12879"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hostinger.com\/de\/tutorials\/wp-json\/wp\/v2\/tags?post=12879"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}