web.py cookie使用之cookie設定與獲取

pythontab發表於2012-12-31

上一篇文章說到了web.py初探之第一個頁面hello word,下面我們繼續深入web.py程式設計,來說一下web.py的cookie設定。


cookie相信學過web程式設計的人並不陌生,它在web程式設計中擔任著非常重要的角色。使用者登入、驗證碼、session(基於cookie)、語言選擇器、身份識別等等都會有cookie的身影。那麼怎麼樣在web.py中設定cookie呢?


其實在web.py中設定cookie非常簡單,web.py早已經為我們想到了這一點,提供了一個非常簡單有用的函式:

setcookie(name, value, expires="", domain=None, secure=False)

引數詳解:

  1. name (string) - Cookie的名稱,由瀏覽器儲存併傳送至伺服器。

  2. value (string) -Cookie的值,與Cookie的名稱相對應。

  3. expires (int) - Cookie的過期時間,這是個可選引數,它決定cookie有效時間是多久。以秒為單位。它必須是一個整數,而絕不能是字串。可選引數,不寫該引數則預設永久有效。

  4. domain (string) - Cookie的有效域-在該域內cookie才是有效的。一般情況下,要在某站點內可用,該引數值該寫做站點的域(比如.webpy.org),而不是站主的主機名(比如wiki.webpy.org),可選引數

  5. secure (bool)- 如果為True,要求該Cookie只能透過HTTPS傳輸。可選引數


例如:

#設定website的值為www.pythontab.com,有效期60秒
web.setcookie("website", "www.pythontab.com", 60)

示例


用web.setcookie() 設定cookie,如下:

class CookieSet:
    def GET(self):
        i = web.input(age='25')
        web.setcookie('age', i.age, 3600)
        return "Age set in your cookie"


用 GET方式呼叫上面的類將設定一個名為age,預設值是25的cookie(實際上,預設值25是在web.input中賦予i.age的,從而間接賦予 cookie,而不是在setcookie函式中直接賦予cookie的)。這個cookie將在一小時後(即3600秒)過期。


web.setcookie()的第三個引數-"expires"是一個可選引數,它用來設定cookie過期的時間。如果是負數,cookie將立刻過期。如果是正數,就表示cookie的有效時間是多久,以秒為單位。如果該引數為空,cookie就永不過期。


獲得Cookies


概述

獲取Cookie的值有很多方法,它們的區別就在於找不到cookie時如何處理。


方法1(如果找不到cookie,就返回None):

透過get方法獲得

#透過設定的cookie的名字獲取cookie,例如website
#web.cookies().get("website")  
web.cookies().get(cookieName)


方法2(如果找不到cookie,就丟擲AttributeError異常):


#先把cookie物件賦值給一個變數,然後透過cookie的名字獲得
#例如:foo.website
foo = web.cookies()
foo.cookieName


方法3(如果找不到cookie,可以設定預設值來避免丟擲異常):

#該方法最大的特點就是可以設定cookie的預設值
foo = web.cookies(cookieName=defaultValue)
#如果不存在該cookieName,就會返回設定的預設cookie
foo.cookieName


如果要確認cookie值是否存在

可以這樣做:

class CookieGet:
    def GET(self):
        try: 
             return "Your website name is: " + web.cookies().website
        except:
             #丟擲異常處理
             return "Cookie 不存在."



class CookieGet:
    def GET(self):
        #先進行賦值
        website = web.cookies().get('website')
        if age:
            return "Your website name is: %s" % website
        else:
            return "Cookie 不存在."



相關文章