Django-Views模塊詳解
http請求中產生的兩個核心對象
http請求: HttpRequest http響應: HttpResponse 所在位置 django.http
httpRequest屬性:
HttpRequest.path
請求頁面的全路徑,不包含域名---完整的請求路徑,不包括域 例: "/music/bands/the_beatles/"。
- HttpRequest.method 請求中使用的HTTP方法的字符串表示。全大寫表示。例如 if request.method == ‘GET‘: do_something() elif request.method == ‘POST‘: do_something_else()
HttpRequest.GET
GET請求對象,包含HTTP GET參數的類字典對象,詳細查看 QueryDict文檔
HttpRequest.POST POST請求對象,包含HTTP GET參數的類字典對象,詳細查看 QueryDict文檔, 服務器收到空的post請求的情況也是可能發生的,也就是說,表單from通過http post 方法提交請求,單是表單中可以沒有數據。因此,不能使用禦酒 if request.POST來判斷 是否使用HTTP POST方法,應該使用if request.method == "POST" (參見本表的method 屬性)。 註意: POST不包含file-upload(文件上傳)信息,請看 FILES
HttpRequest.REQUEST django 1.8之後被廢棄了
為了方便,該屬性是POST和GET屬性的集合體,但是有特殊性,先
找到POST屬性,然後在查找GET屬性。借鑒PHP`s$_REQUEST。
例如,如果GET={"name":"john"}和POST={"age":‘34‘},冊 REQUEST[‘name‘]
的值為"jhon",REQUEST["age"]的值是‘34‘.
強烈建議使用GET and POST,因為這兩個屬性更加顯示化,寫出來的代碼更易於
理解
HttpRequest.COOKIES 包含所有cookies的標準 python字典對象,keys 和values都是字符串 參見12章 有關於 cookies更詳細的講解
- HttpRequest.FILES
包含所有上傳文件的類字典對象。FILES中每個KEY都是<input type="file" name=""/>
標簽中的name屬性的值,FILES中每個value同事也是一個標準的python字典對象,包
含下面三個Keys:
1. filename 上傳文件名,用python字符串表示
2. content-type 上傳文件的Content type
3. content 上傳文件的原始內容
註意: 只有在請求方法是POST,並且請求頁面中<from>有enctype="multipart/frm-data"
屬性時FILES才擁有數據。否則FILES是一個空字典
- HttpRequest.META
包含所有可用HTTP頭部信息的字典。例如:
1. CONTENT_LENGTH
2. CONTENT_TYPE
3. QUERY_STRING:未解析的原始查詢字符串
4. REMOTE_ADDR:客戶端主機名
5. SERVER_NAME:服務器主機名
6. SERVER_PORT :服務器端口
META中寫著頭加上前綴HTTP_ KEY 例如:
1. HTTP_ACCEPT_ENCODING
2. HTTP_ACCEPT_LANGUAGE
3. HTTP_POST 客戶發送的HTTP主機頭信息
4. HTTP_REFERER:referring頁面
5. HTTP_USER_AGENT:客戶端的user-agent字符串
6. HTTP_X_BENDER:X-Bender頭部信息
- HttpRequest.user
是from django.contrib.auth.models.User對象,代表當前登錄的用戶,如果訪問用戶當前沒有
登錄,user將被初始化為from django.contrib.auth.models.AnonymousUser的實例。
你可以通過user的is_authenticated()方法來辨別用戶是否登錄
if request.user.is_authenticated():
do something for logged-in users
else:
do something for anonymous users
只有激活django中的 A uthenticationMiddleware時該屬性才可用
- HttpRequest.session
唯一可讀寫的屬性,代表當前回話的字典對象,只有激活django中的
session支持是該屬性才可用
-raw_post_data
原始HTTP POST數據,未解析過。改機處理時會有用。
- HtppRequest對象的方法部分
1. get_full_path()
返回包含查詢字符串的請求路徑。例如,
"/music/bands/the_beatles/?print=true"。
2. QueryDict對象
get() 如果key對應多個value,get()返回最後一個value。
在httprequest對象中,GET和POST屬性時 django.http.QueryDict類的實例。
HttpResponse
對於Httprequest對象來說 django自動創建,但是 httpresponse對象必須 我們自己創建 每個View方法必須返回一個HTTPResponse對象。 HTTPResponse類在django.http.HttpResponse.render方法包裝的也是一個response對象。
構造HtppResponse:
response = HttpResponse("Here‘s the text of the Web page.")
response = HttpResponse("Text only,please.",mimetype="text/plain")
HtppResponse的子類 部分
-
HttpResponseRedirect
構造函數接受單個參數:重定向到URL。可以是全URL(e.g.,‘http://search.yahoo.com/‘) 或者相對URL(e.g.,‘/seach/‘).註意折返回HTTP狀態碼302
-
HttpResponsePermanentRedirect
同HttpResponseRedirect一樣,但它返回永久重定向(HTTP狀態代碼301)而不是“找到”重定 向(狀態代碼302)。
-
HttpResponseNotModified
構造函數不接受任何參數,也不會在此響應中添加任何內容。用於指定自用戶最後一次請求 (狀態代碼304)以來頁面尚未被修改。
-
HttpResponseBadRequest
HttpResponse使用的就是使用400狀態碼。
-
HttpResponseNotFound
返回404狀態碼
-
JsonResponse
返回Json字符串
詳見: https://docs.djangoproject.com/en/1.11/ref/request-response/
- httpresponse對象上擴展的常用方法
render rander_to_response redirect 跳轉的方法 更多詳見: https://docs.djangoproject.com/en/1.11/topics/http/shortcuts/
三. 常用的其他方法
locals() 可以直接將函數中所有變量全部傳遞給模板
Django-Views模塊詳解