傳遞方式 |
示例 |
後端獲取方式 |
數據類型 |
url路徑(path) |
/news/1/2 |
正則匹配 |
str |
查詢字符串 |
/news2?category=1&page=2 |
request.GET |
QueryDict |
請求體:表單類型數據 |
category=1&page=2 |
request.POST |
QueryDict |
請求體:json等 |
{"category":1,"page":2} |
request.body |
bytes |
請求頭 |
category=1 page=2 |
request.META |
字典 |
客戶端經過五種方式向服務器傳參,django 會自動把參數封裝到 request 對象(HttpRequest類型的實例)中,咱們獲取這些參數須要經過 request 對象獲取,而根據傳參的方式的不一樣,獲取調用的屬性也會不一樣,獲取到的數據類型也不同。根據屬性的數據類型須要調用其 get() 方法或 getlist() 方法獲取值。python
獲取 request 請求的屬性: .GET:獲取查詢字符串參數 (與請求方式無關)——QueryDict對象 .POST:獲取請求體中的表單類型的數據(與請求方式有關,僅限post請求)——QueryDict對象 .body:獲取請求體非表單類型的數據,好比:json .META:獲取請求頭中的數據(獲取自定義屬性時,須要加前綴「HTTP_」, 並轉成大寫)
.user:當前訪問的登陸用戶對象
request 裏保存着 user 屬性,若是用戶已登錄,那麼 user 是一個 AbstractUser 對象,若是用戶未登陸,那麼 user 是一個 AnnoymousUser 對象。django
user對象判斷是否登錄:request.user.is_authenticated()返回true表示登錄。json
Django 對 POST、PUT、PATCH、DELETE 請求方式開啓了 CSRF 安全防禦,爲方便測試,能夠在 settings.py 文件中註釋掉 CSRF 中間件,關閉CSRF防禦。後端
獲取QueryDict的值時,能夠在參數中設置默認值,在或取不到值時返回默認值安全
.get()方法服務器
根據鍵獲取值 若是一個鍵同時擁有多個值,將獲取最後一個值 若是鍵不存在則返回None值,能夠設置返回自定義的默認值 dict.get('鍵',默認值)
.getlist()方法app
根據鍵獲取多個值,值以列表返回 若是鍵不存在則返回空列表[] dict.getlist('鍵',默認值)
HttpResponseRedirect 重定向
JsonResponse 返回json數據post
Django提供了一系列HttpResponse的子類,能夠快速設置狀態碼: HttpResponseRedirect 302 HttpResponseNotModified 304 HttpResponseBadRequest 400 HttpResponseNotFound 404 HttpResponseForbidden 403 HttpResponseNotAllowed 405 HttpResponseServerError 500
response =HttpResponse(content=響應體, content_type=響應體數據MIME類型, status=狀態碼)
能夠直接將 HttpResponse 對象當作字典進行響應頭鍵值對的設置:測試
respone['響應頭key'] = 響應頭值
# 傳遞字典類型的數據 content_type: application/json JsonResponse({"name":"張三"}) # 解決編碼問題: {"name": "\u5f20\u4e09"} JsonResponse({"name":"張三"}, json_dumps_params={'ensure_ascii':False}) # 傳遞列表數據 JsonResponse([{"name":"張三"}], json_dumps_params={'ensure_ascii':False}, safe=False)
# 重定向到首頁 狀態碼:302 return redirect('/index') # 項目的urls.py url(r'^', include('users.urls', namespace='users')), # 應用的urls.py url(r'^home$', views.index, name='index'), def my_redirect(request): # 生成的url的值爲 /home url = reverse('users:index') return redirect(url) # 重定向