1. 程式人生 > >Django中request和response中的屬性方法詳述

Django中request和response中的屬性方法詳述

Django 使用 request 和 response 物件表示系統狀態資料..

當請求一個頁面時,Django建立一個 HttpRequest 物件.該物件包含 request 的元資料. 然後 Django 呼叫相應的 view 函式(HttpRequest 物件自動傳遞給該view函式<作為第一個引數>), 每一個 view 負責返回一個 HttpResponse 物件.

本文件解釋了 HttpRequest 和 HttpResponse 物件的 API.
HttpRequest 物件
屬性

除了 session 以外的其它屬性都應該被看作是隻讀的.

path

    一個字串表示請求頁的路徑全名(不包括域名).


    Example: "/music/bands/the_beatles/"
GET
    可以認為是一個字典物件,包括所有的 HTTP GET 引數,參見下面的 QueryDict 文件. 
POST

    可以認為是一個字典物件,包括所有的 HTTP POST 引數,參見下面的 QueryDict 文件.

    注意: POST 不 包括檔案上載資訊, 參閱 FILES.
REQUEST

    為了使用方便,該物件也可以認為是一個字典物件,它包括所有 POST 和 GET 資料(先POST,後GET). (靈感來自PHP中的 $_REQUEST 全域性變數).

    舉例: 如果 GET={"name":"john"}, POST={"AGE":"34"} 則 REQUEST["name"]="john", REQUEST["age"]="34".


    強烈建議你使用 GET 或 POST 而不是 REQUEST,因為前者更清晰.
COOKIES
    是一個標準的Python字典,包括所有的cookie. 鍵和值都是字串. 
FILES

    可以看作是一個字典物件,它包含所有的上載檔案. FILES中的每個鍵是 中name 的值,每個值是一個標準的Python字典,該字典有以下三個鍵:

            filename -- 上傳檔案的檔名,一個python 字串
            content-type 上傳檔案的 content type
            content 上傳檔案的原始內容

        注意 FILES 只有在請求方式為 POST 並且表單包括 enctype="multipart/form-data" 屬性時才會有資料,否則 FILES 就是一個空的類似字典的物件.


META

    META是一個標準的Python字典,包含所有可能的 HTTP 頭.

        可用的 header 依賴客戶機和伺服器,下面是某些可能的值:

            CONTENT_LENGTH
            CONTENT_TYPE
            HTTP_ACCEPT_ENCODING
            HTTP_ACCEPT_LANGUAGE
            HTTP_REFERER 引用頁,如果有的話
            HTTP_USER_AGENT 客戶機使用者代理字串
            QUERY_STRING 查詢字串,單一的未解析的字串
            REMOTE_ADDR 客戶機IP地址
            REMOTE_HOST 客戶機hostname
            REQUEST_METHOD 請求方式,比如 GET 或 POST
            SERVER_NAME 伺服器 hostname
            SERVER_PORT 伺服器埠

user

    一個 django.contrib.auth.users.User 物件, 表示當前登入使用者.如果當前沒有使用者登入, user 被設定成 django.contrib.auth.models.AnonymousUser 的一個例項.你可以用 is_anonymous() 來區分登入使用者和未登入使用者.就象下面這樣::

        if request.user.is_anonymous():
            # Do something for anonymous users. 
        else:
            # Do something for logged-in users.

    只有你的 Django 激活了 AuthenticationMiddleware 之後 user 物件才可用. 參閱 `Authentication in Web requests`_. .. Authentication in Web requests: http://www.djangoproject.com/documentation/authentication/#authentication-in-web-requests
session
    一個可讀寫的,類似字典的物件,表示當前的 session. 當有你的django 安裝包括session支援並且被啟用,該物件才存在.要了解關於session的更多細節,閱讀session文件: http://www.djangoproject.com/documentation/sessions/
raw_post_data
    原始 HTTP POST 資料. 該屬性僅用於POST資料的高階處理. 更多時候你只需要 POST 物件.

方法

__getitem__(key)

    根據給定的鍵,返回一個 GET/POST 值. 該方法首先檢查 POST,然後是 GET. 若給定的鍵未找到,引發 KeyError 異常

    這使得你能夠使用訪問字典的語法來存取 HttpRequest 例項. 舉例來說: 無論 request.POST 有一個 "foo" 鍵還是 request.GET 有一個 "foo" 鍵,``request["foo"]`` 都會返回相應的值.
has_key()
    返回 True 或 False . 
get_full_path()

    返回一個路徑,包括query字串.

    Example: "/music/bands/the_beatles/?print=true"

QueryDict 物件

