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  连接字符串(join %)
Sep 06 Python
在Lighttpd服务器中运行Django应用的方法
Jul 22 Python
Pycharm学习教程(3) 代码运行调试
May 03 Python
Python面向对象程序设计OOP深入分析【构造函数,组合类,工具类等】
Jan 05 Python
django2.0扩展用户字段示例
Feb 13 Python
Python Sympy计算梯度、散度和旋度的实例
Dec 06 Python
python3读取autocad图形文件.py实例
Jun 05 Python
通俗讲解python 装饰器
Sep 07 Python
Python通过类的组合模拟街道红绿灯
Sep 16 Python
Python jieba结巴分词原理及用法解析
Nov 05 Python
详细总结Python常见的安全问题
May 21 Python
python turtle绘制多边形和跳跃和改变速度特效
Mar 16 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
同时提取多条新闻中的文本一例
2006/10/09 PHP
PHP iconv 函数转gb2312的bug解决方法
2009/10/11 PHP
Smarty的配置与高级缓存技术分享
2012/06/05 PHP
图解找出PHP配置文件php.ini的路径的方法
2014/08/20 PHP
php中explode的负数limit用法分析
2015/02/27 PHP
PHP mysqli_free_result()与mysqli_fetch_array()函数详解
2016/09/21 PHP
解决laravel-admin 自己新建页面里 js 需要刷新一次的问题
2019/10/03 PHP
JavaScript关于select的相关操作说明
2010/01/13 Javascript
自制轻量级仿jQuery.boxy对话框插件代码
2010/10/26 Javascript
jquery each()源代码
2011/02/14 Javascript
vue中axios的封装问题(简易版拦截,get,post)
2018/06/15 Javascript
Vue绑定内联样式问题
2018/10/17 Javascript
微信小程序使用component自定义toast弹窗效果
2018/11/27 Javascript
用Vue编写抽象组件的方法
2019/05/06 Javascript
vue3 源码解读之 time slicing的使用方法
2019/10/31 Javascript
javascript实现页面的实时时钟显示示例
2020/08/06 Javascript
vue created钩子函数与mounted钩子函数的用法区别
2020/11/05 Javascript
[03:08]Ti4观战指南上
2014/07/07 DOTA
详解Python的Django框架中的Cookie相关处理
2015/07/22 Python
python监控文件或目录变化
2016/06/07 Python
详解Django中间件的5种自定义方法
2018/07/26 Python
python读写csv文件实例代码
2019/07/05 Python
解决Python计算矩阵乘向量,矩阵乘实数的一些小错误
2019/08/26 Python
使用python制作一个解压缩软件
2019/11/13 Python
在django中自定义字段Field详解
2019/12/03 Python
python3.8下载及安装步骤详解
2020/01/15 Python
python 双循环遍历list 变量判断代码
2020/05/04 Python
澳大利亚领先的在线机械五金、园艺和存储专家:Edisons
2018/03/24 全球购物
智能电子应届生求职信
2013/11/10 职场文书
公司部门司机岗位职责
2014/01/03 职场文书
教师节倡议书
2014/08/30 职场文书
高校师德师风自我剖析材料
2014/09/29 职场文书
租车协议书范本2014
2014/11/17 职场文书
酒桌上的开场白
2015/06/01 职场文书
售房协议书范本
2015/08/11 职场文书
Python实现Matplotlib,Seaborn动态数据图
2022/05/06 Python