Python Django獲取URL中的數(shù)據(jù)詳解
Django獲取URL中的數(shù)據(jù)
URL中的參數(shù)一般有兩種形式。如下所示:
1. https://zy010101.blog.csdn.net/article/details/120816954 2. https://so.csdn.net/so/search?q=Django&t=blog&u=zy010101
我們將第一種形式稱為“URL路徑參數(shù)”;第二種形式稱為“URL關(guān)鍵字形式”。下面講述如何在Django中獲取這兩種形式的數(shù)據(jù)。
URL路徑參數(shù)
使用path函數(shù)
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), ]
關(guān)于這段URL的解釋說(shuō)明,直接參考Django官方文檔即可。
為了防止有時(shí)候進(jìn)不去文檔,我將官方文檔也直接貼在下面:
使用re_path函數(shù)
如果,使用path函數(shù)并不能滿足你匹配URL的要求,那么可以使用re_path函數(shù)來(lái)使用正則表達(dá)式來(lái)匹配URL路徑中的參數(shù)。需要注意在Django中,使用正則表達(dá)式來(lái)獲取分組中的值的語(yǔ)法是(?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配置的說(shuō)明可以參考使用正則表達(dá)式
同樣,為了防止有時(shí)候進(jìn)不去文檔,我將官方文檔也直接貼在下面:
需要特別注意的是,正則表達(dá)式進(jìn)行匹配之后,捕獲的參數(shù)都作為字符串傳遞給視圖函數(shù)(視圖類)。
URL關(guān)鍵字形式
通常,除了在URL路徑中傳遞數(shù)據(jù),也可以在URL參數(shù)中進(jìn)行數(shù)據(jù)傳遞。例如:
http://www.demo.com/index?keys=123&values=qwe
這段URL傳遞了參數(shù)keys和values,它們的值分別是123,qwe.
在此之前,先來(lái)介紹一下前備條件QueryDict。
HttpRequest對(duì)象的屬性GET、POST都是QueryDict類型的對(duì)象
Django獲取URL關(guān)鍵字參數(shù)可以通過(guò)HttpRequest.GET屬性來(lái)獲取。例如:
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)
現(xiàn)在使用如下的URL進(jìn)行請(qǐng)求:
http://127.0.0.1:8008/test?a=1&a=2&b=3&c=4
頁(yè)面顯示如下所示:
查詢字符串不區(qū)分請(qǐng)求方式,即假使客戶端進(jìn)行POST方式的請(qǐng)求,依然可以通過(guò)request.GET獲取請(qǐng)求中的查詢字符串?dāng)?shù)據(jù)。
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
執(zhí)行Django數(shù)據(jù)遷移時(shí)報(bào) 1091錯(cuò)誤及解決方法
這篇文章主要介紹了執(zhí)行Django數(shù)據(jù)遷移,報(bào)錯(cuò) 1091,需要的朋友可以參考下2019-10-10使用Python實(shí)現(xiàn)一鍵往Word文檔的表格中填寫數(shù)據(jù)
在工作中,我們經(jīng)常遇到將Excel表中的部分信息填寫到Word文檔的對(duì)應(yīng)表格中,以生成報(bào)告,方便打印,所以本文小編就給大家介紹了如何使用Python實(shí)現(xiàn)一鍵往Word文檔的表格中填寫數(shù)據(jù),文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下2023-12-12Python實(shí)現(xiàn)擴(kuò)展內(nèi)置類型的方法分析
這篇文章主要介紹了Python實(shí)現(xiàn)擴(kuò)展內(nèi)置類型的方法,結(jié)合實(shí)例形式分析了Python嵌入內(nèi)置類型擴(kuò)展及子類方式擴(kuò)展的具體實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-10-10Python學(xué)生成績(jī)管理系統(tǒng)簡(jiǎn)潔版
這篇文章主要為大家詳細(xì)介紹了簡(jiǎn)潔版的Python學(xué)生成績(jī)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01Python實(shí)現(xiàn)的求解最大公約數(shù)算法示例
這篇文章主要介紹了Python實(shí)現(xiàn)的求解最大公約數(shù)算法,涉及Python數(shù)學(xué)運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2018-05-05