Vorwort:
Wir haben die Grundlagen von Django bereits gelernt. Heute lernen wir weiter: Routing-Verteilung.
Die Routenverteilung ist ein Kernkonzept im Web-Framework. Es bezieht sich auf den Prozess der Zuordnung verschiedener URL-Anfragen zu entsprechenden Verarbeitungsfunktionen (Ansichten). In Web-Frameworks wie Django wird die Routenverteilung urls.py
durch URL-Konfiguration (normalerweise in einer Datei definiert) erreicht.
1. Was ist Routenverteilung?
-
Definieren Sie URL-Muster : In Django wird die Routenverteilung normalerweise durch die Definition einer Reihe von URL-Mustern erreicht. Diese Muster geben die Struktur von URLs an und welche Ansichtsfunktionen aufgerufen werden sollen, wenn auf diese URLs zugegriffen wird.
-
Zuordnung zu Ansichten : Jedes URL-Muster ist einer Ansichtsfunktion oder -klasse zugeordnet. Wenn eine angeforderte URL mit einem Muster übereinstimmt, ruft Django die damit verbundene Ansichtsfunktion auf, um die Anfrage zu bearbeiten.
-
Anfragen verteilen : Der Zweck der Routenverteilung besteht darin, die Anfrage des Benutzers an die richtige Ansichtsfunktion zu verteilen. Dieser Prozess ist dynamisch und wird anhand der angeforderten URL bestimmt.
-
URLs organisieren : Die Routenverteilung hilft dabei, die URL-Struktur Ihres Projekts zu organisieren, sodass sie klar und einfach zu pflegen ist. Durch die Zuordnung von URLs zu Ansichten können Entwickler logisch klare Webanwendungen erstellen.
2. Routenverteilung in Django
In Django wird die Routenverteilung durch die folgenden Schritte erreicht:
-
Root-URL-Konfiguration : Im Stammverzeichnis des Projekts befindet sich normalerweise eine
urls.py
Datei, die die Haupt-Routing-Konfiguration des Projekts enthält. -
Enthält Anwendungsrouting : In der Root
urls.py
-Datei können Sie Funktionen verwenden,include()
um Anforderungen an verschiedene Anwendungen zu verteilen. Dadurch kann jede Anwendung ihre eigene Routing-Konfiguration haben, wodurch die Projektstruktur modularer wird. -
Anwendungs-URL-Konfiguration : Jede Anwendung kann über eine eigene
urls.py
Datei verfügen, die die Routing-Regeln für die Anwendung definiert. -
Reguläre Ausdrücke und Pfadausdrücke : Mit Django können Sie URL-Muster mithilfe regulärer Ausdrücke (über
re_path()
Funktionen) oder Pfadausdrücken (über Funktionen)path()
definieren . -
Benannte Routen : Routen können benannt werden, sodass sie in Vorlagen und Ansichten leicht referenziert werden können.
-
Umleitung : Die Routenverteilung kann auch zur Implementierung einer URL-Umleitung verwendet werden.
2.1 Routing-Konfiguration auf Anwendungsebene
Jede Django-Anwendung kann eine urls.py
Datei haben, die zum Definieren der Routing-Konfiguration der Anwendung verwendet wird.
# UrlApp/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('index/', views.index),
]
In diesem Beispiel UrlApp
ist es der Name einer Anwendung und views
das Modul in dieser Anwendung, das die Ansicht definiert. urlpatterns
Ist eine Liste mit allen Routing-Regeln für die Anwendung. Jede Routing-Regel path()
wird mithilfe einer Funktion definiert, die ein URL-Muster und eine Ansichtsfunktion akzeptiert.
2.2 Routenverteilung von Projekten
In der Stammdatei des Projekts urls.py
können Sie Anfragen an verschiedene Anwendungen verteilen. Dies wird durch Funktionen include()
erreicht .
# 项目的根目录 urls.py
from django.urls import path, include
urlpatterns = [
path('urlapp/', include('UrlApp.urls')),
path('urlapp2/', include('UrlApp2.urls')),
]
Die Funktion hier include()
wird verwendet, um ein weiteres URL-Konfigurationsmodul einzubinden. Wenn Django eine Anfrage bearbeitet, schaut es sich die Liste urls.py
im Stammverzeichnis an urlpatterns
. Wenn eine passende Route gefunden wird, verteilt es die Anfrage weiter an die angegebene Anwendungsroutingkonfiguration.
-
path('urlapp/', include('UrlApp.urls'))
: Diese Codezeile definiert eine Routing-Regel. Wenn ein Benutzer darauf zugreift/urlapp/
, sucht Django nach der DateiUrlApp
unter der Anwendungurls.py
und verwendet sieurlpatterns
zur weiteren Verarbeitung der Anfrage. -
path('urlapp2/', include('UrlApp2.urls'))
: Auch diese CodezeileUrlApp2
definiert ein Routing-Präfix für die Anwendung/urlapp2/
. Alle URLs, die mit diesem Präfix beginnen, werden zur Verarbeitung anUrlApp2
die Dateien der Anwendung übergebenurls.py
.
2.3 Verwenden Sie reguläre Ausdrücke, um Routen abzugleichen
Die Funktionen von Django re_path()
ermöglichen den Abgleich von URL-Mustern mithilfe regulärer Ausdrücke.
# 使用正则表达式匹配路由
from django.urls import re_path
from django.http import HttpResponse
from myapp import views
urlpatterns = [
re_path(r'^[A-Za-z]+/$', views.re_view),
]
def re_view(request):
return HttpResponse('这个视图的路由是英文字母响应')
In diesem Beispiel r'^[A-Za-z]+/$'
stimmt der reguläre Ausdruck mit jeder URL überein, die mit einem oder mehreren englischen Buchstaben beginnt und endet. Der übereinstimmende Buchstabenteil wird an re_view
die Ansichtsfunktion übergeben. Dies ist eine allgemeine Darstellung regulärer Ausdrücke.
2.4 URL-Parameterübergabe
Mit den Funktionen von Django path()
können Parameter in der URL definiert und an Ansichtsfunktionen übergeben werden.
# URL参数传递
from django.urls import path
urlpatterns = [
path('demo/<urldata>/', views.get_url_data),
]
def get_url_data(request, urldata):
return HttpResponse(f'从 URL 中获取到的参数为:{urldata}')
In diesem Fall <urldata>
handelt es sich um einen dynamischen Pfadparameter, der durch den tatsächlichen URL-Teil ersetzt und als Parameter an get_url_data
die Ansichtsfunktion übergeben wird.
2.5 Tragen zusätzlicher Daten in URL-Zuordnungen
path()
Die Funktion „or“ re_path()
kann als dritten Parameter ein Wörterbuch akzeptieren, das als zusätzliche Daten an die Ansichtsfunktion übergeben wird.
urlpatterns = [
path('extra/', views.extra, {'age': 28}),
]
def extra(request, age):
return HttpResponse(f'从 url 映射方法中获取到的附加数据为:{age}')
In diesem Beispiel wird das Wörterbuch an die Ansichtsfunktion {'age': 28}
übergeben .extra
2.6 Standardparameter
Ansichtsfunktionen können Standardparameterwerte akzeptieren. Wenn die entsprechenden Parameter nicht in der URL angegeben sind, werden die Standardwerte verwendet.
urlpatterns = [
path('default/', views.default_data),
path('default/<data>/', views.default_data),
]
def default_data(request, data=369):
return HttpResponse(f'从 URL 中获取到的参数为:{data}')
Wenn in diesem Beispiel keine data
Parameter in der URL angegeben sind, verwendet die Ansichtsfunktion den Standardwert 369
.
2.7.Routing-Konverter
Django bietet einige integrierte Routenkonverter zum Konvertieren von URL-Parametern in bestimmte Datentypen.
urlpatterns = [
path('int/<int:data>/', views.int_view),
path('str/<str:data>/', views.str_view),
path('path/<path:data>/', views.path_view),
path('slug/<slug:data>/', views.slug_view),
path('uuid/<uuid:data>/', views.uuid_view),
]
def int_view(request, data):
return HttpResponse(f'使用 int 转换器,接收到的数据为:{data}')
def str_view(request, data):
return HttpResponse(f'使用 str 转换器,接收到的数据为:{data}')
def path_view(request, data):
return HttpResponse(f'使用 path 转换器,接收到的数据为:{data}')
def slug_view(request, data):
return HttpResponse(f'使用 slug 转换器,接收到的数据为:{data}')
def uuid_view(request, data):
return HttpResponse(f'使用 uuid 转换器,接收到的数据为:{data}')
int
: Entspricht positiven Ganzzahlen und konvertiert den Parameter in einen Ganzzahltyp.str
: Entspricht nicht leeren Zeichenfolgen.path
: Entspricht jeder nicht leeren Zeichenfolge, einschließlich Schrägstrichen.slug
: Entspricht Buchstaben, Zahlen, Unterstrichen und Bindestrichen.uuid
: Entspricht Universally Unique Identifiers (UUIDs).
3. Reverse-Parsing-Route:
Reverse-Parsing-Routing ist eine sehr nützliche Funktion in Django, die es Ihnen ermöglicht, URLs dynamisch über den Namen der Ansichtsfunktion (d. h. den Musternamen der URL) zu erstellen, anstatt die URL-Zeichenfolge direkt fest zu codieren. Dieser Ansatz verbessert die Wartbarkeit und Flexibilität des Codes, insbesondere wenn Sie die URL-Struktur ändern müssen. Sie müssen nur urls.py
den Pfad in der Datei ändern, anstatt im gesamten Projekt hartcodierte URLs zu suchen und zu ersetzen.
In Django ist das Routing mit umgekehrter Auflösung eine Möglichkeit zum dynamischen Abrufen von URLs, die es Ihnen ermöglicht, URLs in Vorlagen und Ansichten mithilfe von für Menschen lesbaren Namen anstelle von fest codierten Pfaden zu referenzieren. Dieser Ansatz verbessert die Wartbarkeit und Lesbarkeit des Codes.
3.1 Reverse-Parsing-Routen in HTML-Vorlagen
In der Vorlage können Sie verwenden, {% url 'URL的模式名称' 参数 %}
um die Route umgekehrt zu analysieren.
<body>
反向解析路由<br>
<a href="{% url 'num' %}">点击开奖</a><br>
<a href="{% url 'age' 28 %}">不要点击</a><br>
</body>
Hier sind 'num'
und 'age'
die Musternamen der URLs, die der URL-Konfiguration der Ansicht entsprechen.
3.2 Analysieren Sie Routen in der Ansicht umgekehrt
In der Ansicht können Sie reverse('URL的模式名称')
über die URL abrufen.
from django.urls import reverse
from django.http import HttpResponse
from django.shortcuts import redirect
def text(request):
return HttpResponse(f'视图解析路由:{reverse("num")}')
def redirect_reverse(request):
return redirect(reverse("num"))
def text_data(request, data):
return HttpResponse(f'视图解析路由:{reverse("age", args=[data])}')
reverse
Die Funktion akzeptiert den Musternamen der URL und eine optionale Parameterliste oder ein Schlüsselwortparameterwörterbuch und gibt die entsprechende URL zurück.
3.3URL-Mustername
In können Sie einen Musternamen für eine URL definieren, indem Sie den Parametern der Funktion Werte urls.py
zuweisen path
.name
from django.urls import path
from . import views
urlpatterns = [
path('index/', views.index),
path('html/', views.html_view),
path('number/', views.number, name='num'),
path('age/<data>/', views.data_view, name='age'),
]
3.4.URL-Anwendungsnamespace
In großen Projekten können verschiedene Anwendungen unterschiedliche URL-Konfigurationen haben. Um Konflikte mit URL-Musternamen zu vermeiden, können Sie in Django für jede Anwendung einen Namensraum definieren.
3.5 Anwendungs-Namespace definieren
In den Dateien Ihrer Anwendung urls.py
können Sie eine Eigenschaft definieren, app_name
um den Namensraum der Anwendung festzulegen.
app_name = 'urlapp2'
3.6 Verwendung von Anwendungsnamespaces in Vorlagen
Beim umgekehrten Parsen einer URL, die zu einem bestimmten Anwendungs-Namespace in einer Vorlage gehört, müssen Sie den Anwendungs-Namespace und den Musternamen der URL angeben.
<body>
<a href="{% url 'urlapp2:num' %}">点击开奖</a><br>
<a href="{% url 'urlapp2:age' 28 %}">不要点击</a><br>
</body>
Hier 'urlapp2'
ist der Namespace der Anwendung 'num'
und 'age'
der Mustername der URL.
3.7 Verwendung von Anwendungsnamespaces in Ansichten
In der Ansicht müssen Sie außerdem den URL-Musternamen mit dem Anwendungs-Namespace verwenden, um die URL rückwärts aufzulösen.
def text(request):
return HttpResponse(f'视图解析路由:{reverse("urlapp2:num")}')
def redirect_reverse(request):
return redirect(reverse("urlapp2:num"))
def text_data(request, data):
return HttpResponse(f'视图解析路由:{reverse("urlapp2:age", args=[data])}')
Reverse-Resolution-Routing ist eine leistungsstarke Funktion in Django, mit der Sie URLs dynamisch erstellen können, anstatt sie hart zu codieren. Durch die Definition von URL-Schemanamen und Anwendungsnamespaces können Sie URL-Konflikte vermeiden und Ihren Code klarer und einfacher zu warten gestalten.
Abschluss:
Heute werde ich hier den Teil über die Routing-Verteilung von Django teilen. Diese Routing-Verteilung ist im gesamten Django-Framework sehr wichtig, da die Routing-Verteilung die Flexibilität und Wartbarkeit Ihres Codes verbessern kann Es ist unvermeidlich, dass es in diesen Inhalten einige Auslassungen zur Routing-Verteilung geben wird. Ich hoffe auch, dass ich die Korrekturen der Chefs begrüßen kann, und der Herausgeber wird sie demütig akzeptieren. Das war's für den heutigen Austausch. Bis zum nächsten Mal!