Erstellung einer einfachen Umfrageanwendung

DjangoDjangoAdvanced
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Tutorial führen wir Sie durch die Erstellung einer einfachen Umfrageanwendung.

Dies ist ein Guided Lab, das schrittweise Anweisungen bietet, um Ihnen beim Lernen und Üben zu helfen. Befolgen Sie die Anweisungen sorgfältig, um jeden Schritt abzuschließen und praktische Erfahrungen zu sammeln. Historische Daten zeigen, dass dies ein Labor der Stufe Experte mit einer Abschlussquote von 29% ist. Es hat eine positive Bewertungsrate von 100% von den Lernenden erhalten.

Überblick

Lassen Sie uns am Beispiel lernen.

In diesem Tutorial führen wir Sie durch die Erstellung einer einfachen Umfrageanwendung.

Sie besteht aus zwei Teilen:

  • Eine öffentliche Website, auf der Menschen Umfragen ansehen und in ihnen abstimmen können.
  • Eine Administrationswebsite, auf der Sie Umfragen hinzufügen, ändern und löschen können.

Wir gehen davon aus, dass Sie bereits Django installiert haben. Sie können feststellen, ob Django installiert ist und welche Version es ist, indem Sie den folgenden Befehl in einem Shell-Prompt ausführen:

python -m django --version

Wenn Django installiert ist, sollten Sie die Version Ihrer Installation sehen. Wenn es nicht ist, erhalten Sie eine Fehlermeldung, die besagt, dass „kein Modul mit dem Namen django“ gefunden wurde.

Dieses Tutorial ist für Django geschrieben, das Python 3.10 und später unterstützt. Wenn die Django-Version nicht übereinstimmt, können Sie sich auf das Tutorial für Ihre Django-Version beziehen, indem Sie den Versionswechsler in der unteren rechten Ecke dieser Seite verwenden, oder Django auf die neueste Version aktualisieren.

Ein Projekt erstellen

Wenn Sie Django zum ersten Mal verwenden, müssen Sie einige initiale Einstellungen vornehmen. Namentlich müssen Sie automatisch Code generieren, der ein Django-Projekt erstellt – eine Sammlung von Einstellungen für eine Django-Instanz, einschließlich der Datenbankkonfiguration, Django-spezifischer Optionen und anwendungsspezifischer Einstellungen.

Öffnen Sie eine Befehlszeile, navigieren Sie mit cd in ein Verzeichnis, in dem Sie Ihren Code speichern möchten, und führen Sie dann folgenden Befehl aus:

cd ~/project
django-admin startproject mysite

Dies erstellt ein Verzeichnis mysite im aktuellen Verzeichnis.

Schauen wir uns an, was startproject erstellt hat:

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py

Diese Dateien sind:

  • Das äußere mysite/-Wurzelverzeichnis ist ein Container für Ihr Projekt. Sein Name spielt für Django keine Rolle; Sie können es in irgendeinen Namen umbenennen, den Sie möchten.
  • manage.py: Ein Befehlszeilenwerkzeug, das Ihnen ermöglicht, mit diesem Django-Projekt auf verschiedene Weise zu interagieren.
  • Das innere mysite/-Verzeichnis ist das tatsächliche Python-Paket für Ihr Projekt. Sein Name ist der Python-Paketname, den Sie verwenden müssen, um etwas darin zu importieren (z.B. mysite.urls).
  • mysite/__init__.py: Eine leere Datei, die Python mitteilt, dass dieses Verzeichnis als Python-Paket betrachtet werden soll.
  • mysite/settings.py: Einstellungen/Konfiguration für dieses Django-Projekt.
  • mysite/urls.py: Die URL-Deklarationen für dieses Django-Projekt; ein „Inhaltsverzeichnis“ Ihrer von Django betriebenen Website.
  • mysite/asgi.py: Ein Einstiegspunkt für ASGI-kompatible Webdienste, um Ihr Projekt bereitzustellen.
  • mysite/wsgi.py: Ein Einstiegspunkt für WSGI-kompatible Webdienste, um Ihr Projekt bereitzustellen.

Der Entwicklungsserver

Lassen Sie uns überprüfen, ob Ihr Django-Projekt funktioniert. Wechseln Sie in das äußere mysite-Verzeichnis, wenn Sie es noch nicht getan haben, und führen Sie die folgenden Befehle aus:

cd ~/project/mysite
python manage.py runserver

Auf der Befehlszeile sehen Sie die folgende Ausgabe:

Performing system checks...

System check identified no issues (0 silenced).

You have unapplied migrations; your app may not work properly until they are applied. Run 'python manage.py migrate' to apply them.

- 15:50:53 Django version, using settings'mysite.settings' Starting development server at <http://127.0.0.1:8000/> Quit the server with CONTROL-C.

