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


Posted in Python onApril 24, 2015

这两天为用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 response
help(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.

Python 相关文章推荐
python 算法 排序实现快速排序
Jun 05 Python
Python处理JSON数据并生成条形图
Aug 05 Python
Python 3.6 性能测试框架Locust安装及使用方法(详解)
Oct 11 Python
python画出三角形外接圆和内切圆的方法
Jan 25 Python
django传值给模板, 再用JS接收并进行操作的实例
May 28 Python
Python 处理图片像素点的实例
Jan 08 Python
pyinstaller打包程序exe踩过的坑
Nov 19 Python
pycharm运行scrapy过程图解
Nov 22 Python
Django对接支付宝实现支付宝充值金币功能示例
Dec 17 Python
检测tensorflow是否使用gpu进行计算的方式
Feb 03 Python
什么是Python中的匿名函数
Jun 02 Python
python如何获取网络数据
Apr 11 Python
利用Python的装饰器解决Bottle框架中用户验证问题
Apr 24 #Python
在Python中使用mongoengine操作MongoDB教程
Apr 24 #Python
python使用arp欺骗伪造网关的方法
Apr 24 #Python
python使用wxPython打开并播放wav文件的方法
Apr 24 #Python
python使用PyGame播放Midi和Mp3文件的方法
Apr 24 #Python
python使用PyGame绘制图像并保存为图片文件的方法
Apr 24 #Python
python使用PIL缩放网络图片并保存的方法
Apr 24 #Python
You might like
php注册和登录界面的实现案例(推荐)
2016/10/24 PHP
laravel中命名路由的使用方法
2017/02/24 PHP
php+mysql+ajax实现单表多字段多关键词查询的方法
2017/04/15 PHP
PHP机器学习库php-ml的简单测试和使用方法
2017/07/14 PHP
用htc组件制作windows选项卡
2007/01/13 Javascript
javascript快速排序算法详解
2014/09/17 Javascript
JavaScript DOM操作表格及样式
2015/04/13 Javascript
基于JavaScript代码实现pc与手机之间的跳转
2015/12/23 Javascript
vue分页组件table-pagebar使用实例解析
2020/11/15 Javascript
Bootstrap实现导航栏的2种方式
2016/11/28 Javascript
JS实现的合并两个有序链表算法示例
2019/02/25 Javascript
jQuery zTree插件快速实现目录树
2019/08/16 jQuery
Jquery+AJAX实现无刷新上传并重命名文件操作示例【PHP后台接收】
2020/05/29 jQuery
浅谈function(函数)中的动态参数
2017/04/30 Python
Python 对象中的数据类型
2017/05/13 Python
python 列表,数组,矩阵两两转换tolist()的实例
2018/04/04 Python
selenium+python 去除启动的黑色cmd窗口方法
2018/05/22 Python
利用Python实现微信找房机器人实例教程
2019/03/10 Python
django云端留言板实例详解
2019/07/22 Python
python NumPy ndarray二维数组 按照行列求平均实例
2019/11/26 Python
谈谈python垃圾回收机制
2020/09/27 Python
澳大利亚小众服装品牌:Maurie & Eve
2018/03/27 全球购物
英国著名的美容护肤和护发产品购物网站:Lookfantastic
2020/11/23 全球购物
Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
2015/01/27 面试题
葡萄牙语专业个人求职信
2013/12/10 职场文书
《胡杨》教学反思
2014/02/16 职场文书
2014爱耳日宣传教育活动总结
2014/03/09 职场文书
竞选演讲稿范文大全
2014/05/12 职场文书
父亲节寄语大全
2015/02/27 职场文书
项目合作意向书
2015/05/08 职场文书
2016年第32个教师节红领巾广播稿
2015/12/18 职场文书
2016年艾滋病宣传活动总结
2016/04/01 职场文书
python中subplot大小的设置步骤
2021/06/28 Python
日本官方排名前10的动漫,名侦探柯南上榜,第一是一部创造历史的动漫
2022/03/18 日漫
oracle数据库去除重复数据
2022/05/20 Oracle
MySQL提升大量数据查询效率的优化神器
2022/07/07 MySQL