在一個 HttpRequest 物件中, GET和POST屬性都是 django.http.QueryDict 的例項. QueryDict 是一個類似字典的類,被設計成可以處理同一個鍵有多個值的情況.這是很必要的,因為有些 HTML 表單元素,特別是``

QueryDict 例項是不可變物件,除非你建立他們的一個拷貝.這意味著你不能直接改變 request.POST 和 request.GET 的值.

QueryDict 實現了所有的標準字典方法,因為它就是 dictionary 的一個子類.下文中對與標準字典不一致的地方做了標註:

        __getitem__(key) -- 返加給定鍵的值. 如果該鍵有多個值, __getitem__ 返回最後一個值.

        __setitem__(key, value) -- 將 key 的值設定為 [value] (一個Python 列表,只有一個元素 value).注意,這個方法象其它字典方法一個擁有副作用,只能被一個可變的 QueryDict 物件呼叫.(一個通過`` copy()``建立的副本).

        __contains__(key) -- 如果給定鍵存在,返回 True. 它允許你這麼幹: if "foo" in request.GET.

        get(key, default) --類似 __getitem__() ,如果該鍵不存在,返回一個預設值.

        has_key(key)

        setdefault(key, default) -- 類似標準字典的 setdefault(),不同之處在於它內部使用的是 __setitem__().

        update(other_dict) -- 類似標準字典的 update(), 唯一的不同是它將 other_dict 的元素追加到(而不是替換到)當前字典中. 示例:

        >>> q = QueryDict('a=1')
        >>> q = q.copy() # to make it mutable
        >>> q.update({'a': '2'})
        >>> q.getlist('a')
        ['1', '2']
        >>> q['a'] # returns the last
        ['2']

        items() -- 類似標準字典的 items() 方法, 類似 __getitem__() 的邏輯,它使用最後一個值. 示例:

        >>> q = QueryDict('a=1&a=2&a=3')
        >>> q.items()
        [('a', '3')]

        values() -- 類似標準字典的 values() 方法,類似 __getitem__() 的邏輯,它使用最後一個值.示例:

        >>> q = QueryDict('a=1&a=2&a=3')
        >>> q.values()
        ['3']

除了這些之外,``QueryDict`` 還擁有下列方法:

        copy() -- 返回當前物件的一個拷貝,它使用標準庫中的 深拷貝 方法. 這個拷貝是可變的,也就是說你可以改變這個拷貝的值.

        getlist(key) -- 以一個Python列表的形式返回指定鍵的值.若該鍵不存在,返回一個空的列表.該列表是以某種方式排序的.

        setlist(key, list_) -- 不同於 __setitem__() ,將給定的鍵的值設定為一個列表.

        appendlist(key, item) -- 將給定鍵對應的值(別忘了,它是一個列表)追加一個 item.

        setlistdefault(key, default_list) -- 就象 setdefault ,不過它接受一個列表作為值而不是一個單一的值.

        lists() -- 就象 items(),不過它包含所有的值(以列表的方式):

        >>> q = QueryDict('a=1&a=2&a=3')
        >>> q.lists()
        [('a', ['1', '2', '3'])]

        urlencode() -- 以一個查詢字串的形式返回一個字串. Example: "a=2&b=3&b=5".

示例

下面是一個例子演示了 Django 如何對待輸入:




    The Beatles
    The Who
    The Zombies




若使用者輸入了 "John Smith" 在 your_name 框並且選擇在多選框中同時選中了 The Beatles 和 The Zombies, 然後點選 Submit, Django的request物件將擁有:

>>> request.GET
{}
>>> request.POST
{'your_name': ['John Smith'], 'bands': ['beatles', 'zombies']}
>>> request.POST['your_name']
'John Smith'
>>> request.POST['bands']
'zombies'
>>> request.POST.getlist('bands')
['beatles', 'zombies']
>>> request.POST.get('your_name', 'Adrian')
'John Smith'
>>> request.POST.get('nonexistent_field', 'Nowhere Man')
'Nowhere Man'

實現備註

GET, POST, COOKIES, FILES, META, REQUEST,``raw_post_data`` 及 user 屬性都是惰性的.也就是說在你要求得到他們的值之前,django並不花費時間計算他們的值.只有你需要時,才實時計算出你要的值給你.簡單來說,就象 xrange 函式.
HttpResponse 物件

對應著 HttpRequest 物件, HttpResponse 物件也是 Django自動生成的. 該物件包含你的響應. 你寫的每一個view都是可響應的並且返回一個 HttpResponse 物件.

HttpResponse 類定義在 django.http 中.
用法
傳遞字串

典型的用法就是將頁面的內容作為字串傳遞給 HpptResponse 建構函式:

