Python Django獲取URL中的數據詳解

Django獲取URL中的數據

URL中的參數一般有兩種形式。如下所示:

1. https://zy010101.blog.csdn.net/article/details/120816954
2. https://so.csdn.net/so/search?q=Django&t=blog&u=zy010101

我們將第一種形式稱為“URL路徑參數”;第二種形式稱為“URL關鍵字形式”。下面講述如何在Django中獲取這兩種形式的數據。

URL路徑參數

使用path函數

from django.urls import path
from . import views
urlpatterns = [
    path('articles/2003/', views.special_case_2003),
    path('articles/<int:year>/', views.year_archive),
    path('articles/<int:year>/<int:month>/', views.month_archive),
    path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail),
]

關於這段URL的解釋說明,直接參考Django官方文檔即可。

為瞭防止有時候進不去文檔,我將官方文檔也直接貼在下面:

在這裡插入圖片描述

使用re_path函數

如果,使用path函數並不能滿足你匹配URL的要求,那麼可以使用re_path函數來使用正則表達式來匹配URL路徑中的參數。需要註意在Django中,使用正則表達式來獲取分組中的值的語法是(?P<name>pattern),其中 name 是組名,pattern 是要匹配的模式。

from django.urls import path, re_path
from . import views
urlpatterns = [
    path('articles/2003/', views.special_case_2003),
    re_path(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
    re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
    re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<slug>[\w-]+)/$', views.article_detail),
]

這段URL配置的說明可以參考使用正則表達式

同樣,為瞭防止有時候進不去文檔,我將官方文檔也直接貼在下面:

在這裡插入圖片描述

需要特別註意的是,正則表達式進行匹配之後,捕獲的參數都作為字符串傳遞給視圖函數(視圖類)。

URL關鍵字形式

通常,除瞭在URL路徑中傳遞數據,也可以在URL參數中進行數據傳遞。例如:

http://www.demo.com/index?keys=123&values=qwe

這段URL傳遞瞭參數keys和values,它們的值分別是123,qwe.

在此之前,先來介紹一下前備條件QueryDict。

HttpRequest對象的屬性GET、POST都是QueryDict類型的對象

Django獲取URL關鍵字參數可以通過HttpRequest.GET屬性來獲取。例如:

def test(request):
    a = request.GET.get("a")
    b = request.GET.get("b")
    c = request.GET.get("c")
    a_all = request.GET.getlist("a")
    res = a+'<br>'+b+'<br>'+c+'<br>'+str(a_all)
    return HttpResponse(res)

現在使用如下的URL進行請求:

http://127.0.0.1:8008/test?a=1&a=2&b=3&c=4

頁面顯示如下所示:

在這裡插入圖片描述

查詢字符串不區分請求方式,即假使客戶端進行POST方式的請求,依然可以通過request.GET獲取請求中的查詢字符串數據。

總結

本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!

推薦閱讀: