1. 程式人生 > >devops——2、httpRequest-httpResponse-JsonResponse物件

devops——2、httpRequest-httpResponse-JsonResponse物件

一、HttpRequest物件

HttpRequest在django.http這個模組中
它是用django建立的
https://docs.djangoproject.com/en/1.11/ref/request-response/#httprequest-objects
1.1 HttpRequest物件的屬性
常用屬性:
HttpRequest.scheme 請求方案(http或https 通常)
HttpRequest.body 原始HTTP請求主體(訪問請求中釋出的原始或非表單資料)
HttpRequest.path 所請求頁面的完整路徑
HttpRequest.method 請求中使用的HTTP方法(POST或GET等)
HttpRequest.encoding 用於解碼錶單提交資料的當前編碼(或者None,表示使用該DEFAULT_CHARSET設定)
HttpRequest.GET 所有給定的HTTP GET引數
HttpRequest.POST 所有給定的HTTP POST引數,前提是請求包含表單資料
HttpRequest.META 可用HTTP標頭檔案
其他屬性:


HttpRequest.content_type 請求的MIME型別
HttpRequest.path_info 主機名後面的URL部分被分成指令碼字首部分和路徑資訊部分,該屬性始終包含路徑的路徑資訊部分
HttpRequest.content_params CONTENT_TYPE 標題中包含的鍵/值引數字典
HttpRequest.COOKIES 所有cookie的字典。鍵和值是字串。
HttpRequest.FILES 所有上傳檔案的類字典物件
HttpRequest.resolver_match
屬性詳細說明:
除非另有說明,否則所有屬性均應視為只讀。
HttpRequest.scheme

表示請求方案(http或https 通常)的字串。
HttpRequest.body
原始HTTP請求主體作為位元組字串。這對於以不同於傳統HTML表單的方式處理資料非常有用:二進位制映像,XML有效負載等。對於處理傳統表單資料,請使用 HttpRequest.POST。
您還可以HttpRequest使用類似檔案的介面進行讀取。見 HttpRequest.read()。
HttpRequest.path
表示所請求頁面的完整路徑的字串,不包括方案或域。
例: “/music/bands/the_beatles/”
HttpRequest.path_info
在某些Web伺服器配置下,主機名後面的URL部分被分成指令碼字首部分和路徑資訊部分。path_info無論使用何種Web伺服器,該屬性始終包含路徑的路徑資訊部分。使用它path可以使程式碼更容易在測試伺服器和部署伺服器之間移動。
例如,如果WSGIScriptAlias你的應用程式設定為 “/minfo”,則path可能是"/minfo/music/bands/the_beatles/" 和path_info會"/music/bands/the_beatles/"。
HttpRequest.method

表示請求中使用的HTTP方法的字串。這保證是大寫的。例如:

if request.method == 'GET':
    do_something()
elif request.method == 'POST':
    do_something_else()

HttpRequest.encoding
表示用於解碼錶單提交資料的當前編碼的字串(或者None,表示使用該DEFAULT_CHARSET設定)。您可以寫入此屬性以更改訪問表單資料時使用的編碼。任何後續屬性訪問(例如從GET或讀取POST)都將使用新encoding值。如果您知道表單資料不在DEFAULT_CHARSET 編碼中,則很有用。
HttpRequest.content_type
Django 1.10中的新功能。
表示請求的MIME型別的字串,從CONTENT_TYPE標頭解析 。
HttpRequest.content_params
Django 1.10中的新功能。
CONTENT_TYPE 標題中包含的鍵/值引數字典。
HttpRequest.GET
類似於字典的物件,包含所有給定的HTTP GET引數。請參閱以下 QueryDict文件。
HttpRequest.POST
類似字典的物件,包含所有給定的HTTP POST引數,前提是請求包含表單資料。請參閱以下 QueryDict文件。如果您需要訪問請求中釋出的原始或非表單資料,請通過該HttpRequest.body屬性訪問它 。
請求可以通過POST使用空POST 字典進入- 例如,如果通過POST HTTP方法請求表單但不包含表單資料。因此,您不應該使用 檢查POST方法的使用; 相反,使用(見)。if request.POSTif request.method =="POST"HttpRequest.method
POST它不包含檔案上傳資訊。見FILES。
HttpRequest.COOKIES
包含所有cookie的字典。鍵和值是字串。
HttpRequest.FILES
包含所有上傳檔案的類字典物件。每個鍵 FILES都name來自。每個值都是。<input type="file" name=""/>FILESUploadedFile
FILES如果請求方法是POST並且釋出到請求的方法有,則只包含資料 enctype="multipart/form-data"。否則,FILES將是一個空白的字典物件。
HttpRequest.META
包含所有可用HTTP標頭的字典。可用的標頭檔案取決於客戶端和伺服器,但以下是一些示例:

