# 第四節:HttpResponse對象
# HttpResponse對象
Django服務器接收到客戶端發送過來的請求后,會將提交上來的這些數據封裝成一個`HttpRequest`對象傳給視圖函數。那么視圖函數在處理完相關的邏輯后,也需要返回一個響應給瀏覽器。而這個響應,我們必須返回`HttpResponseBase`或者他的子類的對象。而`HttpResponse`則是`HttpResponseBase`用得最多的子類。那么接下來就來介紹一下`HttpResponse`及其子類。
## 常用屬性:
1. content:返回的內容。
2. status\_code:返回的HTTP響應狀態碼。
3. content\_type:返回的數據的MIME類型,默認為`text/html`。瀏覽器會根據這個屬性,來顯示數據。如果是`text/html`,那么就會解析這個字符串,如果`text/plain`,那么就會顯示一個純文本。常用的`Content-Type`如下:
- text/html(默認的,html文件)
- text/plain(純文本)
- text/css(css文件)
- text/javascript(js文件)
- multipart/form-data(文件提交)
- application/json(json傳輸)
- application/xml(xml文件)
4. 設置請求頭:`response['X-Access-Token'] = 'xxxx'`。
## 常用方法:
1. set\_cookie:用來設置`cookie`信息。后面講到授權的時候會著重講到。
2. delete\_cookie:用來刪除`cookie`信息。
3. write:`HttpResponse`是一個類似于文件的對象,可以用來寫入數據到數據體(content)中。
## JsonResponse類:
用來對象`dump`成`json`字符串,然后返回將`json`字符串封裝成`Response`對象返回給瀏覽器。并且他的`Content-Type`是`application/json`。示例代碼如下:
```
<pre class="calibre12">```
<span class="hljs-keyword">from</span> django.http <span class="hljs-keyword">import</span> JsonResponse
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">index</span><span class="hljs-params">(request)</span>:</span>
<span class="hljs-keyword">return</span> JsonResponse({<span class="hljs-string">"username"</span>:<span class="hljs-string">"zhiliao"</span>,<span class="hljs-string">"age"</span>:<span class="hljs-params">18</span>})
```
```
默認情況下`JsonResponse`只能對字典進行`dump`,如果想要對非字典的數據進行`dump`,那么需要給`JsonResponse`傳遞一個`safe=False`參數。示例代碼如下:
```
<pre class="calibre12">```
<span class="hljs-keyword">from</span> django.http <span class="hljs-keyword">import</span> JsonResponse
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">index</span><span class="hljs-params">(request)</span>:</span>
persons = [<span class="hljs-string">'張三'</span>,<span class="hljs-string">'李四'</span>,<span class="hljs-string">'王五'</span>]
<span class="hljs-keyword">return</span> HttpResponse(persons)
```
```
以上代碼會報錯,應該在使用`HttpResponse`的時候,傳入一個`safe=False`參數,示例代碼如下:
```
<pre class="calibre12">```
<span class="hljs-keyword">return</span> HttpResponse(persons,safe=<span class="hljs-keyword">False</span>)
```
```
- Introduction
- 第一章:學前準備
- 第一節:虛擬環境
- 第二節:準備工作
- 第三節:Django介紹
- 第四節:URL組成部分
- 第二章:URL與視圖
- 第一節:第一個Django項目
- 第二節:視圖與URL分發器
- 第三章:模板
- 第一節:模板介紹
- 第二節:模板變量
- 第三節:常用標簽
- 第四節:常用過濾器
- 第五節:自定義過濾器
- 第七節:模版結構優化
- 第八節:加載靜態文件
- 第四章:數據庫
- 第一節:MySQL相關軟件
- 第二節:數據庫操作
- 第三節:ORM模型
- 第四節:模型常用字段
- 第五節:外鍵和表關系
- 第六節:增刪改查操作
- 第七節:查詢操作
- 第八節:QuerySet API
- 第九節:ORM模型遷移
- 第十節:ORM作業
- 第十一節:ORM作業參考答案
- 第十二節:Pycharm連接數據庫
- 第五章:視圖高級
- 第一節:限制請求method
- 第二節:頁面重定向
- 第三節:HttpRequest對象
- 第四節:HttpResponse對象
- 第五節:生成CSV文件
- 第六節:類視圖
- 第七節:錯誤處理
- 第六章:表單
- 第一節:表單概述
- 第二節:用表單驗證數據
- 第三節:ModelForm
- 第四節:文件上傳
- 第七章:cookie和session
- 第八章:上下文處理器和中間件
- 第一節:上下文處理器
- 第二節:中間件
- 第九章:安全
- 第一節:CSRF攻擊
- 第二節:XSS攻擊
- 第三節:點擊劫持攻擊
- 第四節:SQL注入
- 第十章:信號
- 第一節:什么是信號
- 第十一章:驗證和授權
- 第一節:概述
- 第二節:用戶對象
- 第三節:權限和分組
- 第十二章:Admin系統
- 第十三章:Django的緩存
- 第十四章:memcached
- 第十五章:Redis