URL-Pattern淺析

一、urlpatterns有什麼用

urlpatterns是一個列表,用於將url與視圖函數或類相關聯。在Django中,我們編寫的所有視圖函數/類都需要通過urlpatterns來進行路由分發。

urlpatterns通常被定義在項目的urls.py文件中。例如:

from django.urls import path
from . import views

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

在這個示例中,我們將’/index/’和’/login/’這兩個URL路徑與index()和login()視圖函數相關聯。當用戶訪問’/index/’時,Django會調用index()視圖函數。

二、urlpatterns的值怎麼設置

我們可以將urlpatterns看作一個列表,列表中的每一個元素都代表一個URL與視圖函數/類的映射關係。

在Django中,我們通常使用path()函數或re_path()函數來設置urlpatterns的值。path()函數用於通用的URL匹配,而re_path()函數則可以使用正則表達式進行更加靈活的匹配。

具體使用如下:

from django.urls import path, re_path
from . import views

urlpatterns = [
    path('index/', views.index, name='index'),
    path('articles//', views.article_year),
    re_path(r'^articles/(\d{4})/(0?[1-9]|1[012])/$', views.article_month),
]

在這個示例中,我們使用path()函數將’/index/’路徑與index()視圖函數相關聯,同時使用了一個具有參數的視圖函數(article_year())。

另外,我們還使用了re_path()函數來匹配形如’/articles/2019/05/’這樣的路徑,並與具有參數的視圖函數(article_month())相關聯。

三、urlpattern怎麼匹配好

在Django中,URL匹配是按照順序進行的。當用戶發起請求時,Django系統按照urlpatterns中定義的順序逐一檢查每一個URLpattern,直到匹配到一個合適的URLpattern為止。

例如:

from django.urls import path
from . import views

urlpatterns = [
    path('login/', views.login, name='login'),
    path('login/forgot/', views.forgot, name='forgot'),
    path('login/register/', views.register, name='register'),
]

在這個示例中,如果用戶訪問’/login/forgot/’路徑,Django會去匹配urlpatterns中的第一個pattern,即’login/’。由於’login/’並不匹配,Django會繼續匹配第二個pattern:’/login/forgot/’。此時成功匹配。

注意,urlpatterns中的值匹配時是按照從上到下的順序進行的。因此,如果定義下面的urlpatterns:

from django.urls import path
from . import views

urlpatterns = [
    path('users/', views.users, name='users'),
    path('users/new/', views.new_user, name='new_user'),
    path('users//', views.user_detail, name='user_detail'),
    path('users//edit/', views.edit_user, name='edit_user'),
]

如果用戶訪問’users/3/edit/’,Django將會先匹配’users/’和’users/new/’。這兩個pattern都不匹配,然後再匹配’users/<int:user_id>/’這個pattern。即使’users/<int:user_id>/’後面也定義了一個匹配’users/<int:user_id>/edit/’,也不會被執行。

四、patterns選取

下面是三個與url-pattern相關的patterns:

1、將URLpattern分離到單獨的模塊中

# urls.py
from django.urls import include, path

from . import views

urlpatterns = [
    path('', views.index),
    path('accounts/', include('django.contrib.auth.urls')),
    path('blog/', include('blog.urls')),
    # ...
]

在這個示例中,我們將賬戶應用的URLpattern放到了/accounts/路徑中,並將’blog/’的URLpattern放到了blog應用中。這可以使urls.py文件更加整潔,也可以方便地管理多個不同的URLpattern。此外,使用include()函數還可以允許其他應用中的URLpattern在你的應用中被重複使用。

2、使用正則表達式進行URL匹配

# urls.py
from django.urls import re_path
from . import views

urlpatterns = [
    re_path(r'^search/(?P<query>\w+)/(?P<page>\d+)/$', views.search_results),
]

在這個示例中,我們使用了re_path()函數並使用正則表達式進行URL匹配。使用捕獲組(?P<>),我們將查詢(query)和頁數(page)作為參數傳遞給搜索結果視圖函數(search_results())。

3、設置URL名稱

# urls.py
from django.urls import path
from myapp import views

urlpatterns = [
    path('blog/', views.BlogListView.as_view(), name='blog'),
]

在這個示例中,我們為URLpattern指定了一個名稱’blog’。通過指定URL名稱,我們可以在其他地方引用該URL,例如模板中的鏈接。

原創文章,作者:QXPI,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/145677.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
QXPI的頭像QXPI
上一篇 2024-10-27 23:52
下一篇 2024-10-27 23:52

相關推薦

  • Python解碼URL

    本文將從以下幾個方面對Python解碼URL進行詳細闡述:URL編碼的作用和原理、Python urllib庫解碼URL的基本用法、Python手動解碼URL的方法、特殊字元在UR…

    編程 2025-04-28
  • Python URL解碼

    在Web開發過程中,URL編碼和解碼是一個很常見的問題。本文將會詳細介紹Python中對URL的解碼方法。 一、URL編碼與URL解碼 URI(Uniform Resource I…

    編程 2025-04-28
  • Python 中文轉URL編碼

    本文將從以下幾個方面詳細闡述Python中實現中文轉URL編碼的方法及注意事項。 一、URL編碼概述 URL編碼也稱為百分號編碼,是一種將URL中的非ASCII字元轉換成「%」後加…

    編程 2025-04-27
  • HTTPs請求URL里的參數會加密嗎?

    是的,HTTPS請求URL里的參數會加密。HTTPS是HTTP協議的加密版本,在傳輸數據時,使用了SSL/TLS協議對傳輸內容進行加密,保證數據在傳輸過程中不會被篡改、竊取。下面我…

    編程 2025-04-27
  • 從多個方面講解URL生成二維碼

    一、二維碼技術簡介 二維碼是一種用於儲存信息的矩陣條形碼,現已廣泛應用於各種應用場景,如門票、支付、證件等。二維碼由黑、白模塊組成,其中黑塊表示二進位數字1,白塊表示0,通過圖像處…

    編程 2025-04-25
  • no all pattern found

    一、概述 no all pattern found常見於正則表達式中,表示在所給的字元串中無法匹配到完整的模式。這個問題一般出現在正則表達式使用不當時。 二、可能出現問題的情況 1…

    編程 2025-04-23
  • URL最長支持多少字元

    一、GET請求URL最長支持多少字元 GET請求是HTTP協議中最常用的請求方式之一,而GET請求的參數是通過URL後面的參數進行傳遞的,但是URL的長度是有限制的,對於不同的瀏覽…

    編程 2025-04-23
  • 圖片URL轉Base64完整教程

    一、前言 在日常開發中,圖片URL轉Base64是一個比較常見的需求,它可以使圖片在網路傳輸中更加快速、安全。圖片URL轉Base64是把圖片URL轉化為一個以base64編碼的字…

    編程 2025-04-23
  • JavaScript URL編碼與解碼

    一、URL編碼與解碼概述 在Web開發中,有時需要將字元串傳遞給URL。由於某些字元會在URL中具有特殊含義(例如?、&、=等),因此需要進行URL編碼以確保這些字元被正確…

    編程 2025-04-13
  • %url%詳解

    在互聯網時代,URL(統一資源定位符)是一個不可或缺的概念。作為瀏覽器中訪問網頁的地址,任何一位編程開發工程師都需要了解URL的相關知識。本文將從多個方面對URL進行詳細的闡述。 …

    編程 2025-04-12

發表回復

登錄後才能評論