Django中url以及請求響應

2021-08-28 03:21:28 字數 4257 閱讀 9330

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 ...