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简单网络编程示例【客户端与服务端】
May 26 Python
200 行python 代码实现 2048 游戏
Jan 12 Python
Python中pillow知识点学习
Apr 30 Python
Python操作word常见方法示例【win32com与docx模块】
Jul 17 Python
详解pandas库pd.read_excel操作读取excel文件参数整理与实例
Feb 17 Python
python自动发邮件总结及实例说明【推荐】
May 31 Python
python实现简单学生信息管理系统
Apr 09 Python
解析Python 偏函数用法全方位实现
Jun 26 Python
详细分析Python垃圾回收机制
Jul 01 Python
keras自动编码器实现系列之卷积自动编码器操作
Jul 03 Python
python统计mysql数据量变化并调用接口告警的示例代码
Sep 21 Python
Python如何利用Har文件进行遍历指定字典替换提交的数据详解
Nov 05 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实现Socket服务器的代码
2008/04/03 PHP
Thinkphp中的volist标签用法简介
2014/06/18 PHP
phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法
2014/07/19 PHP
thinkphp学习笔记之多表查询
2014/07/28 PHP
简单理解PHP的面向对象编程方式
2016/05/17 PHP
php 判断字符串编码是utf-8 或gb2312实例
2016/11/01 PHP
详解PHP使用日期时间处理器Carbon人性化显示时间
2017/08/10 PHP
laravel 验证错误信息到 blade模板的方法
2019/09/29 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
TP5多入口设置实例讲解
2020/12/15 PHP
jquery 操作DOM案例代码分享
2012/04/05 Javascript
jquery必须知道的一些常用特效方法及使用示例(整理)
2013/06/24 Javascript
js实现千分符和保留几位小数的简单实例
2016/08/01 Javascript
微信小程序之仿微信漂流瓶实例
2016/12/09 Javascript
简单实现jQuery级联菜单
2017/01/09 Javascript
Bootstrap里的文件分别代表什么意思及其引用方法
2017/05/01 Javascript
jQuery UI 实例讲解 - 日期选择器(Datepicker)
2017/09/18 jQuery
微信小程序版翻牌小游戏
2018/01/26 Javascript
详解vue中axios的封装
2018/07/18 Javascript
python中的__slots__使用示例
2015/02/26 Python
解决使用pycharm提交代码时冲突之后文件丢失找回的方法
2018/08/05 Python
Numpy一维线性插值函数的用法
2020/04/22 Python
python中使用input()函数获取用户输入值方式
2020/05/03 Python
基于python图书馆管理系统设计实例详解
2020/08/05 Python
html5使用Canvas绘图的使用方法
2017/11/21 HTML / CSS
Wedgwood美国官网:英国骨瓷,精美礼品及家居装饰
2018/02/17 全球购物
后勤园长自我鉴定
2013/10/17 职场文书
大学生职业生涯规划书范文
2014/01/04 职场文书
小学感恩节活动策划方案
2014/10/06 职场文书
2014年店长工作总结
2014/11/17 职场文书
2014年保密工作总结
2014/11/22 职场文书
2015年幼儿园班务工作总结
2015/05/12 职场文书
2015年英语教师工作总结
2015/05/20 职场文书
人间正道是沧桑观后感
2015/06/15 职场文书
Windows 11要来了?微软文档揭示Win11太阳谷 / Win10有两个不同版本
2021/11/21 数码科技
Nginx隐藏式跳转(浏览器URL跳转后保持不变)
2022/04/07 Servers