1. 程式人生 > >django中HttpRequest請求

django中HttpRequest請求

return get() 保持 req 拼接 情況 ron get請求 字符串類型

視圖的第一個參數必須是HttpRequest對象

在視圖函數中,接收的request有如下屬性:

  • path:一個字符串,表示請求的頁面的完整路徑,不包含域名。
  • method:一個字符串,表示請求使用的HTTP方法,常用值包括:‘GET‘、‘POST‘。
    • 在瀏覽器中給出地址發出請求采用get方式,如超鏈接。
    • 在瀏覽器中點擊表單的提交按鈕發起請求,如果表單的method設置為post則為post請求。
  • encoding:一個字符串,表示提交的數據的編碼方式。
    • 如果為None則表示使用瀏覽器的默認設置,一般為utf-8。
    • 這個屬性是可寫的,可以通過修改它來修改訪問表單數據使用的編碼,接下來對屬性的任何訪問將使用新的encoding值。
  • GET:一個類似於字典的對象,包含get請求方式的所有參數。
  • POST:一個類似於字典的對象,包含post請求方式的所有參數。
  • FILES:一個類似於字典的對象,包含所有的上傳文件。
  • COOKIES:一個標準的Python字典,包含所有的cookie,鍵和值都為字符串。
  • session:一個既可讀又可寫的類似於字典的對象,表示當前的會話,只有當Django 啟用會話的支持時才可用,詳細內容見"狀態保持"。

QueryDict對象

GET和POST請求中,視圖request獲取的QueryDic對象:

  • 定義在django.http.QueryDict
  • HttpRequest對象的屬性GET、POST都是QueryDict類型的對象
  • 與python字典不同,QueryDict類型的對象用來處理同一個鍵帶有多個值的情況
  • 方法get():根據鍵獲取值
  • 如果一個鍵同時擁有多個值將獲取最後一個值
  • 如果鍵不存在則返回None值,可以設置默認值進行後續處理
dict.get(,默認值)
#可簡寫為
dict[]
  • 方法getlist():根據鍵獲取值,值以列表返回,可以獲取指定鍵的所有值
  • 如果鍵不存在則返回空列表[],可以設置默認值進行後續處理
dict.getlist(,默認值)

GET屬性

請求格式:在請求地址結尾使用?,之後以“鍵=值”的格式拼接,多個鍵值對之間以&連接。

例:網址如下

http://www.itcast.cn/?a=10&b=20&c=python

其中的請求參數為:

a=10&b=20&c=python
  • 分析請求參數,鍵為‘a‘、‘b‘、‘c‘,值為‘10‘、‘20‘、‘python‘。
  • 在Django中可以使用HttpRequest對象的GET屬性獲得get方方式請求的參數。
  • GET屬性返回QueryDict類型的對象,鍵和值都是字符串類型。
  • 鍵是開發人員在編寫代碼時確定下來的。
  • 值是根據數據生成的。

POST屬性

使用form表單請求時,method方式為post則會發起post方式的請求,需要使用HttpRequest對象的POST屬性接收參數,POST屬性返回QueryDict類型的對象。

問:表單form如何提交參數呢?

答:控件name屬性的值作為鍵,value屬性的值為值,構成鍵值對提交。

  • 如果控件沒有name屬性則不提交。
  • 對於checkbox控件,name屬性的值相同為一組,被選中的項會被提交,出現一鍵多值的情況。
  • 鍵是控件name屬性的值,是由開發人員編寫的。
  • 值是用戶填寫或選擇的。

接收POST和GET請求獲取數據的方式:

#接收請求參數
def show_reqarg(request):
    if request.method == GET:
        a = request.GET.get(a) #獲取請求參數a
        b = request.GET.get(b) #獲取請求參數b
        c = request.GET.get(c) #獲取請求參數c
        return render(request, booktest/show_getarg.html, {a:a, b:b, c:c})
    else:
        name = request.POST.get(uname) #獲取name
        gender = request.POST.get(gender) #獲取gender
        hobbys = request.POST.getlist(hobby) #獲取hobby
        return render(request, booktest/show_postarg.html, {name:name, gender:gender, hobbys:hobbys})

django中HttpRequest請求