CONTENT_LENGTH - 請求正文的長度(作為字串)。
CONTENT_TYPE - 請求正文的MIME型別。
HTTP_ACCEPT - 響應的可接受內容型別。
HTTP_ACCEPT_ENCODING - 可接受的響應編碼。
HTTP_ACCEPT_LANGUAGE - 響應的可接受語言。
HTTP_HOST - 客戶端傳送的HTTP主機頭。
HTTP_REFERER - 引用頁面,如果有的話。
HTTP_USER_AGENT - 客戶端的使用者代理字串。
QUERY_STRING - 查詢字串,作為單個(未解析的)字串。
REMOTE_ADDR - 客戶端的IP地址。
REMOTE_HOST - 客戶端的主機名。
REMOTE_USER - Web伺服器驗證的使用者(如果有)。
REQUEST_METHOD- 一個字串,如"GET"或"POST"。
SERVER_NAME - 伺服器的主機名。
SERVER_PORT - 伺服器的埠(作為字串)。

除了CONTENT_LENGTH和之外CONTENT_TYPE,如上所述,請求中的任何HTTP頭都將轉換為META鍵,方法是將所有字元轉換為大寫,用下劃線替換任何連字元並HTTP_在名稱中新增字首。因此,例如,呼叫的標頭X-Bender將對映到META金鑰 HTTP_X_BENDER。
請注意,runserver在名稱中刪除帶有下劃線的所有標題,因此您將看不到它們META。這可以防止基於下劃線和短劃線之間的歧義的頭部欺騙,這兩者都在WSGI環境變數中對下劃線進行規範化。它匹配Nginx和Apache 2.4+等Web伺服器的行為。
HttpRequest.resolver_match
ResolverMatch表示已解析URL 的例項。此屬性僅在URL解析發生後設置,這意味著它在所有檢視中都可用,但在URL解析發生之前執行的中介軟體中不可用(process_view()儘管可以使用它 )。

1.2 HttpRequest物件的方法
HttpRequest.get_host() 按順序返回請求的原始主機
HttpRequest.get_port() 返回請求的原始埠
HttpRequest.get_full_path() path如果適用,返回加上附加的查詢字串
HttpRequest.is_secure()
HttpRequest.is_ajax()

二、HttpResponse物件

HttpResponse在django.http這個模組中
傳遞一個字串作為頁面的內容到HttpResponse建構函式

   >>> from django.http import HttpResponse
    >>> response = HttpResponse("Here's the text of the Web page.")
    >>> response = HttpResponse("Text only, please.", content_type="text/plain")

https://docs.djangoproject.com/en/1.11/ref/request-response/#httpresponse-objects

三、JsonResponse

from django.http import JsonResponse
def index(request):
    # dataD = ["a","b","c"]
    data = {"a":"b","c":"d"}
    # return JsonResponse(dataD,safe=False) #集合,使用safe=False
    return JsonResponse(data) #字典,預設safe=True