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 相关文章推荐
haskell实现多线程服务器实例代码
Nov 26 Python
python读文件逐行处理的示例代码分享
Dec 27 Python
Python列表(list)常用操作方法小结
Feb 02 Python
栈和队列数据结构的基本概念及其相关的Python实现
Aug 24 Python
Python3实战之爬虫抓取网易云音乐的热门评论
Oct 09 Python
Python爬虫通过替换http request header来欺骗浏览器实现登录功能
Jan 07 Python
200 行python 代码实现 2048 游戏
Jan 12 Python
Django实现学生管理系统
Feb 26 Python
python 自动轨迹绘制的实例代码
Jul 05 Python
Python编程快速上手——PDF文件操作案例分析
Feb 28 Python
keras:model.compile损失函数的用法
Jul 01 Python
python可视化 matplotlib画图使用colorbar工具自定义颜色
Dec 07 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 文件上传后端处理实用技巧方法
2017/01/06 PHP
PHP token验证生成原理实例分析
2019/06/05 PHP
laravel 实现根据字段不同值做不同查询
2019/10/23 PHP
通过jQuery源码学习javascript(三)
2012/12/27 Javascript
jQuery实现随意改变div任意属性的名称和值(部分原生js实现)
2013/05/28 Javascript
JS 获取select(多选下拉)中所选值的示例代码
2013/08/02 Javascript
轻松实现JavaScript图片切换
2016/01/12 Javascript
基于bootstrap按钮式下拉菜单组件的搜索建议插件
2017/03/25 Javascript
js+html5实现页面可刷新的倒计时效果
2017/07/15 Javascript
解决Mac node版本升级失败的问题
2018/05/16 Javascript
通过jquery toggleClass()属性制作文章段落更改背景颜色
2018/05/21 jQuery
layui-table获得当前行的上/下一行数据的例子
2019/09/24 Javascript
js实现无缝轮播图
2020/03/09 Javascript
javascript实现点击产生随机图形
2021/01/25 Javascript
python调用cmd复制文件代码分享
2013/12/27 Python
python连接mysql数据库示例(做增删改操作)
2013/12/31 Python
windows下安装Python和pip终极图文教程
2017/03/05 Python
解决PyCharm中光标变粗的问题
2017/08/05 Python
Python数据结构之栈、队列的实现代码分享
2017/12/04 Python
centos 安装python3.6环境并配置虚拟环境的详细教程
2018/02/22 Python
python 通过可变参数计算n个数的乘积方法
2019/06/13 Python
python实现tail实时查看服务器日志示例
2019/12/24 Python
Python面向对象封装操作案例详解
2019/12/31 Python
python对Excel的读取的示例代码
2020/02/14 Python
python和php哪个更适合写爬虫
2020/06/22 Python
Python列表的深复制和浅复制示例详解
2021/02/12 Python
.NET是怎么支持多种语言的
2015/02/24 面试题
银行门卫岗位职责
2013/12/29 职场文书
成考报名单位证明范本
2014/01/16 职场文书
个人四风问题对照检查材料
2014/10/01 职场文书
医院财务人员岗位职责
2015/04/14 职场文书
电信营业员岗位职责
2015/04/14 职场文书
拔河比赛队名及霸气口号
2015/12/24 职场文书
pytest配置文件pytest.ini的详细使用
2021/04/17 Python
pytorch 中nn.Dropout的使用说明
2021/05/20 Python
ant design charts 获取后端接口数据展示
2022/05/25 Javascript