1. 程式人生 > >Django--view.py詳解

Django--view.py詳解

用例 div 而不是 pro cal -- ren sta theme

1.http請求中產生的兩個核心對象:http請求:HttpRequesthttp響應:HttpResponse存在於Django.http 模塊中
2.HttpRequest:屬性:
HttpRequest.scheme  #一個字符串,表示請求的方案(通常是http或者https)
HttpRequest.body    #一個字節字符串,表示原始HTTP請求的正文
HttpRequest.path    #一個字符串,表示請求的頁面的完整路徑,不包含域名
HttpRequest.method   #一個字符串,表示請求使用的HTTP方法,必須使用大寫
HttpRequest.GET      #一個類似於字典的對象,包含HTTP GET的所有參數
HttpRequest.POST     #一個包含所有給定的HTTP POST參數的類字典對象,提供了包含表單數據的請求
HttpRequest.REQUEST  #一個將GET,POST屬性結合起來的屬性,但有特殊性,先查找POST屬性,後查找GET屬性,此屬性在Django1.9就已經被移除,做了解
HttpRequest.COOKIES    #一個標準的python字典,包含所有cookie,鍵和值都為字符串
HttpRequest.FILES     #一個類似於字典的對象,包含所有的上傳文件
HttpRequest.META      #一個標準的python字典,包含所有的HTTP頭部
HttpRequest.user     #一個django.contrib.auth.models.User對象,代表當前登錄的用戶,如果訪問的用戶沒有登錄,則user將被初始化為django.contrib.auth.models.AnonymousUser的實例,可以通過user的in_authenticated()方法來辨別用戶是否登錄。
11 1
HttpRequest.scheme  #一個字符串,表示請求的方案(通常是http或者https)
2
HttpRequest.body    #一個字節字符串,表示原始HTTP請求的正文
3
HttpRequest.path    #一個字符串,表示請求的頁面的完整路徑,不包含域名
4
HttpRequest.method   #一個字符串,表示請求使用的HTTP方法,必須使用大寫
5
HttpRequest.GET      #一個類似於字典的對象,包含HTTP GET的所有參數
6
HttpRequest.POST     #一個包含所有給定的HTTP POST參數的類字典對象,提供了包含表單數據的請求
7
HttpRequest.REQUEST  #一個將GET,POST屬性結合起來的屬性,但有特殊性,先查找POST屬性,後查找GET屬性,此屬性在Django1.9就已經被移除,做了解
8
HttpRequest.COOKIES    #一個標準的python字典,包含所有cookie,鍵和值都為字符串
9
HttpRequest.FILES     #一個類似於字典的對象,包含所有的上傳文件
10
HttpRequest.META      #一個標準的python字典,包含所有的HTTP頭部
11
HttpRequest.user     #一個django.contrib.auth.models.User對象,代表當前登錄的用戶,如果訪問的用戶沒有登錄,則user將被初始化為django.contrib.auth.models.AnonymousUser的實例,可以通過user的in_authenticated()方法來辨別用戶是否登錄。
方法:
HttpRequest.get_host()#返回請求的原始主機
HttpRequest.get_full_path()#返回path,如果可以將加上查詢字符串例如:"/music/bands/?print=true"
HttpRequest.read(size=None)
HttpRequest.readline()
HttpRequest.readlines()
HttpRequest.xreadlines()
HttpRequest.__iter__()
#這幾個方法實現類文件的接口用於讀取HttpRequest.示例。這使得可以用流的方式讀#取進來的請求,一個常見的用例是使用叠代解析器處理大型XML有效載荷,而不是內存#中構造一個完整的XML樹。
1
HttpRequest.get_host()#返回請求的原始主機
2
HttpRequest.get_full_path()#返回path,如果可以將加上查詢字符串例如:"/music/bands/?print=true"
3
HttpRequest.read(size=None)
4
HttpRequest.readline()
5
HttpRequest.readlines()
6
HttpRequest.xreadlines()
7
HttpRequest.__iter__()
8
#這幾個方法實現類文件的接口用於讀取HttpRequest.示例。這使得可以用流的方式讀#取進來的請求,一個常見的用例是使用叠代解析器處理大型XML有效載荷,而不是內存#中構造一個完整的XML樹。
3.HttpResponse:對於DjangoRequest對象來說,是由Django自動創建,而HttpResponse對象就必須我們自己創建。每個View方法必須返回一個HttpResponse對象。在view.py中使用的是如下返回方式:技術分享圖片既然必須返回HttpResponse對象,那麽為什麽這裏只返回rander對象?我們可以查看rander的具體構造,技術分享圖片可以看到在rander函數中返回的其實也是一個HttpResponse對象,所以可以使用簡便的render方法來代替HttpResponse的返回。
在HttpReponse對象上擴展的常用方法:render,render_to_response,redirect 這三個方法都在django.shortcuts 中(from django.shortcuts import render,render_to_response,redirect)其中render_to_response和render效果一樣但更簡潔。示例:技術分享圖片
HttpResponse子類(部分):
ClassDescription
HttpResopnseRedirect構造函數接受單個參數,重定向到URL,可以是全URL,或者相對URL。註意:這裏將返回HTTP狀態碼302
HttpResponsePermanentRedirect同HttpResponseRedirect一樣,但是返回永久重定向,HTTP狀態嗎301
HttpResponseNotFound返回404status code
JsonResponse返回Json字符串

4.locals()方法:在render方法中以字典的形式傳遞參數時,如果所要傳遞的字典值太多,自己構造的話就會太復雜且代碼可讀性也不太好。這時就可使用locals()方法,其會將函數中的所有變量傳遞給模板。技術分享圖片技術分享圖片





來自為知筆記(Wiz)

Django--view.py詳解