Django 第七堂課:請求Request

1 URL路徑參數

在定義路由URL時,使用正則表達式提取參數的方法從URL中獲取請求參數,Django會將提取的參數直接傳遞到視圖的傳入參數中。

未命名參數按順序傳遞, 如

url(r'^index/([a-z]+)/(\d{4})/$', views.index),

def index(request, parameter1, parameter2):
    print(parameter1)
    print(parameter2)
    return HttpResponse('OK')

有命名參數按名傳遞,如

url(r'^index/(?P<parameter1>[a-z]+)/(?P<parameter2>\d{4})/$', views.index),

def index(request, parameter1, parameter2):
    print(parameter1)
    print(parameter2)
    return HttpResponse('OK')

2、 查詢字符串Query String

獲取請求路徑中的查詢字符串參數,可以通過request.GET屬性獲取,返回QueryDict對象。

# /q/?a=2&b=3&a=4

def q(request):
    a = request.GET.get('a')
    b = request.GET.get('b')
    alist = request.GET.getlist('a')
    print(a)  # 4
    print(b)  # 3
    print(alist)  # ['2', '4']
    return HttpResponse('OK')

2、 QueryDict對象

HttpRequest對象的屬性GET、POST都是QueryDict類型的對象

方法get():根據鍵獲取值

如果一個鍵同時擁有多個值將獲取最後一個值

如果鍵不存在則返回None值,可以設置默認值進行後續處理

dict.get('鍵',默認值)
可簡寫爲
dict['鍵']

方法getlist():根據鍵獲取值,值以列表返回,可以獲取指定鍵的所有值

如果鍵不存在則返回空列表[],可以設置默認值進行後續處理

dict.getlist('鍵',默認值)

3、 請求體

請求體數據格式不固定,可以是表單類型字符串,可以是JSON字符串,可以是XML字符串,應區別對待。

可以有POST、PUT、PATCH、DELETE。

Django默認開啓了CSRF防護,會對上述請求方式進行CSRF防護驗證,在測試時可以關閉CSRF防護機制,方法爲在settings.py文件中註釋掉CSRF中間件,如:

在這裏插入圖片描述
4、 表單類型 Form Data

前端發送的表單類型的請求體數據,可以通過request.POST屬性獲取,返回QueryDict對象

def body(request):
    a = request.POST.get('a')
    b = request.POST.get('b')
    alist = request.POST.getlist('a')
    print(a)
    print(b)
    print(alist)
    return HttpResponse('OK')

5、非表單類型 Non-Form Data

非表單類型的請求體數據,Django無法自動解析,可以通過request.body屬性獲取最原始的請求體數據。

import json

def body_json(request):
    json_str = request.body
    json_str = json_str.decode()  # python3.6 無需這步
    data = json.loads(json_str)
    print(data['a'])
    print(data['b'])
    return HttpResponse('OK')


6、請求頭

可以通過request.META屬性獲取請求頭headers中的數據

在這裏插入圖片描述

def headers(request):
    print(request.META['SERVER_PORT'])
    return HttpResponse('OK')
發佈了26 篇原創文章 · 獲贊 35 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章