Einführung
In diesem Tutorial führen wir Sie durch die Erstellung einer einfachen Umfrageanwendung.
💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken
In diesem Tutorial führen wir Sie durch die Erstellung einer einfachen Umfrageanwendung.
Lassen Sie uns am Beispiel lernen.
In diesem Tutorial führen wir Sie durch die Erstellung einer einfachen Umfrageanwendung.
Sie besteht aus zwei Teilen:
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.
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:
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.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.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.
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.
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.
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 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 immerinclude()
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://index
-Ansicht definiert haben.
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.
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.