Ignorieren Sie die Warnung über unangewendete Datenbankmigrationen für jetzt; wir werden uns kurz mit der Datenbank befassen.

Sie haben den Django-Entwicklungsserver gestartet, einen leichtgewichtigen Webdienst, der ausschließlich in Python geschrieben ist. Wir haben ihn mit Django mitgeliefert, damit Sie Dinge schnell entwickeln können, ohne sich um die Konfiguration eines Produktionsservers wie Apache kümmern zu müssen, bis Sie für die Produktion bereit sind.

Jetzt ist ein guter Zeitpunkt, um zu beachten: Verwenden Sie diesen Server nicht in irgendeiner Weise, die einem Produktionsumfeld ähnelt. Er ist nur für die Entwicklung gedacht. (Wir sind im Geschäft von Webframeworks, nicht von Webdiensten.)

Jetzt, da der Server läuft, besuchen Sie http://127.0.0.1:8000/ mit Ihrem Webbrowser. Oder führen Sie curl 127.0.0.1:8000 in der Konsole aus. Sie werden eine Seite mit "Herzlichen Glückwunsch!" sehen, auf der ein Rakete abhebt. Es hat funktioniert!

In der LabEx VM müssen wir die LabEx-Domäne zu ALLOWED_HOSTS hinzufügen. Bearbeiten Sie mysite/settings.py und fügen Sie * am Ende von ALLOWED_HOSTS hinzu, so dass es wie folgt aussieht:

ALLOWED_HOSTS = ["*"]

Dies sagt Django, dass es erlaubt ist, Anfragen mit beliebigen Host-Headern zu bedienen.

Django development server running

Ändern des Ports

Standardmäßig startet der Befehl runserver den Entwicklungsserver auf der internen IP und Port 8000.

Wenn Sie den Port des Servers ändern möchten, übergeben Sie ihn als Befehlszeilenargument. Beispielsweise startet dieser Befehl den Server auf Port 8080:

python manage.py runserver 8080

Wenn Sie die IP des Servers ändern möchten, übergeben Sie sie zusammen mit dem Port. Beispielsweise um auf alle verfügbaren öffentlichen IPs zu hören (was nützlich ist, wenn Sie Vagrant ausführen oder Ihre Arbeit auf anderen Computern im Netzwerk zeigen möchten), verwenden Sie:

python manage.py runserver 0.0.0.0:8080

Wechseln Sie jetzt in die Registerkarte Web 8080 in der LabEx VM, und Sie werden die gleiche "Herzlichen Glückwunsch!"-Seite sehen.

Django development server page

Vollständige Dokumentation über den Entwicklungsserver finden Sie in der runserver-Referenz.

Automatisches Neuladen von runserver
Der Entwicklungsserver lädt Python-Code automatisch neu, wenn dies für jede Anfrage erforderlich ist. Sie müssen den Server nicht neu starten, damit Änderungen am Code wirksam werden. Einige Aktionen wie das Hinzufügen von Dateien lösen jedoch keinen Neustart aus, sodass Sie in diesen Fällen den Server neu starten müssen.

Erstellen der Umfrage-App

Jetzt, da Ihre Umgebung – ein „Projekt“ – eingerichtet ist, sind Sie bereit, an der Arbeit zu beginnen.

Jede Anwendung, die Sie in Django schreiben, besteht aus einem Python-Paket, das einer bestimmten Konvention folgt. Django bietet ein Tool, das automatisch die grundlegende Verzeichnisstruktur einer App erstellt, sodass Sie sich auf den Code schreiben können, anstatt Verzeichnisse zu erstellen.

Projekte vs. Apps
Was ist der Unterschied zwischen einem Projekt und einer App? Eine App ist eine Webanwendung, die etwas macht – z.B. ein Blogsystem, eine Datenbank öffentlicher Akten oder eine kleine Umfrage-App. Ein Projekt ist eine Sammlung von Konfigurationen und Apps für eine bestimmte Website. Ein Projekt kann mehrere Apps enthalten. Eine App kann in mehreren Projekten vorhanden sein.

Ihre Apps können sich an beliebiger Stelle auf Ihrem Python-Pfad <tut-searchpath> befinden. In diesem Tutorial erstellen wir unsere Umfrage-App im selben Verzeichnis wie Ihre manage.py-Datei, sodass sie als eigenes Top-Level-Modul importiert werden kann, anstatt als Untermodul von mysite.

Um Ihre App zu erstellen, stellen Sie sicher, dass Sie sich im selben Verzeichnis wie manage.py befinden, und geben Sie diesen Befehl ein:

cd ~/project/mysite
python manage.py startapp polls

Das erstellt ein Verzeichnis polls, das wie folgt aufgebaut ist:

polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py

