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文件与文件夹常见基本操作总结
Sep 19 Python
python僵尸进程产生的原因
Jul 21 Python
使用django-crontab实现定时任务的示例
Feb 26 Python
pandas数据分组和聚合操作方法
Apr 11 Python
Python常用特殊方法实例总结
Mar 22 Python
python 含子图的gif生成时内存溢出的方法
Jul 07 Python
一篇文章搞定Python操作文件与目录
Aug 13 Python
python实现简易学生信息管理系统
Apr 05 Python
Django xadmin开启搜索功能的实现
Nov 15 Python
Python在后台自动解压各种压缩文件的实现方法
Nov 10 Python
python 制作本地应用搜索工具
Feb 27 Python
python识别围棋定位棋盘位置
Jul 26 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 字符串操作入门教程
2006/12/06 PHP
php 引用(&)详解
2009/11/20 PHP
解决phpcms更换javascript的幻灯片代码调用图片问题
2014/12/26 PHP
使用PHP免费发送定时短信的实例
2016/10/24 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
thinkPHP框架实现多表查询的方法
2018/06/14 PHP
JQuery 学习笔记 选择器之三
2009/07/23 Javascript
javascript关于继承的用法汇总
2014/12/20 Javascript
jQuery使用animate创建动画用法实例
2015/08/07 Javascript
JS实现网页上随滚动条滚动的层效果代码
2015/11/04 Javascript
javascript自定义滚动条实现代码
2020/04/20 Javascript
jQuery购物车插件jsorder用法(支持后台处理程序直接转换成DataTable处理)
2016/06/08 Javascript
js中DOM三级列表(代码分享)
2017/03/20 Javascript
详解如何将angular-ui的图片轮播组件封装成一个指令
2017/05/09 Javascript
ExtJs的Ext.Ajax.request实现waitMsg等待提示效果
2017/06/14 Javascript
原生JS实现的多个彩色小球跟随鼠标移动动画效果示例
2018/02/01 Javascript
详解angular路由高亮之RouterLinkActive
2018/04/28 Javascript
Vue框架下引入ActiveX控件的问题解决
2019/03/25 Javascript
前端面试知识点目录一览
2019/04/15 Javascript
vue项目中仿element-ui弹框效果的实例代码
2019/04/22 Javascript
three.js中多线程的使用及性能测试详解
2021/01/07 Javascript
[00:30]塑造者的传承礼包-戴泽“暗影之焰”套装展示视频
2014/04/04 DOTA
Python实现简单的可逆加密程序实例
2015/03/05 Python
探究数组排序提升Python程序的循环的运行效率的原因
2015/04/01 Python
在Python中操作列表之List.pop()方法的使用
2015/05/21 Python
Python实现简单的多任务mysql转xml的方法
2017/02/08 Python
python reduce 函数使用详解
2017/12/05 Python
tensorflow之自定义神经网络层实例
2020/02/07 Python
PyPDF2读取PDF文件内容保存到本地TXT实例
2020/05/12 Python
想学画画?python满足你!
2020/12/24 Python
html5自定义video标签的海报与播放按钮功能
2019/12/04 HTML / CSS
阿迪达斯印度官方商城:adidas India
2017/03/26 全球购物
新浪微博实习心得体会
2014/01/27 职场文书
优秀团干部个人事迹
2014/05/29 职场文书
MySQL实战记录之如何快速定位慢SQL
2022/03/23 MySQL
MySQL 语句执行顺序举例解析
2022/06/05 MySQL