>>> response = HttpResponse("Here's the text of the Web page.")
>>> response = HttpResponse("Text only, please.", mimetype="text/plain")

如果你需要隨時增加內容,你可以象使用一個檔案一樣來使用 response 物件:

>>> response = HttpResponse()
>>> response.write("

Here's the text of the Web page.

")
>>> response.write("

Here's another paragraph.

")

你可以使用字典語法新增或刪除headers:

>>> response = HttpResponse()
>>> response['X-DJANGO'] = "It's the best."
>>> del response['X-PHP']
>>> response['X-DJANGO']
"It's the best."

注意:即使該header 不存在, del 也不會引發 KeyError 異常.
傳遞迭代器

最後一點,允許將一個迭代器傳遞給 HttpResponse 物件. 如果打算使用這一技術, 只需要遵守以下規則:

        迭代器必須返回字串
        如果一個 HttpResponse 例項使用一個迭代器進行了初始化, 該例項就不允許再以類似檔案操作的方式來訪問.否則就會引發異常.

方法

__init__(content='', mimetype=DEFAULT_MIME_TYPE)
    根據你提供的頁面內容(一個字串)和MIME型別,初始化一個 HttpResponse 物件.預設的MIME型別是 'text/html'. content 可以是一個迭代物件或者是一個字串. 如果它是一個迭代物件, 它應該返回字串, 並且這些字串連線起來能夠形成 response 的內容.
__setitem__(header, value)
    header 和 value 都是字串,將給定的header設定為給定的 value. 
__delitem__(header)
    刪除給定名字的header 如果header不存在,則靜默.header是大小寫敏感的.. 
__getitem__(header)
    返回給定header的值,大小寫敏感. 
has_header(header)
    檢查給定header是否存在(大小寫敏感),返回 True ``或``False. 
set_cookie(key, value='', max_age=None, expires=None, path='/', domain=None, secure=None)

    設定一個cookie 引數與Python標準庫中的 cookie Morsel 物件一樣

            max_age是一個秒數, None表示只要瀏覽器不關就一直存在.
            expires 是一個這種格式的字串: "Wdy, DD-Mon-YY HH:MM:SS GMT".
            如果你要設定一個跨域名的cookie,使用 domain . 舉例來說: domain=".lawrence.com" 將設定一個cookie 可以被 www.lawrence.com blogs.lawrence.com 和calendars.lawrence.com 等類似的域名讀取. 否則,一個cookie 只能被當前域名讀取.

delete_cookie(key)
    刪除給定key的cookie,若該key不存在,靜默. 
content
    以一個Python字串的形式返回頁面內容,如果需要,將其改造為unicode物件返回.注意它是一個 property ,不是一個方法. 使用 r.content 而不是 r.content().
write(content), flush() and tell()
    這幾個方法將HttpResponse例項改造成為一個類似檔案的物件.

HttpResponse 子類

Django包括一系列 HttpResponse 子類處理不同的HTTP請求.象 HttpResponse 一樣,這些子類都在 django.http 中定義.

HttpResponseRedirect
    該類的建構函式只接受一個引數--要重定向的路徑. 該路徑可以是一個 URL 全稱(如 'http://www.google.com' ) 也可以是一個不包括域名的絕對 URL (如 '/search/' ). 注意它返回一個 HTTP 狀態碼 302.
HttpResponsePermanentRedirect
    類似 HttpResponseRedirect, 不過它返回一個持久化重定向(HTTP狀態碼301),而不是一個 found 重定向(狀態碼302). 
HttpResponseNotModified
    該類的建構函式不接受任何引數,表示一個頁面從使用者最後一次請示以來未做任何改動. 
HttpResponseNotFound
    類似 HttpResponse 不過使用 404 狀態碼. 
HttpResponseForbidden
    類似 HttpResponse 不過使用 403 狀態碼. 
HttpResponseGone
    類似 HttpResponse 不過使用 410 狀態碼. 
HttpResponseServerError
    類似 HttpResponse 不過使用 500 狀態碼. <script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script> 閱讀(15939) | 評論(0) | 轉發(1) | 給主人留下些什麼吧!~~ 評論熱議

相關推薦

Djangorequestresponse屬性方法詳述

Django 使用 request 和 response 物件表示系統狀態資料..當請求一個頁面時,Django建立一個 HttpRequest 物件.該物件包含 request 的元資料. 然後 Django 呼叫相應的 view 函式(HttpRequest 物件自動傳遞

javaRequestResponse常用方法及舉例

Request的常用方法: setAttribute() 在Request域中儲存資料 setCharacterEncoding() 設定請求引

springmvc request response

        //通知的簽名 //        Signature signature = joinPoint.getSignature(); //        if (

requestresponse常用的方法

(1)request簡介 request物件主要用於儲存“客戶端傳送給伺服器端的請求資訊”,因此可以通過request物件來獲取使用者傳送的相關資料,request常用的方法:  1. setAttribute()在Request域中儲存資料  2. setCharac

Djangorequestresponse

原文連結: https://blog.csdn.net/weixin_31449201/article/details/81043326 Django中的請求與響應 一.請求request django中的request用來獲取前端傳過來的資料,那麼前端資料的傳送方式有多種,每一種傳輸方式在後端對應的接收

SpringBoot方法獲取RequestResponse

很多時候方法中沒有帶引數HttpServletRequest 和HttpServletResponse ,但是我們需要用到這個引數。 場景: 我們將使用者的登陸資訊存入了redis以token作為Key,在某些地方需要獲取使用者資訊,我們就需要獲取請求頭中的token。

AOP日誌:aspect獲取requestresponse方法

RequestAttributes ra = RequestContextHolder.getRequestAttributes(); ServletRequestAttributes sra = (ServletRequestAttributes)ra; HttpServletRequest re

ssm框架獲取requestresponse

根據 屬性 使用 兩個 framework 容器 resp private ssm 有時候需要在Controller、service中使用HttpServletRequest或HttpServletResponse對象,這裏記下3種方法 1.直接在Controller接

spring MVC獲取requestresponse:

log clas pos stc body stat response ons style spring MVC中獲取request和response: HttpServletRequest request = ((ServletRequestAttributes)

REST framework Request Response

Request from rest_framework.request import Request REST framework 中的request和Django中的HttpRequest的是不一樣的,它是繼承於SimpleTemplateResponse, 而SimpleT

Servletrequestresponse、ServletContext 及其常用方法

request物件的類是HttpServletRequest request的常見方法: request.getRequestURL(): 瀏覽器發出請求時的完整URL,包括協議 主機名 埠(如果有)request.getRequestURI(): 瀏覽器發出請求的資源名部分,去掉了協議和主機名reque

JavaRequest response

一,什麼是請求和迴應?     request:請求物件。封裝了請求資訊,通過這個物件獲取請求資訊,是ServletRequest的子介面。     響應:響應物件封裝了響應資訊,通過這個物件將Servlet的的響應資訊響應給瀏覽器,是ServletResponse的的子

spring獲取requestresponse

在spring專案中,我們通常有幾種方法可以獲取request物件,1直接引數獲取 @RequestMapping("/path") public String getReqAndRes(HttpServletRequest request, HttpServlet

HTTP協議 (三) 壓縮 之前寫過一個篇 【HTTP協議詳解】 ,這次繼續介紹HTTP協議的壓縮。 本文會使用Fiddler來檢視HTTP requestResponse, 如果不熟悉這個工

之前寫過一個篇 【HTTP協議詳解】 ,這次繼續介紹HTTP協議中的壓縮。 本文會使用Fiddler來檢視HTTP request和Response, 如果不熟悉這個工具,可以先參考[Fiddler教程] HTTP壓縮是指: Web伺服器和瀏覽器之間壓縮傳輸的”文字內容“的方法。 HTTP採用通用的壓縮演算

SpringMvc4獲取requestresponse物件的方法

springMVC4中獲取request和response物件有以下兩種簡單易用的方法: 1、在control層獲取 在control層中獲取HttpServletRequest和HttpServle

struts之Action獲取requestresponse物件的方法

1、訪問或新增request/session/application屬性 public String scope() throws Exception{     ActionContext ctx = ActionContext.getContext();    

在springmvc通過過濾器獲取requestresponse

搭建頁面我就不詳細的說了,只是簡單的把要配置檔案說一下 主要配置beans.xml檔案和 spring-servlet.xml檔案 beans.xml <bean id="timeBasedAccessInterceptor" class

python3 encode decode的使用方法

這就是 得到 網絡 code 報錯 方式 left 定義 () 編碼:   將文本轉換成字節流的過程。即Unicode----------->特定格式的編碼方式,產生特定的字節流保存在硬盤中(一般為utf-8格式)。 解碼:   將硬盤中的字節流轉換成文本的過程。即特

java 獲取requestresponse的一種方法

requestjava獲取request和response:HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();//獲取res

php處理請求Request Payload參數的方法

php Request Payload 昨天晚上 開發一個功能發現,在ant design前端頁面發出的請求如果是post的時候,參數會在 Request Payload中追加。此時,在服務器端php的$_POST無法解析,由於時間緊迫 沒有去找ant design的request的實現。(主要是參照