詳解Django中Request物件的相關用法
從Request物件中獲取資料
我們在第三章講述View的函式時已經介紹過HttpRequest物件了,但當時並沒有講太多。 讓我們回憶下:每個view函式的第一個引數是一個HttpRequest物件,就像下面這個hello()函式:
?1 2 3 4 |
from
django.http import
HttpResponse
def
hello(request):
return
HttpResponse( "Hello
world" )
|
HttpRequest物件,比如上面程式碼裡的request變數,會有一些有趣的、你必須讓自己熟悉的屬性和方法,以便知道能拿它們來做些什麼。 在view函式的執行過程中,你可以用這些屬性來獲取當前request的一些資訊(比如,你正在載入這個頁面的使用者是誰,或者用的是什麼瀏覽器)。
URL相關資訊
HttpRequest物件包含當前請求URL的一些資訊:
在view函式裡,要始終用這個屬性或方法來得到URL,而不要手動輸入。 這會使得程式碼更加靈活,以便在其它地方重用。 下面是一個簡單的例子:
?1 2 3 4 5 6 7 |
#
BAD!
def
current_url_view_bad(request):
return
HttpResponse( "Welcome
to the page at /current/" )
#
GOOD
def
current_url_view_good(request):
return
HttpResponse( "Welcome
to the page at %s"
%
request.path)
|
有關request的其它資訊
request.META 是一個Python字典,包含了所有本次HTTP請求的Header資訊,比如使用者IP地址和使用者Agent(通常是瀏覽器的名稱和版本號)。 注意,Header資訊的完整列表取決於使用者所傳送的Header資訊和伺服器端設定的Header資訊。 這個字典中幾個常見的鍵值有:
- HTTP_REFERER,進站前連結網頁,如果有的話。 (請注意,它是REFERRER的筆誤。)
- HTTP_USER_AGENT,使用者瀏覽器的user-agent字串,如果有的話。 例如: "Mozilla/5.0 (X11; U; Linux i686; fr-FR; rv:1.8.1.17) Gecko/20080829 Firefox/2.0.0.17" .
- REMOTE_ADDR 客戶端IP,如:"12.345.67.89" 。(如果申請是經過代理伺服器的話,那麼它可能是以逗號分割的多個IP地址,如:"12.345.67.89,23.456.78.90" 。)
注意,因為 request.META 是一個普通的Python字典,因此當你試圖訪問一個不存在的鍵時,會觸發一個KeyError異常。 (HTTP header資訊是由使用者的瀏覽器所提交的、不應該給予信任的“額外”資料,因此你總是應該好好設計你的應用以便當一個特定的Header資料不存在時,給出一個優雅的迴應。)你應該用 try/except 語句,或者用Python字典的 get() 方法來處理這些“可能不存在的鍵”:
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#
BAD!
def
ua_display_bad(request):
ua
=
request.META[ 'HTTP_USER_AGENT' ]
#
Might raise KeyError!
return
HttpResponse( "Your
browser is %s"
%
ua)
#
GOOD (VERSION 1)
def
ua_display_good1(request):
try :
ua
=
request.META[ 'HTTP_USER_AGENT' ]
except
KeyError:
ua
=
'unknown'
return
HttpResponse( "Your
browser is %s"
%
ua)
#
GOOD (VERSION 2)
def
ua_display_good2(request):
ua
=
request.META.get( 'HTTP_USER_AGENT' ,
'unknown' )
return
HttpResponse( "Your
browser is %s"
%
ua)
|
我們鼓勵你動手寫一個簡單的view函式來顯示 request.META 的所有資料,這樣你就知道里面有什麼了。 這個view函式可能是這樣的:
?
1
相關推薦詳解Django中Request物件的相關用法從Request物件中獲取資料 我們在第三章講述View的函式時已經介紹過HttpRequest物件了,但當時並沒有講太多。 讓我們回憶下:每個view函式的第一個引數是一個HttpRequest物件,就像下面這個hello()函式: ? 1 2 3 4 from djang C++ this指標的詳解 C++中this指標的用法詳解C++中this指標的用法詳解 轉自:http://blog.chinaunix.net/uid-21411227-id-1826942.html 1. this指標的用處: 一個物件的this指標並不是物件本身的一部分,不會影響sizeof(物件)的結果 從原始碼解析Python的Flask框架中request物件的用法from flask import requestFlask 是一個人氣非常高的Python Web框架,筆者也拿它寫過一些大大小小的專案,Flask 有一個特性我非常的喜歡,就是無論在什麼地方,如果你想要獲取當前的request物件,只要 簡單的: 從當前request 詳解CSS中:nth-child的用法下面我將用幾個典型的例項來給大家講解:nth-child的實際用途: Tips:還用低版本的IE瀏覽器的哥們請繞過! :nth-child(2)選取第幾個標籤,“2可以是你想要的數字” .demo01 li:nth-child(2){background:#090} :nth-c Django中request物件與response物件瀏覽器向伺服器傳引數,主要通過以下四種方式 檢視函式定義方式 from django.shortcuts import render from django.http import HttpResponse, JsonResponse import json # 1獲取URL中的引數 de 詳解CSS3中:nth-child的用法CSS3中:nth-child的實際用途:不適用低版本的IE瀏覽器! (1):nth-child(n + 4)選取大於等於4的標籤,其中"n"為整數,下同 .demo01 li:nth-child(n+4){background:#090} (2):nth-chi 詳解django中的collectstatic命令以及STATIC_URL、STATIC_ROOT配置前言 我最近在琢磨django框架的使用,在上傳個人網站伺服器上時,再次遇到了找不到靜態檔案,css、img等樣式全無的問題。於是沉下心來,好好研究了django的靜態檔案到底應該怎麼去部署(deploy),一點心得體會現分享於下。 1. python mana 詳解Python中的join()函數的用法pre 說明 bsp 字符 指定 .net 絕對路徑 字典 -s 函數:string.join() Python中有join()和os.path.join()兩個函數,具體作用如下: join(): 連接字符串數組。將字符串、元組、列表中的元素以指定的字符(分 js數組中foEach和map的用法詳解 jq中的$.each和$.mapcnblogs arr 對象 cal for index source asc 原生js 數組中foEach和map的用法詳解 相同點: 1.都是循環遍歷數組(僅僅是數組)中的每一項。 2.forEach() 和 map() 裏面每一次執行匿名函數都支持3個參數:數組中的 詳解MySQL中concat函數的用法(連接字符串)連接 container 使用方法 字符串 border IT 冗余 str () MySQL中concat函數 使用方法: CONCAT(str1,str2,…) 返回結果為連接參數產生的字符串。如有任何一個參數為NULL ,則返回值為 NULL。 詳解Java中的時區類TimeZone的用法void system類 深入 pri comment 相對 系統 就會 lean 一、TimeZone 簡介 TimeZone 表示時區偏移量,也可以計算夏令時。 在操作 Date, Calendar等表示日期/時間的對象時,經常會用到TimeZone;因為不同的時區, 詳解Python中的join()函式的用法函式:string.join() Python中有join()和os.path.join()兩個函式,具體作用如下: join(): 連線字串陣列。將字串、元組、列表中的元素以指定的字元(分隔符)連線生成 詳解PHP中foreach的用法和例項在PHP中經常會用到foreach的使用,而要用到foreach,就必須用到陣列。因此,在這篇文章中,我們一邊講陣列,一邊講foreach。 foreach有兩種語法: 第一種:遍歷給定的 陣列語句 array_expression 陣列。每次迴圈中,當前單元的值被賦給 詳解CentOS中定時執行釋放記憶體的Shell指令碼及相關原理本文由荒原之夢原創,原文連結:http://zhaokaifeng.com/?p=748 本文總體結構: 第一部分:本文中釋放系統記憶體的原理 第二部分:建立用於釋放記憶體的Shell指令碼並加入到系統定時任務 第三部分:詳細分析Shell指令碼中的每一條指令 第四部 詳解Java中Map用法Map以按鍵/數值對的形式儲存資料,這裡要特別說明( Map.Entry,是Map的內部類,它用來描述Map中的鍵/值對)。 Map是一個介面,我們平時多用它的實現類HashMap。 用例如下: 1 public static void main(String args 詳解Python中的join()函式的用法(字串和os.path)函式:string.join() Python中有join()和os.path.join()兩個函式,具體作用如下: join(): 連線字串陣列。將字串、元組、列表中的元素以指定的字元(分隔符)連線生成一個新的字串 os.path. postman(六):詳解在Pre-request Script中如何執行請求上一篇藉著如何在不同介面之間傳遞資料簡單說了下如何在postman編寫指令碼來發送請求,這裡再詳細介紹一下如何在Pre-request Script和Tests標籤中編寫指令碼來。因為我目前研究的也不是很深,對js也只是瞭解一點皮毛,所以大部分還是依賴postman已經封裝好的方法來介紹 這裡以P sql去重複操作詳解SQL中distinct的用法在使用mysql時,有時需要查詢出某個欄位不重複的記錄,這時可以使用mysql提供的distinct這個關鍵字來過濾重複的記錄,但是實際中我們往往用distinct來返回不重複欄位的條數(count(distinct id)),其原因是distinct只能返回他的目標欄位,而無法返回其他欄位,例如有如下表 java 亂碼詳解_jsp中pageEncoding、charset=UTF -8"、request.setCharacterEncoding("UTF-8")可以簡單認為是,pageEncoding是jsp檔案本身的編碼;contentType的charset是指伺服器傳送給客戶端時的內容編碼。 例如:pageEncoding="GBK"。這句話的意思是,告訴JVM 這個jsp本身採用的"GBK"編碼,在JSP編譯成Servlet傳 Servlet詳解(二):request和response物件什麼是request和response request物件是伺服器對瀏覽器請求的封裝,而response是伺服器對伺服器響應的封裝。 request用來取出請求資訊,而response則用來新增要返回給瀏覽器的資訊。 使用response物件設定h |