2009-09-23 110 views
6

簡單的東西在這裏...測試的餅乾存在在Django

,如果我嘗試通過

request.COOKIE["key"] 

引用在Django一個cookie,如果cookie不存在,這將拋出一個關鍵的錯誤。

對於Django的GETPOST,因爲它們是QueryDict對象,我可以做

if "foo" in request.GET 

這是奇妙複雜的...

,是不是有什麼最接近這個餅乾一個try/catch塊,如果有什麼...

回答

20

request.COOKIES是一個標準的Python字典,所以相同的語法工作。

做的另一種方法是:

request.COOKIES.get('key', 'default') 

如果該鍵存在返回的值,否則「默認」 - 你可以把任何你在的地方「默認」的喜歡。

5

首先,它是

request.COOKIES 

不是request.COOKIE。其他人會給你一個錯誤。

其次,它是一個字典(或類似字典)對象,所以:

if "foo" in request.COOKIES.keys() 

會給你你所需要的。 如果你想要得到的cookie的值,你可以使用:

request.COOKIES.get("key", None) 

那麼,如果沒有關鍵"key",你會得到一個None,而不是例外。

+2

由於python 2.2,你可以在request.COOKIES中使用'if'foo「 - 沒有必要添加'.keys()' – 2009-09-23 16:21:13

+1

的權利。可能它只是我,但我更喜歡更長的版本(也許與長期以前一起工作的問題很長時間)。它更對稱,更隱含我如何檢查是否使用:在dict.keys()中的「foo」中,如果dict.values()中的「bar」... ... – kender 2009-09-23 16:28:28

+0

@kender,則「 dict.keys中的「foo」()' - 'dict.keys()'創建一個清單,然後垃圾收集 - 額外的開銷。 – warvariuc 2013-04-04 13:30:37