1、url傳遞引數
1、非關鍵字引數
urls正則的定義:/路徑/路徑/(引數匹配的正則)
注意: 1、如果要獲取傳遞進來的引數,必須給對應的引數的正則加上()才可以提取
2、如果url中有引數,就必須在檢視函式的形式引數上定義乙個引數,用來接收,否則報錯
如果需要傳遞多個引數:
urls正則的定義:/路徑/路徑/(引數匹配的正則)/(引數匹配的正則)
注意: 1、接收的時候,也要定義多個形式引數用來接收url傳遞的引數
2、接收的引數,必需與傳遞的引數一一對應
2、關鍵字引數
urls正則的定義:/路徑/路徑/(?p《別名》引數匹配的正則)/(?p《別名n>引數匹配的正則n)
url(r'urltest3/(?p\d+)/(?p\d+)/(?p\d+)',views.urltest3),
檢視函式中接收(request,別名n,別名) 注意:形式名必需與別名對應
def urltest3(request,day,mon,year):
return httpresponse(str(year) + '年'+ str(mon) +'月' + str(day)+'日')
好處:會自動的用關鍵字傳遞引數,檢視函式的形參不需要一一對應
2、模板中訪問位址及傳遞引數
1、模板中使用連線
1、直接完整的url位址
百搭2、使用相對路徑
相對路徑
3、相對於主機的路徑 ip:埠/路徑
相對路徑
2、問題:開發:開發、測試、beta、正式..
開發的時候,url位址的路徑可能會修改,修改後,在對應模板中的url位址都要進行修改,而實際開發中,乙個url可能會被多處使用,修改起來工作量大,容易出錯。
3、解決:url反向解析法
使用:
1、在專案下的url中新增namespace屬性值作為標識
如:url(r"^axf***x/",include("day05.urls",namespace="day05")),
格式:url(r'^任意的路徑名/',include('應用的urls位置』,namespace='父標識名')),
2、在應用的url中新增name屬性作為標識
如:url(r'relation***/', views.relation,name="relation"),
格式:url(r'任意的路徑名/',views.函式名,name='子標識名'),
3、在模板使用:
如:相對路徑
格式: 相對路徑
4、反向解析–非關鍵字引數
如:反向解析攜帶引數測試
url:url(r'urlparm/(\d+)/(\d+)/(\d)',views.urlparm.name = 'urlparm')
格式: 每個引數之間用空格隔開即可
5、反向解析—關鍵字引數
如:反向解析攜帶引數測試-關鍵字
url: url(r'urlparam2/(?p\d+)/(?pd+)/(?pd+)', views.urlparam2,name="urlparam2"),
格式: 反向解析攜帶引數測試-關鍵字
關鍵引數是 key=value的形式,key要與url中的別名對應,每組引數用空格隔開。
3、重定向—給使用者的請求換乙個位址
httpresponseredirect的簡寫形式是redirect
1、普通用法
如:return httpresponseredirect('/day01/redirectres')
格式:return httpresponseredirect('重定向的路徑')
2、反向解析法
1、不攜帶引數
如: return httpresponseredirect(reverse("day05:redirectres"))
return httpresponseredirect(reverse("父標識:子標識"))
2、攜帶非關鍵字引數
如: # return httpresponseredirect(reverse("day05:redirectres2",args=(2019,10,30)))
格式: return httpresponseredirect(reverse("day05:redirectres2",args=value1,value2,valuen)))
3、攜帶關鍵字引數
return httpresponseredirect(reverse("day05:redirectres3",kwargs=)) 格式: return httpresponseredirect(reverse("day05:redirectres3",kwargs="key1":value1,"keyn":valuen))
4、response 響應體–響應該客戶端的資料
1、httpresponse('字串形式的資料') 直接返回資料給客戶端
2、render(request,'模板檔案路徑',context=引數) 將引數對映到模板中,轉換成html形式的字串返回給客戶端
3、httpresponseredirect('url位址'或者reverse(反向解析)) 重定向,將該請求轉為其他的處理方式
4、jsonresponse(data) 將data轉換成json格式的資料響應給客戶端
1、通常是將字典形式的資料轉換成json
strjson = 需要字典形式的資料
return jsonresponse(strjson)
2、將model資料轉換成json資料
persons = person.objects.all().values()
# 將queryset轉換成列表
persons = list(persons[:])
#將列表轉成jsonarray資料
strdata = json.dumps(persons)
print(strdata)
print(type(strdata))
return httpresponse(strdata)
5、request 請求體
瀏覽器會自動的將請求引數封裝成乙個請求體,傳遞給伺服器。一般只會檢視引數,不能修改引數。
1、伺服器會自動的將request傳遞給檢視函式
2、request 重要的屬性
request.path 獲取請求的路徑
request.method 獲得請求的方式 get 和 post
request.files 獲取檔案資料
request.cookie
request.session
request.get 攜帶客戶端get請求的引數
request.post 攜帶客戶post請求的引數
3、get請求
1、request。get中就包含了get請求的引數,request.get是雷士字典形式的資料
2、獲取資料
1、request.get['引數名'] 可以獲取引數名對應的資料,如果引數名不存在,會報錯。
2、request.get.get('引數名',預設值) 可以獲取引數名對應的資料,如果引數名不存在,不會報錯,會使用預設值, 如果不設定預設值,預設值為none。
3、request.get.getlist("引數名") 可以獲取引數名對應的資料,如果是乙個引數名對應多個資料,就可以使用getlist來獲取,結果是list形式
4、post請求
1.request.post中就包含了post請求的引數, request.post是類似字典形式的資料
2.獲取引數的用法與get一致
3.注意: 在django的post請求中自帶csrf驗證,所有普通方式不能直接訪問,伺服器會拒絕訪問
解決: 1.直接在表單中的首行 加上 即可, 表示加上csrf認證
2.去掉django的csrf認證在setting的middleware中將 # 'django.middleware.csrf.csrfviewmiddleware', 登出即可
Django 中url補充以及模板繼承
預設值 在url寫路由關係的時候可以傳遞預設引數,如下 url r index views.index,這樣在檢視函式中,就可以獲取這個預設引數name 命名空間 通過下面例子理解 在專案的urls裡寫入如下 urlpatterns url r a include namespace author ...
Django 中url補充以及模板繼承
預設值 在url寫路由關係的時候可以傳遞預設引數,如下 url r index views.index,這樣在檢視函式中,就可以獲取這個預設引數name 命名空間 通過下面例子理解 在專案的urls裡寫入如下 urlpatterns url r a include namespace author ...
Django 中url補充以及模板繼承
預設值 在url寫路由關係的時候可以傳遞預設引數,如下 url r index views.index,這樣在檢視函式中,就可以獲取這個預設引數name 命名空間 通過下面例子理解 在專案的urls裡寫入如下 urlpatterns url r a include namespace author ...