欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Python中的Cookie模塊使用

 更新時(shí)間:2015年07月06日 10:54:07   投稿:goldensun  
這篇文章主要介紹了詳解Python中的Cookie模塊使用,是Python入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下

最近在用GAE開發(fā)自己的博客程序。雖然GAE的API沒有顯式的提供操作Cookie的方法,但他現(xiàn)有的架構(gòu),使我們有足夠的自由來操作Cookie。

Cookie 模塊,顧名思義,就是用來操作Cookie的模塊。Cookie這塊小蛋糕,玩過Web的人都知道,它是Server與Client保持會(huì)話時(shí)用到的信息 切片。 Http協(xié)議本身是無狀態(tài)的,也就是說,同一個(gè)客戶端發(fā)送的兩次請(qǐng)求,對(duì)于Web服務(wù)器來說,沒有直接的關(guān)系。既然這樣,有人會(huì)問,既然Http是無狀態(tài) 的, 為什么有些網(wǎng)頁(yè),只有輸入了用戶名與密碼通過驗(yàn)證之后才可以訪問?那是因?yàn)椋簩?duì)于通過身份驗(yàn)證的用戶,Server會(huì)偷偷的在發(fā)往Client的數(shù)據(jù)中添 加 Cookie,Cookie中一般保存一個(gè)標(biāo)識(shí)該Client的唯一的ID,Client在接下來對(duì)服務(wù)器的請(qǐng)求中,會(huì)將該ID以Cookie的形式一并 發(fā)往Server,Server從回傳回來的Cookie中提取ID并與相應(yīng)的用戶綁定起來,從而實(shí)現(xiàn)身份驗(yàn)證。說白了,Cookie就是一個(gè)在服務(wù)器與客戶端之間相互傳遞的字符串(下圖通過FireFox的FireBug插件查看訪問google.com時(shí)的Cookie)。 越扯越遠(yuǎn)了,回到我們的主題:Python標(biāo)準(zhǔn)模塊 — Cookie。

201576105048182.jpg (440×204)

(上圖是Http請(qǐng)求頭中的Cookie信息)

201576105112231.jpg (595×156)

(上圖是Http響應(yīng)中的Cookie信息)
Cooke模塊中定義了4個(gè)直接操作Cookie的類:BaseCookie、SimpleCookie、SerialCookie、 SmartCookie。其中,BaseCookie是基類,定義了操作Cookie的公共部分,其他3個(gè)類都繼承自BaseCookie,它們之間的區(qū) 別僅僅在于序列化數(shù)據(jù)的方式不同。下面簡(jiǎn)單講解這些類的使用。

BaseCookie基類: BaseCookies的行為非常像dict,可以用鍵/值對(duì)的形式來操作它,但是kye必須是字符串,value是Morsel對(duì)象 (下面會(huì)講到Morsel)。BaseCookies定義了編碼/解碼,輸入/輸出操作的公共規(guī)范:

BaseCookie.value_encode(val):對(duì)數(shù)據(jù)進(jìn)行序列化/反序列化。這些方法都返回字符串,以便通過Http傳輸。

BaseCookie.output():返回字符串,該字符串可以作為Http響應(yīng)頭發(fā)往客戶端。

BaseCookie.js_output():返回嵌入js腳本的字符串,瀏覽器通過執(zhí)行該腳本,就可以得到cooke數(shù)據(jù)。

BaseCookie.load(newdata):解析字符串為Cookie數(shù)據(jù)。

SimpleCookie、SerialCookie、SmartCookie都繼承自BaseCookie,具有一致的行為,它們各自對(duì) BaseCookie的value_decode, value_encode進(jìn)行了重寫并實(shí)現(xiàn)自己的序列化/反序列化策略,其中:

  •     SimpleCookie內(nèi)部使用str()來對(duì)數(shù)據(jù)進(jìn)行序列化;
  •     SerialCookie則通過pickle模塊來序列化反序列化數(shù)據(jù);
  •     SmartCookie相對(duì)聰明點(diǎn),對(duì)于非字符串?dāng)?shù)據(jù),使用pickle序列/反序列化,否則將字符串原樣返回。

下面的例子簡(jiǎn)單的說明如何使用Cookie模塊:
 

import Cookie
 
c = Cookie.SimpleCookie()
c['name'] = 'DarkBull'
c['address'] = 'ChinaHangZhou'
c['address']['path'] = '/' 
# 路徑
c['address']['domain'] = 'appspot.com' 
# domain
c['address']['expires'] = 'Fir, 01-Oct-2010 20:00:00 GMT'  
# 過期時(shí)間
print c.output()
print c.js_output()
 
# 輸出結(jié)果,與上圖對(duì)照
# Set-Cookie: address=ChinaHangZhou; Domain=appspot.com; expires=Fir, 01-Oct-2010 20:00:00 GMT; Path=/
# Set-Cookie: name=DarkBull
 
# 作為腳本輸出
# <script type="text/javascript">
# document.cookie = "address=ChinaHangZhou; Domain=appspot.com; expires=Fir, 01-Oct-2010 20:00:00 GMT; Path=/";
# </script>
 
# <script type="text/javascript">
# document.cookie = "name=DarkBull";
# </script>

