Django:(03)請求和響應

 

1、HttpRequest

客戶端傳參的幾種方式
傳遞方式
示例
後端獲取方式
數據類型
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 屬性:

  request 裏保存着 user 屬性,若是用戶已登錄,那麼 user 是一個 AbstractUser 對象,若是用戶未登陸,那麼 user 是一個 AnnoymousUser 對象。django

  user對象判斷是否登錄:request.user.is_authenticated()返回true表示登錄。json

CSRF 安全防禦:

  Django 對 POST、PUT、PATCH、DELETE 請求方式開啓了 CSRF 安全防禦,爲方便測試,能夠在 settings.py 文件中註釋掉 CSRF 中間件,關閉CSRF防禦。後端

獲取QueryDict:

  獲取QueryDict的值時,能夠在參數中設置默認值,在或取不到值時返回默認值安全

 

2、QueryDict對象

  • QueryDict 對象的包位於 django.http.QueryDict
  • 與字典相似,但一個鍵能夠保存多個值
  • HttpRequest對象的 GET 和 POST 屬性都是 QueryDict 類型

獲取值的方法:

.get()方法服務器

根據鍵獲取值
若是一個鍵同時擁有多個值,將獲取最後一個值
若是鍵不存在則返回None值,能夠設置返回自定義的默認值
dict.get('鍵',默認值)

.getlist()方法app

根據鍵獲取多個值,值以列表返回
若是鍵不存在則返回空列表[]
dict.getlist('鍵',默認值)

  

3、HttpResponse

一、經常使用子類

HttpResponseRedirect   重定向
JsonResponse   返回json數據post

Django提供了一系列HttpResponse的子類,能夠快速設置狀態碼:
HttpResponseRedirect 302
HttpResponseNotModified 304
HttpResponseBadRequest 400
HttpResponseNotFound 404
HttpResponseForbidden 403
HttpResponseNotAllowed 405
HttpResponseServerError 500

 

 

二、構造響應對象

  • 使用 django.http.HttpResponse來構造響應對象:

response =HttpResponse(content=響應體, content_type=響應體數據MIME類型, status=狀態碼)
  • 響應頭設置:

  能夠直接將 HttpResponse 對象當作字典進行響應頭鍵值對的設置:測試

respone['響應頭key'] = 響應頭值

 

三、JsonResponse 子類

# 傳遞字典類型的數據   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)

 

四、HttpResponseRedirect 子類

 # 重定向到首頁   狀態碼: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) # 重定向
相關文章
相關標籤/搜索