flash变量就是闪存,一次性变量。用户为其赋值,在任意时刻使用之后,变量就会自动消失。适合在web开发中作为“错误提示”等使用。
知道原理了实际上就很好写程序了,flash变量核心其实就是:在获取值之后就删除之。
由于flash变量可能有多个,所以我可以用一个类似字典的类来保存,那么我就直接编写一个子类基础dict就好了。
flash变量应该是一个全局变量,所以需要保存为python全局变量或session中,我这里就保存在session里。
简单实现了这样的一个类:
class flash(dict):
def __init__(self, request):
dict.__init__(self)
self.request = request
def __getitem__(self, item):
item = "flash_%s" % item
if item in self.request.session:
value = self.request.session.get(item)
self.request.session.delete(item)
else:
value = ""
return value
def get(self, k, d = None):
return self.__getitem__(k)
def __delattr__(self, item):
item = "flash_%s" % item
self.request.session.delete(item)
def __setitem__(self, key, value):
key = "flash_%s" % key
self.request.session[key] = value
重写dict类的__getitem__方法,从session中获取了值后,就删除它。
重写__setitem__,将值保存在session中。
重写__delattr__,删除session。
基本就完全继承并重写了dict的大部分功能,原本的dict类已经消失了。
使用时,就直接把flash变量当做一个普通的dict去用就OK了。
本文始发于微信公众号(代码审计):Python Web开发 - 制作flash变量
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论