Django學習--view.py詳解


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;">






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM