1.http請求中產生的兩個核心對象:
http請求:HttpRequest
http響應: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子類(部分):
| Class | Description |
| HttpResopnseRedirect | 構造函數接受單個參數,重定向到URL,可以是全URL,或者相對URL。注意:這里將返回HTTP狀態碼302 |
| HttpResponsePermanentRedirect | 同HttpResponseRedirect一樣,但是返回永久重定向,HTTP狀態嗎301 |
| HttpResponseNotFound | 返回404status code |
| JsonResponse | 返回Json字符串 |
4.locals()方法:
在render方法中以字典的形式傳遞參數時,如果所要傳遞的字典值太多,自己構造的話就會太復雜且代碼可讀性也不太好。這時就可使用locals()方法,其會將函數中的所有變量傳遞給模板。
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">
