本文研究的主要是Django的HttpRequest和HttpResponse對象的相關內容,具體如下。
請求一張頁面時,Django把請求的metadata數據包裝成一個HttpRequest對象,然后Django加載合適的view方法,把這個HttpRequest 對象作為第一個參數傳給view方法。任何view方法都應該返回一個HttpResponse對象。
我們在本書中大量使用這兩個對象;本附錄詳細解釋HttpRequest和HttpResponse對象。
HttpRequest代表一個來自uesr-agent的HTTP請求。
大多重要的請求信息都是作為HttpRequest 對象的屬性出現(see Table H-1). 除了session外,其他所有屬性都是只讀的。
Table H-1. HttpRequest對象的屬性
| Attribute | Description |
| path | 請求頁面的全路徑,不包括域名—例如, "/music/bands/the_beatles/"。 |
| method | 請求中使用的HTTP方法的字符串表示。全大寫表示。例如: if request.method == 'GET': |
| GET | 包含所有HTTP GET參數的類字典對象。參見QueryDict 文檔。 |
| POST | 包含所有HTTP POST參數的類字典對象。參見QueryDict 文檔。 服務器收到空的POST請求的情況也是有可能發生的。也就是說,表單form通過HTTP POST方法提交請求,但是表單中可以沒有數據。因此,不能使用語句if request.POST來判斷是否使用HTTP POST方法;應該使用if request.method == "POST" (參見本表的method屬性)。 注意: POST不包括file-upload信息。參見FILES屬性。 |
| REQUEST | 為了方便,該屬性是POST和GET屬性的集合體,但是有特殊性,先查找POST屬性,然后再查找GET屬性。借鑒PHP's $_REQUEST。 例如,如果GET = {"name": "john"} 和POST = {"age": '34'},則 REQUEST["name"] 的值是"john", REQUEST["age"]的值是"34". 強烈建議使用GET and POST,因為這兩個屬性更加顯式化,寫出的代碼也更易理解。 |
| COOKIES | 包含所有cookies的標準Python字典對象。Keys和values都是字符串。參見第12章,有關于cookies更詳細的講解。 |
| FILES | 包含所有上傳文件的類字典對象。FILES中的每個Key都是<input type="file" name="" />標簽中name屬性的值. FILES中的每個value 同時也是一個標準Python字典對象,包含下面三個Keys: filename: 上傳文件名,用Python字符串表示 content-type: 上傳文件的Content type content: 上傳文件的原始內容注意:只有在請求方法是POST,并且請求頁面中<form>有enctype="multipart/form-data"屬性時FILES才擁有數據。否則,FILES 是一個空字典。 |
| META | 包含所有可用HTTP頭部信息的字典。 例如: CONTENT_LENGTH CONTENT_TYPE QUERY_STRING: 未解析的原始查詢字符串 REMOTE_ADDR: 客戶端IP地址 REMOTE_HOST: 客戶端主機名 SERVER_NAME: 服務器主機名 SERVER_PORT: 服務器端口META 中這些頭加上前綴HTTP_最為Key, 例如: HTTP_ACCEPT_ENCODING HTTP_ACCEPT_LANGUAGE HTTP_HOST: 客戶發送的HTTP主機頭信息 HTTP_REFERER: referring頁 HTTP_USER_AGENT: 客戶端的user-agent字符串 HTTP_X_BENDER: X-Bender頭信息 |
| user | 是一個django.contrib.auth.models.User 對象,代表當前登錄的用戶。如果訪問用戶當前沒有登錄,user將被初始化為django.contrib.auth.models.AnonymousUser的實例。你可以通過user的is_authenticated()方法來辨別用戶是否登錄: if request.user.is_authenticated(): 只有激活Django中的AuthenticationMiddleware時該屬性才可用 關于認證和用戶的更詳細講解,參見第12章。 |
| session | 唯一可讀寫的屬性,代表當前會話的字典對象。只有激活Django中的session支持時該屬性才可用。 參見第12章。 |
| raw_post_data | 原始HTTP POST數據,未解析過。 高級處理時會有用處。 |
新聞熱點
疑難解答