Django 2.1.7 視圖python
Django 2.1.7 MVT模型示例 - 查詢數據,返回渲染模板數據redis
Django 2.1.7 視圖 - 自定義404錯誤、500錯誤django
在前面的篇章基本講述了視圖的使用,那麼本篇章主要是來看看Django中的HttpReqeust對象。瀏覽器
服務器接收到http協議的請求後,會根據報文建立HttpRequest對象,這個對象不須要咱們建立,直接使用服務器構造好的對象就能夠。視圖的第一個參數必須是HttpRequest對象,在django.http模塊中定義了HttpRequest對象的API。bash
下面除非特別說明,屬性都是隻讀的。服務器
path:一個字符串,表示請求的頁面的完整路徑,不包含域名和參數部分。cookie
method:一個字符串,表示請求使用的HTTP方法,經常使用值包括:'GET'、'POST'。session
encoding:一個字符串,表示提交的數據的編碼方式。工具
GET:QueryDict類型對象,相似於字典,包含get請求方式的全部參數。post
POST:QueryDict類型對象,相似於字典,包含post請求方式的全部參數。
FILES:一個相似於字典的對象,包含全部的上傳文件。
COOKIES:一個標準的Python字典,包含全部的cookie,鍵和值都爲字符串。
session:一個既可讀又可寫的相似於字典的對象,表示當前的會話,只有當Django 啓用會話的支持時纔可用。
運行服務器,在瀏覽器中瀏覽首頁,能夠在瀏覽器「開發者工具」中看到請求信息以下圖:
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))
複製代碼
dict.getlist('鍵',默認值)
複製代碼
請求格式:在請求地址結尾使用?,以後以"鍵=值"的格式拼接,多個鍵值對之間以&鏈接。
例:請求url以下 http://127.0.0.1:8000/assetinfo/getServerAllMiddlewareinfo?serverName=測試服務器&middlewareinfoName=redis
其中的請求參數爲: serverName=測試服務器&middlewareinfoName=redis
使用form表單請求時,method方式爲post則會發起post方式的請求,須要使用HttpRequest對象的POST屬性接收參數,POST屬性是一個QueryDict類型的對象。
問:表單form如何提交參數呢? 答:表單控件name屬性的值做爲鍵,value屬性的值爲值,構成鍵值對提交。
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')
複製代碼