Python的Bottle架構中擷取制定cookie的教程

來源:互聯網
上載者:User
這兩天為用bottle+mongodb寫的一個項目加上登入功能,無奈怎麼都擷取不到儲存的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,為什麼呢.百思不得其解.但是我的一個處理文章點擊率的提醒了我,代碼如下:

@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():    # 存在則更新有效時間    response.COOKIES[artcookie] = True    response.COOKIES[artcookie]['max-age'] = 500  else:    # 不存在則更新文章查看次數    db.posts.update({"id":artid}, {"$inc":{"views":1}})    # 並設定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的,而且代碼沒有任何區別.唯一的區別就是使用者認證是跳轉了頁面.所以我help了一下:

from bottle import responsehelp(response.set_cookie)

help的結果其中有兩個參數一個是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預設只在當前路徑下能讀取的到,所以要別的頁面讀取到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']

這樣我們就能在別的路徑下訪問我們設定的cookie.

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.