Python的Bottle框架中獲取制定cookie的教程

字號:


    Python的Bottle框架中獲取制定cookie的教程
    這篇文章主要介紹了Python的Bottle框架中獲取制定cookie的教程,主要是針對別的路徑而不是當(dāng)前頁面的cookie,需要的朋友可以參考下
    這兩天為用bottle+mongodb寫的一個(gè)項(xiàng)目加上登錄功能,無奈怎么都獲取不到保存的cookie,文檔給出讓我們這樣操作cookie的代碼片段:
    @route('/login')
    def login ():
    username = request .forms .get('username ')
    password = request .forms .get('password ')
    if check_user_credentials(username, password):
    response .set_cookie("account", username, secret= 'some-secret-key')
    return "Welcome %s!You are now logged in." % username
    else :
    return "Login failed."
    @route('/restricted')
    def restricted_area ():
    username = request .get_cookie("account", secret= 'some-secret-key')
    if username:
    return "Hello %s.Welcome back." % username
    雖然文檔上沒有但是還有一種操作cookie的方式:
    from bottle import request, response
    @route('/login', method="POST")
    def login():
    user = request.POST['user']
    passwd = request.POST['passwd']
    if check_user_right(user,passwd):
    response.COOKIES['account'] = user
    else:
    pass
    @route('/admin')
    def admin():
    user = request.COOKIES['user']
    if user:
    pass
    但是無論我用哪種方式操作我都無法獲取cookie,為什么呢.百思不得其解.但是我的一個(gè)處理文章點(diǎn)擊率的提醒了我,代碼如下:
    @route('/archrives/:aid#\d+#')
    def article_show(aid):
    db = dbconn.ConnDB()
    artid = int(aid)
    # 獲取客戶端ip
    remoteip = request.environ.get('REMOTE_ADDR')
    artcookie = remoteip+'ip'+aid
    print request.COOKIES.keys()
    # 判斷cookie是否存在
    if artcookie in request.COOKIES.keys():
    # 存在則更新有效時(shí)間
    response.COOKIES[artcookie] = True
    response.COOKIES[artcookie]['max-age'] = 500
    else:
    # 不存在則更新文章查看次數(shù)
    db.posts.update({"id":artid}, {"$inc":{"views":1}})
    # 并設(shè)置cookie
    response.COOKIES[artcookie] = True
    response.COOKIES[artcookie]['max-age'] = 500
    TEMPLATE['posts'] = getArtList({"id":artid})
    TEMPLATE.update(setTempVar())
    return template('article.html', TEMPLATE)
    這里是可以正常獲取到cookie的,而且代碼沒有任何區(qū)別.唯一的區(qū)別就是用戶認(rèn)證是跳轉(zhuǎn)了頁面.所以我help了一下:
    from bottle import response
    help(response.set_cookie)
    help的結(jié)果其中有兩個(gè)參數(shù)一個(gè)是path,和domain:
    :param domain: the domain that is allowed to read the cookie.
    (default: current domain)
    :param path: limits the cookie to a given path (default: current path)
    明顯bottle的cookie默認(rèn)只在當(dāng)前路徑下能讀取的到,所以要?jiǎng)e的頁面讀取到cookie我們的代碼須改成如下:
    from bottle import request, response
    @route('/login', method="POST")
    def login():
    user = request.POST['user']
    passwd = request.POST['passwd']
    if check_user_right(user,passwd):
    response.COOKIES['account'] = user
    response.COOKIES['account']['path'] = '/admin'
    else:
    pass
    @route('/admin')
    def admin():
    user = request.COOKIES['user']
    這樣我們就能在別的路徑下訪問我們設(shè)定的cookie.