Django ルートの配布

序文:

Django の基本についてはすでに学習しました。今日はルーティング分散について学習します。

ルート分散は、Web フレームワークの中心的な概念であり、さまざまな URL リクエストを対応する処理関数 (ビュー) にマッピングするプロセスを指します。 Django のような Web フレームワークでは、ルートの配布はurls.pyURL 設定 (通常はファイルで定義) を通じて行われます。

1. ルート配信とは何ですか?

  1. URL パターンを定義する: Django では、通常、ルート配布は一連の URL パターンを定義することによって実現されます。これらのパターンは、URL の構造と、それらの URL にアクセスしたときにどのビュー関数を呼び出す必要があるかを指定します。

  2. ビューへのマッピング: 各 URL パターンはビュー関数またはクラスに関連付けられます。リクエストされた URL がパターンと一致すると、Django はそれに関連付けられたビュー関数を呼び出してリクエストを処理します。

  3. リクエストの分散: ルート分散の目的は、ユーザーのリクエストを正しいビュー関数に分散することです。このプロセスは動的であり、要求された URL に基づいて決定されます。

  4. URL の整理: ルート配布により、プロジェクトの URL 構造が整理され、明確になり、保守が容易になります。 URL をビューにマッピングすることで、開発者は論理的に明確な Web アプリケーションを構築できます。

2. Djangoでのルート配布

Django では、ルート配布は次の手順で実現されます。

  1. ルート URL 構成: プロジェクトのルート ディレクトリには、通常、urls.pyプロジェクトのメインのルーティング構成を含むファイルがあります。

  2. アプリケーション ルーティングが含まれます。ルートurls.pyファイルでは、リクエストをさまざまなアプリケーションに分散する関数を使用できますinclude()。これにより、各アプリケーションが独自のルーティング構成を持つことができ、プロジェクト構造がよりモジュール化されます。

  3. アプリケーション URL 構成urls.py: 各アプリケーションは、アプリケーションのルーティング ルールを定義する独自のファイルを持つことができます。

  4. 正規表現とパス式: Django では、正規表現 (関数re_path()経由) またはパス式 (関数経由) を使用してpath()URL パターンを定義できます。

  5. 名前付きルート: テンプレートやビューで簡単に参照できるように、ルートに名前を付けることができます。

  6. リダイレクト: ルート配布を使用して URL リダイレクトを実装することもできます。

2.1 アプリケーションレベルのルーティング構成

各 Django アプリケーションには、urls.pyアプリケーションのルーティング構成を定義するために使用されるファイルを持つことができます。

# UrlApp/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('index/', views.index),
]

この例では、ビューを定義するUrlAppアプリケーションとviewsそのアプリケーション内のモジュールの名前です。urlpatternsアプリケーションのすべてのルーティング ルールを含むリストです。各ルーティング ルールはpath()、URL パターンとビュー関数を受け入れる関数を使用して定義されます。

2.2 プロジェクトのルート配分

プロジェクトのルートurls.pyファイルでは、リクエストをさまざまなアプリケーションに分散できます。これは関数を使用してinclude()実現されます。

# 项目的根目录 urls.py
from django.urls import path, include

urlpatterns = [
    path('urlapp/', include('UrlApp.urls')),
    path('urlapp2/', include('UrlApp2.urls')),
]

ここでの関数はinclude()、別の URL 構成モジュールを含めるために使用されます。 Django はリクエストを処理するときに、 rooturls.py内のリストを調べますurlpatterns。一致するルートが見つかった場合は、指定されたアプリケーション ルーティング構成に要求をさらに分散します。

  • path('urlapp/', include('UrlApp.urls')): このコード行はルーティング ルールを定義します。ユーザーがアクセスすると、Django はアプリケーションの下でファイル/urlapp/を検索し、それを使用してリクエストをさらに処理します。UrlAppurls.pyurlpatterns

  • path('urlapp2/', include('UrlApp2.urls')): 繰り返しになりますが、このコード行はUrlApp2アプリケーションのルーティング プレフィックスを定義します/urlapp2/。このプレフィックスで始まるすべての URL は、処理のためにUrlApp2アプリケーションのファイルに渡されますurls.py

2.3 正規表現を使用してルートを照合する

Django のre_path()関数では、正規表現を使用して URL パターンを照合できます。

# 使用正则表达式匹配路由
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('这个视图的路由是英文字母响应')

この例では、正規表現は、r'^[A-Za-z]+/$'1 つ以上の英字で始まり、終わるすべての URL と一致します。一致した文字部分がre_viewview 関数に渡されます。これは正規表現の一般的な表現です。

2.4 URLパラメータの受け渡し

Django のpath()関数を使用すると、URL でパラメータを定義し、ビュー関数に渡すことができます。

# 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}')

この場合、<urldata>これは動的パス パラメーターであり、実際の URL 部分に置き換えられ、パラメーターとしてget_url_dataビュー関数に渡されます。

