1. 程式人生 > >Django 中HttpResponse物件

Django 中HttpResponse物件

Django伺服器接收到客戶端傳送過來的請求後,會將提交上來的這些資料封裝成一個HttpRequest物件傳給檢視函式。那麼檢視函式在處理完相關的邏輯後,也需要返回一個響應給瀏覽器。而這個響應,我們必須返回HttpResponseBase或者他的子類的物件。而HttpResponse則是HttpResponseBase用得最多的子類。那麼接下來就來介紹一下HttpResponse及其子類。

常用屬性:

  1. content:返回的內容。
    response = HttpResponse()
    response.content = '知了課堂'
    return
response
  1. status_code:返回的HTTP響應狀態碼。
    預設是200,也可以自行設定
response.status_code = 400

常見狀態碼錶達意思:

1xx開頭:指示資訊–表示請求已接收,繼續處理

100:客戶端的請求已被伺服器端正確接收。客戶端可以採取繼續傳送或者或略此響應。
101:伺服器理解了客戶的請求,並且通過Upgrade訊息頭通知客戶端採用不同協議完成這個請求。

2xx開頭:請求被伺服器端正確處理。

200      交易成功
201      提示知道新檔案的URL
202      接受和處理、但處理未完成
203      返回資訊不確定或不完整
204
請求收到,但返回資訊為空 205 伺服器完成了請求,使用者代理必須復位當前已經瀏覽過的檔案 206 伺服器已經完成了部分使用者的GET請求

3xx開頭:重定向。

300      請求的資源可在多處得到
301      永久重定向,在Location響應首部的值仍為當前URL(隱式重定向)
302      臨時重定向,在Location響應首部的值仍為新的URL(顯示重定向)
303      建議客戶端訪問其他URL或訪問方式
304      Not Modified 請求的資源沒有改變 可以繼續使用快取
305      請求的資源必須從伺服器指定的地址得到
306
前一版本HTTP中使用的程式碼,現行版本中不再使用 307 宣告請求的資源臨時性刪除

4xx開頭:客戶端錯誤:

400      錯誤請求,如語法錯誤
401      未授權
   HTTP 401.1    未授權,登入失敗
   HTTP 401.2    未授權,伺服器配置問題導致登入失敗
   HTTP 401.3    ACL  禁止訪問資源
   HTTP 401.4    未授權  授權被篩選器拒絕
   HTTP 401.5    未授權  ISAPI或CGI授權失敗
402      保留有效ChargeTo頭響應
403      禁止訪問
   HTTP 403.1    禁止訪問  禁止可執行訪問
   HTTP 403.2    禁止訪問  禁止讀訪問
   HTTP 403.3    禁止訪問  禁止寫訪問
   HTTP 403.4    禁止訪問  要求SSL
   HTTP 403.5    禁止訪問  要求SSL 128
   HTTP 403.6    禁止訪問  IP地址被拒絕
   HTTP 403.7    禁止訪問  要求客戶端證書
   HTTP 403.8    禁止訪問  禁止站點訪問
   HTTP 403.9    禁止訪問  連線的使用者過多
   HTTP 403.10   禁止訪問  配置無效
   HTTP 403.11   禁止訪問  密碼更改
   HTTP 403.12   禁止訪問  對映器拒絕訪問
   HTTP 403.13   禁止訪問  客戶端證書已被吊銷
   HTTP 403.15   禁止訪問  客戶端訪問許可過多
   HTTP 403.16   禁止訪問  客戶端證書不可信或者無效
   HTTP 403.17   禁止訪問  客戶端證書已經到期或者尚未生效
404       沒有發現檔案、查詢或URL
405       使用者在Request-Line欄位定義的方法不允許
406       根據使用者傳送的Accept拖,請求資源不可訪問
407       類似401,使用者必須首先在代理伺服器上得到授權
408       客戶端沒有在使用者指定的餓時間內完成請求
409       對當前資源狀態,請求不能完成
410       伺服器上不再有此資源且無進一步的參考地址
411       伺服器拒絕使用者定義的Content-Length屬性請求   
412       一個或多個請求頭欄位在當前請求中錯誤
413       請求的資源大於伺服器允許的大小
414       請求的資源URL長於伺服器允許的長度
415       請求資源不支援請求專案格式
416       請求中包含Range請求頭欄位,在當前請求資源範圍內沒有range指示值,       請求也不包含If-Range請求頭欄位
417       伺服器不滿足請求Expect頭欄位指定的期望值,如果是代理伺服器,可能是下一級伺服器不能滿足請求長
伺服器端錯誤: 

5xx開頭:伺服器端的錯誤

500 - 內部伺服器錯誤
    HTTP 500.100 - 內部伺服器錯誤 
    HTTP 500-11 伺服器關閉
    HTTP 500-12 應用程式重新啟動
    HTTP 500-13 - 伺服器太忙
    HTTP 500-14 - 應用程式無效
    HTTP 500-15 - 不允許請求 
 501 - 未實現
 502 - 閘道器錯誤
 503 - 服務不可用
 504 - 閘道器超時
  1. content_type:
    返回的資料的MIME型別,預設為text/html。瀏覽器會根據這個屬性,來顯示資料。如果是text/html,那麼就會解析這個字串,如果text/plain,那麼就會顯示一個純文字。常用的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檔案)
    示例:
    response = HttpResponse('<h1>知了課堂</h1>')
    return response
    response = HttpResponse('<h1>知了課堂</h1>',content_type='text/plain;charset=utf-8')
    return response

注意: 一般在使用‘text/plain’時,都會新增‘charset=utf-8’,否則是會亂碼的。

常用方法:

  1. set_cookie:用來設定cookie資訊
  2. delete_cookie:用來刪除cookie資訊。
  3. write:HttpResponse是一個類似於檔案的物件,可以用來寫入資料到資料體(content)中。
    示例:
    response = HttpResponse('<h1>知了課堂</h1>',content_type='text/plain;charset=utf-8')
    response.write('zhiliao')
    return response

JsonResponse類:

編寫一些介面函式的時候,經常需要給呼叫者返回json格式的資料,那麼如何返回可直接解析的json格式的資料呢?

使用HttpResponsemoni返回一個json。

from django.http import HttpResponse
import json
def jsonresponse_view(request):
    persion = {
        'username':'ziliao',
        'age':18,
        'height':180
    }
    persion_str = json.dumps(persion)
    response = HttpResponse(persion_str,content_type='application/json')
    return response

使用JsonResponse返回一個json。

from django.http import HttpResponse,JsonResponse
def jsonresponse_view(request):
    persion = {
        'username':'ziliao',
        'age':18,
        'height':180
    }
    # persion_str = json.dumps(persion)
    # response = HttpResponse(persion_str,content_type='application/json')
    response = JsonResponse(persion)
    return response

預設情況下JsonResponse只能對字典進行dump,如果想要對非字典的資料進行dump,那麼需要給JsonResponse傳遞一個safe=False引數。示例程式碼如下:

def jsonresponse_view(request):
    persions = [
        {
            'username': 'ziliao',
            'age': 18,
            'height': 180
        },
        {
            'username': 'ziliao1',
            'age': 20,
            'height': 180
        }
    ]
    # persion_str = json.dumps(persion)
    # response = HttpResponse(persion_str,content_type='application/json')
    response = JsonResponse(persions,safe=False)
    return response