Diese Verzeichnisstruktur wird die Umfrageanwendung beherbergen.

Schreiben Ihrer ersten Ansicht

Schreiben wir die erste Ansicht. Öffnen Sie die Datei polls/views.py und fügen Sie den folgenden Python-Code hinzu:

from django.http import HttpResponse


def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

Dies ist die einfachste Ansicht, die es in Django gibt. Um die Ansicht aufzurufen, müssen wir sie einer URL zuordnen – und dazu brauchen wir eine URL-Konfiguration (URLconf).

Um eine URLconf im polls-Verzeichnis zu erstellen, erstellen Sie eine Datei namens urls.py. Ihr App-Verzeichnis sollte jetzt so aussehen:

polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    urls.py
    views.py

Fügen Sie im File polls/urls.py folgenden Code hinzu:

from django.urls import path

from. import views

urlpatterns = [
    path("", views.index, name="index"),
]

Der nächste Schritt besteht darin, die Wurzel-URLconf auf das Modul polls.urls zu verweisen. In mysite/urls.py fügen Sie einen Import für django.urls.include hinzu und fügen Sie ein ~django.urls.include in die urlpatterns-Liste ein, so dass Sie haben:

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path("polls/", include("polls.urls")),
    path("admin/", admin.site.urls),
]

Die Funktion ~django.urls.include ermöglicht das Verweisen auf andere URLconfs. Wenn Django ~django.urls.include findet, schneidet es den Teil der URL ab, der bis zu diesem Punkt übereinstimmt, und sendet den verbleibenden String an die eingeschlossene URLconf für weitere Verarbeitung.

Das Konzept hinter ~django.urls.include ist es, das Einbinden und Spielen von URLs einfach zu machen. Da die Umfragen in ihrer eigenen URLconf (polls/urls.py) liegen, können sie unter "/polls/", oder unter "/fun_polls/", oder unter "/content/polls/" oder unter jedem anderen Pfadwurzel platziert werden, und die App wird weiterhin funktionieren.

Wann sollte man ~django.urls.include() verwenden?
Sie sollten immer include() verwenden, wenn Sie andere URL-Muster einbetten. admin.site.urls ist die einzige Ausnahme hiervon.

Sie haben jetzt eine index-Ansicht in die URLconf eingefügt. Vergewissern Sie sich, dass es funktioniert, mit dem folgenden Befehl:

python manage.py runserver 0.0.0.0:8080

Gehen Sie in Ihrem Browser zu <http:///polls/> und Sie sollten den Text "Hello, world. You're at the polls index." sehen, den Sie in der index-Ansicht definiert haben.

Django URLconf structure

Die Funktion ~django.urls.path wird vier Argumente übergeben, zwei erforderlich: route und view, und zwei optional: kwargs und name. An dieser Stelle lohnt es sich, sich noch einmal zu überlegen, wofür diese Argumente eingesetzt werden.

~django.urls.path-Argument: route

route ist ein String, der ein URL-Muster enthält. Wenn Django eine Anfrage verarbeitet, startet es mit dem ersten Muster in urlpatterns und geht die Liste entlang, vergleicht die angeforderte URL mit jedem Muster, bis es eines findet, das übereinstimmt.

Muster durchsuchen nicht GET- und POST-Parameter oder den Domainnamen. Beispielsweise sucht die URLconf in einer Anfrage an https://www.example.com/myapp/ nach myapp/. In einer Anfrage an https://www.example.com/myapp/?page=3 sucht die URLconf ebenfalls nach myapp/.

~django.urls.path-Argument: view

Wenn Django ein passendes Muster findet, ruft es die angegebene Ansichtsfunktion mit einem ~django.http.HttpRequest-Objekt als erstes Argument und allen "eingefangenen" Werten aus der Route als Schlüsselwortargumente auf. Wir werden ein Beispiel dafür gleich geben.

~django.urls.path-Argument: kwargs

Beliebige Schlüsselwortargumente können in einem Dictionary an die Zielansicht übergeben werden. Wir werden diese Funktion von Django in diesem Tutorial nicht verwenden.

~django.urls.path-Argument: name

Das Benennen Ihrer URL ermöglicht es Ihnen, auf sie eindeutig von anderen Teilen von Django aus zu verweisen, insbesondere aus innerhalb von Templates. Diese leistungsstarke Funktion ermöglicht es Ihnen, globale Änderungen an den URL-Mustern Ihres Projekts vorzunehmen, indem Sie nur eine einzige Datei berühren.

Zusammenfassung

Herzlichen Glückwunsch! Sie haben das Labor zur Erstellung einer einfachen Umfrageanwendung abgeschlossen. Sie können in LabEx weitere Labs ausprobieren, um Ihre Fähigkeiten zu verbessern.