Django 2 1 7 視圖 HttpReqeust對象、QueryDict對象

關於視圖的篇章

Django 2.1.7 視圖python

Django 2.1.7 MVT模型示例 - 查詢數據,返回渲染模板數據redis

Django 2.1.7 視圖 - 自定義404錯誤、500錯誤django

在前面的篇章基本講述了視圖的使用,那麼本篇章主要是來看看Django中的HttpReqeust對象。瀏覽器

HttpReqeust對象

服務器接收到http協議的請求後,會根據報文建立HttpRequest對象,這個對象不須要咱們建立,直接使用服務器構造好的對象就能夠。視圖的第一個參數必須是HttpRequest對象,在django.http模塊中定義了HttpRequest對象的API。bash

屬性

下面除非特別說明,屬性都是隻讀的。服務器

  • path:一個字符串,表示請求的頁面的完整路徑,不包含域名和參數部分。cookie

  • method:一個字符串,表示請求使用的HTTP方法,經常使用值包括:'GET'、'POST'。session

    • 在瀏覽器中給出地址發出請求採用get方式,如超連接。
    • 在瀏覽器中點擊表單的提交按鈕發起請求,若是表單的method設置爲post則爲post請求。
  • encoding:一個字符串,表示提交的數據的編碼方式。工具

    • 若是爲None則表示使用瀏覽器的默認設置,通常爲utf-8。
    • 這個屬性是可寫的,能夠經過修改它來修改訪問表單數據使用的編碼,接下來對屬性的任何訪問將使用新的encoding值。
  • GET:QueryDict類型對象,相似於字典,包含get請求方式的全部參數。post

  • POST:QueryDict類型對象,相似於字典,包含post請求方式的全部參數。

  • FILES:一個相似於字典的對象,包含全部的上傳文件。

  • COOKIES:一個標準的Python字典,包含全部的cookie,鍵和值都爲字符串。

  • session:一個既可讀又可寫的相似於字典的對象,表示當前的會話,只有當Django 啓用會話的支持時纔可用。

  • 運行服務器,在瀏覽器中瀏覽首頁,能夠在瀏覽器「開發者工具」中看到請求信息以下圖:

QueryDict對象

  • 定義在django.http.QueryDict
  • HttpRequest對象的屬性GET、POST都是QueryDict類型的對象
  • 與python字典不一樣,QueryDict類型的對象用來處理同一個鍵帶有多個值的狀況
  • 方法get():根據鍵獲取值
  • 若是一個鍵同時擁有多個值將獲取最後一個值
  • 若是鍵不存在則返回None值,能夠設置默認值進行後續處理
dict.get('鍵',默認值)
可簡寫爲
dict['鍵']
複製代碼

例如:在前面的視圖篇章中經過get、post方法獲取參數,視圖處理以下:

# 查詢某個服務器下的全部中間件信息 /getServerAllMiddlewareinfo?serverName=測試服務器&middlewareinfoName=redis
def getServerAllMiddlewareinfo(request):
    # 直接從GET請求中獲取參數。
    server_name = request.GET.get('serverName', '')
    middlewareinfo_name = request.GET.get('middlewareinfoName', '')
    response = "getServerAllMiddlewareinfo, Server name is %s and Middlewareinfo Name is %s."
    return HttpResponse(response % (server_name, middlewareinfo_name))
複製代碼
  • 方法getlist():根據鍵獲取值,值以列表返回,能夠獲取指定鍵的全部值
  • 若是鍵不存在則返回空列表[],能夠設置默認值進行後續處理
dict.getlist('鍵',默認值)
複製代碼

GET請求

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

例:請求url以下 http://127.0.0.1:8000/assetinfo/getServerAllMiddlewareinfo?serverName=測試服務器&middlewareinfoName=redis 其中的請求參數爲: serverName=測試服務器&middlewareinfoName=redis

POST請求

使用form表單請求時,method方式爲post則會發起post方式的請求,須要使用HttpRequest對象的POST屬性接收參數,POST屬性是一個QueryDict類型的對象。

問:表單form如何提交參數呢? 答:表單控件name屬性的值做爲鍵,value屬性的值爲值,構成鍵值對提交。

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

Django視圖中獲取POST請求的示例代碼以下:

def addmiddlewareinfo(request):
    # 一、接收POST請求過來的參數
    servername = request.POST.get('servername','')
    midname = request.POST.get('midname','')
    midport = request.POST.get('midport','')
    # 二、根據server_name查詢服務器對象
    server = ServerInfo.objects.get(server_hostname=servername)
    # 三、添加中間件信息到服務器
    midware =  MiddlewareInfo()
    midware.name = midname
    midware.port = midport
    midware.server = server
    midware.save()
    # return HttpResponse(servername + '/ ' + str(midname) + '/ ' + str(midport) )
    return redirect('/assetinfo/serverinfo')
複製代碼

相關文章
相關標籤/搜索