Morsel類 : 用于表示Cookie中每一項(xiàng)數(shù)據(jù)的屬性而抽象的類。這些屬性包括:expires, path, comment, domain, max-age, secure, version等等(看上圖下劃線標(biāo)注部分)。如果你玩過web,對(duì)這些應(yīng)該不會(huì)陌生,可以在RCF2109中找到他們的具體定義

Morsel.key,Morsel.value:Cookie數(shù)據(jù)項(xiàng)的key/value(value可以是二進(jìn)制數(shù)據(jù));

Morsel.coded_value:數(shù)據(jù)編碼后得到的字符串。Http協(xié)議是基于文本的協(xié)議,Server無法直接向Client發(fā)送二進(jìn)制數(shù)據(jù),只有序列化成字符串后,才能發(fā)往Client;

Morsel.set(key, value, coded_value):設(shè)置Cookie數(shù)據(jù)項(xiàng)的key、value、coded_value;

Morsel.isReversvedKey(key):如果key是expires, path, comment, domain, max-age, secure, version, httponly中的一個(gè),返回True,否則返回False;

Morsel.output():返回型如“Set-Cookie: …”的字符串,表示一個(gè)Cookie數(shù)據(jù)項(xiàng);

Morsel.js_output():返回Cookie數(shù)據(jù)項(xiàng)的腳本字符串;

Morsel.OutputString(): 返回Morsel的字符串表示;

Morsel使用示例:
 

import Cookie
 
m = Cookie.Morsel()
m.set('name', 'DarkBull', 'DarkBull')
m['expires'] = 'Fir, 01-Oct-2010 20:00:00 GMT'
m['domain'] = 'appspot.com'
print m.output()
 
# 結(jié)果
# Set-Cookie: name=DarkBull; Domain=appspot.com; expires=Fir, 01-Oct-2010 20:00:00

相關(guān)文章

  • Python變量作用范圍實(shí)例分析

    Python變量作用范圍實(shí)例分析

    這篇文章主要介紹了Python變量作用范圍,實(shí)例分析了Python中變量的定義與相關(guān)作用域,是Python學(xué)習(xí)中非常重要的基本技巧,需要的朋友可以參考下
    2015-07-07
  • 如何從Python 程序中運(yùn)行 PowerShell 腳本

    如何從Python 程序中運(yùn)行 PowerShell 腳本

    Windows PowerShell 由數(shù)十個(gè)內(nèi)置 cmdlet 組成,它們提供了豐富的功能集,本文將重點(diǎn)討論從 Python 代碼執(zhí)行 PowerShell 邏輯,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • 詳解利用python-highcharts庫(kù)繪制交互式可視化圖表

    詳解利用python-highcharts庫(kù)繪制交互式可視化圖表

    本文主要和大家分享一個(gè)超強(qiáng)交互式可視化繪制工具-python-highcharts。python-highcharts就是使用Python進(jìn)行Highcharts項(xiàng)目繪制,簡(jiǎn)單的說就是實(shí)現(xiàn)Python和Javascript之間的簡(jiǎn)單轉(zhuǎn)換層,感興趣的可以了解一下
    2022-03-03
  • Django內(nèi)容增加富文本功能的實(shí)例

    Django內(nèi)容增加富文本功能的實(shí)例

    下面小編就為大家?guī)硪黄狣jango內(nèi)容增加富文本功能的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • Python網(wǎng)絡(luò)爬蟲信息提取mooc代碼實(shí)例

    Python網(wǎng)絡(luò)爬蟲信息提取mooc代碼實(shí)例

    這篇文章主要介紹了python網(wǎng)絡(luò)爬蟲與信息提取mooc,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Python中Pickle模塊和base64模塊的使用解析

    Python中Pickle模塊和base64模塊的使用解析

    這篇文章主要介紹了Python中Pickle模塊和base64模塊的使用解析,pickle模塊是python的標(biāo)準(zhǔn)模塊,提供了對(duì)于python數(shù)據(jù)的序列化操作,可以將數(shù)據(jù)轉(zhuǎn)換為bytes類型,其序列化速度比json模塊要高,需要的朋友可以參考下
    2023-09-09
  • python使用pygame模塊實(shí)現(xiàn)坦克大戰(zhàn)游戲

    python使用pygame模塊實(shí)現(xiàn)坦克大戰(zhàn)游戲

    這篇文章主要為大家詳細(xì)介紹了python使用pygame模塊實(shí)現(xiàn)坦克大戰(zhàn)游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • Python?pygame派生精靈和精靈組創(chuàng)建敵機(jī)

    Python?pygame派生精靈和精靈組創(chuàng)建敵機(jī)

    這篇文章主要為大家介紹了Python?pygame派生精靈和精靈組創(chuàng)建敵機(jī)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Python語(yǔ)法學(xué)習(xí)之進(jìn)程的創(chuàng)建與常用方法詳解

    Python語(yǔ)法學(xué)習(xí)之進(jìn)程的創(chuàng)建與常用方法詳解

    本文我們將學(xué)習(xí)一下在?Python?中去創(chuàng)建并使用多進(jìn)程的方法,可以通過創(chuàng)建多個(gè)進(jìn)程來幫助我們提高腳本執(zhí)行的效率,感興趣的可以了解一下
    2022-04-04
  • Django實(shí)現(xiàn)單用戶登錄的方法示例

    Django實(shí)現(xiàn)單用戶登錄的方法示例

    這篇文章主要介紹了Django實(shí)現(xiàn)單用戶登錄的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-03-03

最新評(píng)論