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 相关文章推荐
在Django的URLconf中进行函数导入的方法
Jul 18 Python
在Python的Django框架中编写编译函数
Jul 20 Python
python3新特性函数注释Function Annotations用法分析
Jul 28 Python
用Python设计一个经典小游戏
May 15 Python
python版大富翁源代码分享
Nov 19 Python
python解压TAR文件至指定文件夹的实例
Jun 10 Python
python集合是否可变总结
Jun 20 Python
Python3.5以上版本lxml导入etree报错的解决方案
Jun 26 Python
Python网页解析器使用实例详解
May 30 Python
Matplotlib 折线图plot()所有用法详解
Jul 28 Python
Python函数递归调用实现原理实例解析
Aug 11 Python
Python django框架 web端视频加密的实例详解
Nov 20 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开发微信支付的代码分享
2014/05/25 PHP
ThinkPHP 表单自动验证运用示例
2014/10/13 PHP
Laravel框架中实现使用阿里云ACE缓存服务
2015/02/10 PHP
php实现网页端验证码功能
2017/07/11 PHP
PHP实现二维数组中的查找算法小结
2018/06/09 PHP
php遍历目录下文件并按修改时间排序操作示例
2019/07/12 PHP
基于jQuery的固定表格头部的代码(IE6,7,8测试通过)
2010/05/18 Javascript
JQuery删除DOM节点的方法
2015/06/11 Javascript
AngularJS基础 ng-click 指令示例代码
2016/08/01 Javascript
js获取元素的标签名实现方法
2016/10/08 Javascript
js实现可旋转的立方体模型
2016/10/16 Javascript
JavaScript数组去重的几种方法效率测试
2016/10/23 Javascript
jquery dataview数据视图插件使用方法
2016/12/23 Javascript
jquery单击文字或图片内容放大并居中显示
2017/06/23 jQuery
Vue + better-scroll 实现移动端字母索引导航功能
2018/05/07 Javascript
JS 实现获取验证码 倒计时功能
2018/10/29 Javascript
浅谈webpack性能榨汁机(打包速度优化)
2019/01/09 Javascript
[02:32]DOTA2亚洲邀请赛 VG战队巡礼
2015/02/03 DOTA
[01:00]一分钟回顾2018DOTA2亚洲邀请赛现场活动
2018/04/07 DOTA
Python获取单个程序CPU使用情况趋势图
2015/03/10 Python
python根据时间生成mongodb的ObjectId的方法
2015/03/13 Python
python下载文件记录黑名单的实现代码
2017/10/24 Python
pandas DataFrame数据转为list的方法
2018/04/11 Python
Python字典的核心底层原理讲解
2019/01/24 Python
python networkx 包绘制复杂网络关系图的实现
2019/07/10 Python
Python autoescape标签用法解析
2020/01/17 Python
完美解决pycharm 不显示代码提示问题
2020/06/02 Python
使用openCV去除文字中乱入的线条实例
2020/06/02 Python
Opencv python 图片生成视频的方法示例
2020/11/18 Python
Lands’ End官网:经典的美国生活方式品牌
2016/08/14 全球购物
PUMA官方商城:世界领先的运动品牌之一
2016/11/16 全球购物
优秀志愿者事迹材料
2014/02/03 职场文书
成绩单家长评语大全
2014/04/16 职场文书
企业安全标语
2014/06/07 职场文书
利用python做表格数据处理
2021/04/13 Python
解决Python保存文件名太长OSError: [Errno 36] File name too long
2022/05/11 Python