django中HttpRequest請求


視圖的第一個參數必須是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})

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM