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使用PIL缩放网络图片并保存的方法
Apr 24 Python
Python实现的质因式分解算法示例
May 03 Python
Python常见内置高效率函数用法示例
Jul 31 Python
Django中日期处理注意事项与自定义时间格式转换详解
Aug 06 Python
python判断列表的连续数字范围并分块的方法
Nov 16 Python
Python使用pymongo库操作MongoDB数据库的方法实例
Feb 22 Python
python爬虫豆瓣网的模拟登录实现
Aug 21 Python
python语言线程标准库threading.local解读总结
Nov 10 Python
Python实现平行坐标图的绘制(plotly)方式
Nov 22 Python
Python定义函数时参数有默认值问题解决
Dec 19 Python
Python2 与Python3的版本区别实例分析
Mar 30 Python
Python Scrapy多页数据爬取实现过程解析
Jun 12 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
《星际争霸》各版本雷兽特点图文解析 雷兽不同形态一览
2020/03/02 星际争霸
Can't create/write to file 'C:\WINDOWS\TEMP\...MYSQL报错解决方法
2011/06/30 PHP
基于PHP一些十分严重的缺陷详解
2013/06/03 PHP
PHP程序员常见的40个陋习,你中了几个?
2014/11/20 PHP
yii2中添加验证码的实现方法
2016/01/09 PHP
Zend Framework教程之MVC框架的Controller用法分析
2016/03/07 PHP
laravel通用化的CURD的实现
2019/12/13 PHP
jQuery-Easyui 1.2 实现多层菜单效果的代码
2012/01/13 Javascript
jquery插件开发方法(初学者)
2012/02/03 Javascript
JS中表单的使用小结
2014/01/11 Javascript
jQuery中attr()和prop()在修改checked属性时的区别
2014/07/18 Javascript
Node.js node-schedule定时任务隔多少分钟执行一次的方法
2015/02/10 Javascript
浅析jQuery Ajax请求参数和返回数据的处理
2016/02/24 Javascript
javascript实现仿百度图片的瀑布流加载效果
2016/04/20 Javascript
你有必要知道的10个JavaScript难点
2017/07/25 Javascript
vue项目实战总结篇
2018/02/11 Javascript
详解Vue-cli webpack移动端自动化构建rem问题
2018/04/07 Javascript
JavaScript实现的级联算法示例【省市二级联动功能】
2018/12/25 Javascript
Vue中import from的来源及省略后缀与加载文件夹问题
2020/02/09 Javascript
Python 开发Activex组件方法
2009/11/08 Python
python使用clear方法清除字典内全部数据实例
2015/07/11 Python
caffe binaryproto 与 npy相互转换的实例讲解
2018/07/09 Python
pytorch 修改预训练model实例
2020/01/18 Python
Tensorflow 实现释放内存
2020/02/03 Python
pycharm的python_stubs问题
2020/04/08 Python
网络、C以及其他硬件方面的面试题
2016/08/23 面试题
推荐信怎么写
2014/05/09 职场文书
低碳环保标语
2014/06/12 职场文书
家庭贫困证明书(3篇)
2014/09/15 职场文书
2014党委书记四风问题对照检查材料思想汇报
2014/09/22 职场文书
十八大宣传标语
2014/10/09 职场文书
自荐信格式模板
2015/03/27 职场文书
超市主管竞聘书
2015/09/15 职场文书
《清澈的湖水》教学反思
2016/02/17 职场文书
python实现简单倒计时功能
2021/04/21 Python
vue 自定义组件添加原生事件
2022/04/21 Vue.js