变量的作用于在函数体内放大到全局
今天在写一个验证码刷新的东西,发现我原来的代码又一个bug,就是点击可以有效的更新redis数据,但是如果时整页刷新,就会实效,这时因为用的js实现的,后来我发现用Python 的一个特性更好的解决此事。
废话不多说,直接上成品代码
import time
timestamp = ''
def create_captcha_fix(self):
"""
在函数体内 global 声明 后的timestamp 变成了全剧变量,可以修改 timestamp的值
从而达到第一次运行是pre_code 为空的效果,当被执行第一遍时 便可以赋值
在执行第二遍时就可以确认上一次的值时多少
:param self:
:return:
"""
global timestamp
result = int(round(time.time()*1000)) # 将时间戳转换为13位,默认的有小数点
pre_code = timestamp
timestamp = result
if pre_code is not None:
self.redis.delete("captcha:%s" % pre_code)
text, img = captcha.create_captcha()
self.redis.setex("captcha:%s" % result, text, 120)
return img
原有的js代码如下:
var code = '';
function get_image_code() {
var d = new Date().getTime();
var pre_code = code;
code = d;
$(".get_image_code").attr("src", "/captcha/" + pre_code + "/" + code);
$("#code").attr("value", code);
}
$(document).ready(function () {
get_image_code()
})
参考文献
参考链接:
为了更好的发扬知识共享精神,把思路来源的地址也贴上,往后余生,都将会把有贡献的人的文章地址附上