Django-Routenverteilung

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.pydurch URL-Konfiguration (normalerweise in einer Datei definiert) erreicht.

1. Was ist Routenverteilung?

  1. 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.

  2. 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.

  3. 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.

  4. 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:

  1. Root-URL-Konfiguration : Im Stammverzeichnis des Projekts befindet sich normalerweise eine urls.pyDatei, die die Haupt-Routing-Konfiguration des Projekts enthält.

  2. 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.

  3. Anwendungs-URL-Konfiguration : Jede Anwendung kann über eine eigene urls.pyDatei verfügen, die die Routing-Regeln für die Anwendung definiert.

  4. 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 .

  5. Benannte Routen : Routen können benannt werden, sodass sie in Vorlagen und Ansichten leicht referenziert werden können.

  6. Umleitung : Die Routenverteilung kann auch zur Implementierung einer URL-Umleitung verwendet werden.

2.1 Routing-Konfiguration auf Anwendungsebene

Jede Django-Anwendung kann eine urls.pyDatei 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 UrlAppist es der Name einer Anwendung und viewsdas Modul in dieser Anwendung, das die Ansicht definiert. urlpatternsIst 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.pykö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.pyim 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 Datei UrlAppunter der Anwendung urls.pyund verwendet sie urlpatternszur weiteren Verarbeitung der Anfrage.

  • path('urlapp2/', include('UrlApp2.urls')): Auch diese Codezeile UrlApp2definiert ein Routing-Präfix für die Anwendung /urlapp2/. Alle URLs, die mit diesem Präfix beginnen, werden zur Verarbeitung an UrlApp2die Dateien der Anwendung übergeben urls.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_viewdie 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_datadie 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 dataParameter 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.pyden 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])}')

reverseDie 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.pyzuweisen 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.pykönnen Sie eine Eigenschaft definieren, app_nameum 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!

Ich denke du magst

Origin blog.csdn.net/yz_518/article/details/142703369
Empfohlen
Rangfolge