1. 程式人生 > >Request和Response對象

Request和Response對象

情況 可用 script 方式 spa erro upload lex efault

Request對象

Resquest.method請求的八種方式:

 http_method_names = [get, post, put, patch, delete, head, options, trace]

request.path_info:返回用戶訪問的URL,不包括域名

request.body:請求體,byte類型,request.POST的數據就是從body裏面提到的

詳細的屬性:

技術分享圖片
0.HttpRequest.scheme
   表示請求方案的字符串(通常為http或https)
2.HttpRequest.path

  一個字符串,表示請求的路徑組件(不含域名)。

  例如:
"/music/bands/the_beatles/" 3.HttpRequest.encoding   一個字符串,表示提交的數據的編碼方式(如果為 None 則表示使用 DEFAULT_CHARSET 的設置,默認為 utf-8 4.HttpRequest.COOKIES   一個標準的Python 字典,包含所有的cookie。鍵和值都為字符串。 5.HttpRequest.FILES   一個類似於字典的對象,包含所有的上傳文件信息。 FILES 中的每個鍵為<input type="file" name="" /> 中的name,值則為對應的數據。   註意,FILES 只有在請求的方法為POST 且提交的
<form> 帶有enctype="multipart/form-data" 的情況下才會包含數據。否則,FILES 將為一個空的類似於字典的對象。 6.HttpRequest.META   一個標準的Python 字典,包含所有的HTTP 首部。具體的頭部信息取決於客戶端和服務器,下面是一些示例: CONTENT_LENGTH —— 請求的正文的長度(是一個字符串)。 CONTENT_TYPE —— 請求的正文的MIME 類型。 HTTP_ACCEPT —— 響應可接收的Content-Type。 HTTP_ACCEPT_ENCODING —— 響應可接收的編碼。 HTTP_ACCEPT_LANGUAGE —— 響應可接收的語言。 HTTP_HOST —— 客服端發送的HTTP Host 頭部。 HTTP_REFERER —— Referring 頁面。 HTTP_USER_AGENT —— 客戶端的user
-agent 字符串。 QUERY_STRING —— 單個字符串形式的查詢字符串(未解析過的形式)。 REMOTE_ADDR —— 客戶端的IP 地址。 REMOTE_HOST —— 客戶端的主機名。 REMOTE_USER —— 服務器認證後的用戶。 REQUEST_METHOD —— 一個字符串,例如"GET""POST"。 SERVER_NAME —— 服務器的主機名。 SERVER_PORT —— 服務器的端口(是一個字符串)。   從上面可以看到,除 CONTENT_LENGTH 和 CONTENT_TYPE 之外,請求中的任何 HTTP 首部轉換為 META 的鍵時, 都會將所有字母大寫並將連接符替換為下劃線最後加上 HTTP_ 前綴。 所以,一個叫做 X-Bender 的頭部將轉換成 META 中的 HTTP_X_BENDER 鍵。 6.HttpRequest.user   一個 AUTH_USER_MODEL 類型的對象,表示當前登錄的用戶。   如果用戶當前沒有登錄,user 將設置為 django.contrib.auth.models.AnonymousUser 的一個實例。你可以通過 is_authenticated() 區分它們。 例如: if request.user.is_authenticated(): # Do something for logged-in users. else: # Do something for anonymous users.   user 只有當Django 啟用 AuthenticationMiddleware 中間件時才可用。 7.HttpRequest.session   一個既可讀又可寫的類似於字典的對象,表示當前的會話。只有當Django 啟用會話的支持時才可用。 完整的細節參見會話的文檔。
屬性

上傳文件實例

技術分享圖片
def upload(request):
    """
    保存上傳文件前,數據需要存放在某個位置。默認當上傳文件小於2.5M時,django會將上傳文件的全部內容讀進內存。從內存讀取一次,寫磁盤一次。
    但當上傳文件很大時,django會把上傳文件寫到臨時文件中,然後存放到系統臨時文件夾中。
    :param request: 
    :return: 
    """
    if request.method == "POST":
        # 從請求的FILES中獲取上傳文件的文件名,file為頁面上type=files類型input的name屬性值
        filename = request.FILES["file"].name
        # 在項目目錄下新建一個文件
        with open(filename, "wb") as f:
            # 從上傳的文件對象中一點一點讀
            for chunk in request.FILES["file"].chunks():
                # 寫入本地文件
                f.write(chunk)
        return HttpResponse("上傳OK")
上傳文件

方法

技術分享圖片
1.HttpRequest.get_host()

  根據從HTTP_X_FORWARDED_HOST(如果打開 USE_X_FORWARDED_HOST,默認為False)和 HTTP_HOST 頭部信息返回請求的原始主機。
   如果這兩個頭部沒有提供相應的值,則使用SERVER_NAME 和SERVER_PORT,在PEP 3333 中有詳細描述。

  USE_X_FORWARDED_HOST:一個布爾值,用於指定是否優先使用 X-Forwarded-Host 首部,僅在代理設置了該首部的情況下,才可以被使用。

  例如:"127.0.0.1:8000"

  註意:當主機位於多個代理後面時,get_host() 方法將會失敗。除非使用中間件重寫代理的首部。

 

2.HttpRequest.get_full_path()

  返回 path,如果可以將加上查詢字符串。

  例如:"/music/bands/the_beatles/?print=true"

 

3.HttpRequest.get_signed_cookie(key, default=RAISE_ERROR, salt=‘‘, max_age=None)

  返回簽名過的Cookie 對應的值,如果簽名不再合法則返回django.core.signing.BadSignature。

  如果提供 default 參數,將不會引發異常並返回 default 的值。

  可選參數salt 可以用來對安全密鑰強力攻擊提供額外的保護。max_age 參數用於檢查Cookie 對應的時間戳以確保Cookie 的時間不會超過max_age 秒。

        復制代碼
        >>> request.get_signed_cookie(name)
        Tony
        >>> request.get_signed_cookie(name, salt=name-salt)
        Tony # 假設在設置cookie的時候使用的是相同的salt
        >>> request.get_signed_cookie(non-existing-cookie)
        ...
        KeyError: non-existing-cookie    # 沒有相應的鍵時觸發異常
        >>> request.get_signed_cookie(non-existing-cookie, False)
        False
        >>> request.get_signed_cookie(cookie-that-was-tampered-with)
        ...
        BadSignature: ...    
        >>> request.get_signed_cookie(name, max_age=60)
        ...
        SignatureExpired: Signature age 1677.3839159 > 60 seconds
        >>> request.get_signed_cookie(name, False, max_age=60)
        False
        復制代碼
         


4.HttpRequest.is_secure()

  如果請求時是安全的,則返回True;即請求通是過 HTTPS 發起的。

 

5.HttpRequest.is_ajax()

  如果請求是通過XMLHttpRequest 發起的,則返回True,方法是檢查 HTTP_X_REQUESTED_WITH 相應的首部是否是字符串XMLHttpRequest。

  大部分現代的 JavaScript 庫都會發送這個頭部。如果你編寫自己的 XMLHttpRequest 調用(在瀏覽器端),你必須手工設置這個值來讓 is_ajax() 可以工作。

  如果一個響應需要根據請求是否是通過AJAX 發起的,並且你正在使用某種形式的緩存例如Django 的 cache middleware, 
   你應該使用 vary_on_headers(HTTP_X_REQUESTED_WITH) 裝飾你的視圖以讓響應能夠正確地緩存。

請求相關方法
方法

Response對象

屬性

技術分享圖片
1 HttpResponse.content:響應內容
2 
3 HttpResponse.charset:響應內容的編碼
4 
5 HttpResponse.status_code:響應的狀態碼
屬性

JsonResponse對象

JsonResponse是HttpResponse的子類,專門用來生成JSON編碼的響應。

技術分享圖片
1 def json_data(request):
2     import  json
3     date = {"name": alex, age: 84}
4     # return  HttpResponse(json.dumps(date))
5     return  JsonResponse(date)
實例

默認只能傳遞字典類型,如果要傳遞非字典類型需要設置一下safe關鍵字參數。

response = JsonResponse([1, 2, 3], safe=False)

Request和Response對象