2.5 URL マッピングで追加データを運ぶ

path()orre_path()関数は 3 番目のパラメータとして辞書を受け入れることができ、これは追加データとして view 関数に渡されます。

urlpatterns = [
    path('extra/', views.extra, {'age': 28}),
]

def extra(request, age):
    return HttpResponse(f'从 url 映射方法中获取到的附加数据为:{age}')

この例では、辞書がview 関数{'age': 28}に渡されます。extra

2.6 デフォルトパラメータ

ビュー関数はデフォルトのパラメータ値を受け入れることができます。対応するパラメータが URL に指定されていない場合は、デフォルト値が使用されます。

urlpatterns = [
    path('default/', views.default_data),
    path('default/<data>/', views.default_data),
]

def default_data(request, data=369):
    return HttpResponse(f'从 URL 中获取到的参数为:{data}')

 この例では、dataURL にパラメーターが指定されていない場合、ビュー関数はデフォルト値を使用します369

2.7.ルーティングコンバータ

Django には、URL パラメーターを特定のデータ型に変換するための組み込みのルート コンバーターがいくつか用意されています。

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: 正の整数と一致し、パラメータを整数型に変換します。
  • str: 空でない文字列と一致します。
  • path: スラッシュを含む空でない文字列と一致します。
  • slug: 文字、数字、アンダースコア、ダッシュと一致します。
  • uuid: Universally Unique Identifier (UUID) と一致します。

3. 逆解析ルート:

逆解析ルーティングは Django の非常に便利な機能で、URL 文字列を直接ハードコーディングする代わりに、ビュー関数名 (つまり、URL のパターン名) を通じて URL を動的に構築できます。このアプローチにより、コードの保守性と柔軟性が向上します。特に URL 構造を変更する必要がある場合、urls.pyプロジェクト全体でハードコードされた URL を検索して置換するのではなく、ファイル内のパスを変更するだけで済みます。

Django では、逆解決ルーティングは URL を動的に取得する方法であり、ハードコーディングされたパスの代わりに人間が読める名前を使用してテンプレートやビュー内の URL を参照できるようになります。このアプローチにより、コードの保守性と可読性が向上します。

3.1 HTML テンプレート内のルートを逆解析する

テンプレートでは、{% url 'URL的模式名称' 参数 %}ルートを逆解析するために使用できます。

<body>
    反向解析路由<br>
    <a href="{% url 'num' %}">点击开奖</a><br>
    <a href="{% url 'age' 28 %}">不要点击</a><br>
</body>

ここで、'num'と は'age'URL のパターン名であり、ビューの URL 構成に対応します。

3.2 ビュー内のルートを逆解析する

ビューでは、 を使用してreverse('URL的模式名称')URL を取得できます。

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この関数は、URL のパターン名とオプションのパラメーター リストまたはキーワード パラメーター辞書を受け取り、対応する URL を返します。

3.3URLパターン名

ではurls.pypath関数のnameパラメータに値を割り当てることで、URL のパターン名を定義できます。

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 アプリケーション名前空間

大規模なプロジェクトでは、URL パターン名の競合を避けるために、アプリケーションごとに異なる URL 構成が使用される場合があります。Django では、アプリケーションごとに名前空間を定義できます。

3.5 アプリケーションの名前空間を定義する

アプリケーションのファイルでは、アプリケーションの名前空間を設定するプロパティurls.pyを定義できます。app_name

app_name = 'urlapp2'

3.6 テンプレートでのアプリケーション名前空間の使用

テンプレート内の特定のアプリケーション名前空間に属する URL を逆解析する場合は、アプリケーション名前空間と URL のパターン名を指定する必要があります。

<body>
    <a href="{% url 'urlapp2:num' %}">点击开奖</a><br>
    <a href="{% url 'urlapp2:age' 28 %}">不要点击</a><br>
</body>

ここで、'urlapp2'はアプリケーションの名前空間、'num''age'URL のパターン名です。

3.7 ビューでのアプリケーション名前空間の使用

ビューでは、URL パターン名をアプリケーション名前空間とともに使用して、URL を逆解決する必要もあります。

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])}')

逆解決ルーティングは、URL をハードコーディングする代わりに動的に構築できる Django の強力な機能です。 URL スキーマ名とアプリケーション名前空間を定義すると、URL の競合を回避し、コードをより明確にして保守しやすくすることができます。

結論:

今日は、Django のルーティング分散に関する部分をここで共有します。ルーティング分散はコードの柔軟性と保守性を向上させることができるため、このルーティング分散は Django フレームワーク全体で非常に重要です。ただし、エディターのレベルには制限があるためです。ルーティング配布に関して、これらの内容にいくつかの省略があることは避けられませんが、上司からの修正も歓迎します。編集者は謙虚にそれを受け入れます。今日の共有はここまでです。また次回お会いしましょう。

おすすめ

転載: blog.csdn.net/yz_518/article/details/142703369