这里我用的是python3.6+Flask。实现一个登录时的验证码,点击通过Ajax的方式获取后台传来的二进制数据
# classmethod 修饰符对应的函数不需要实例化,不需要 self 参数, # 但第一个参数需要是表示自身类的 cls 参数,可以来调用类的属性,类的方法,实例化对象等。 # 画线条,开始 结束点 线条颜色 线条宽度 # 起始颜色 最终颜色 # 按范围生成随机输R G B # 用来随机生成一个字符串(包括英文和数字) # 验证码图片的宽和高 # 验证码的字体 随机产生字体 字体大小 # 随机生成4为字符串 # 填充字符串 x y坐标 文本 字体 字体颜色 # 绘制干扰线 绘制多少条干扰线
import base64 # Base64是一种任意二进制到文本字符串的编码方法,常用于在URL、Cookie、网页中传输少量二进制数据。 # 获取验证码图片,和验证码值
视图函数中我们需要把二进制数据进行编码,这里python2和python3可以有点区别,或者是我生成的图片二进制数据有和别的有点区别,我打印出来的 base64.b64encode(bur_str) 是由 b' ' 所包括的,就如下图所示
这样的话就导致网页上显示不了图片,但是去掉了 b' ' 就能正常显示图片了,所以我在视图函数中将其转换为字符串,然后切片去掉两边的单引号,最后再返回到HTML中去,
<!--验证码显示区域,点击验证码进行更新-->
使用jQuery中的$.post()方法也可以实现,代码很简单,js中点击图片则就会触发Ajax,然后post请求,获取数据,使用jQuery的attr()方法替换对应img标签的src属性,这样图片就可以显示在页面中了,
这里需要注意的是,如果你Ajax获取的数据不是乱码而是正常的数据,但是就是不显示图片,你就得去看看img标签src属性是否是正确,像我就出现了上面 那样的,图片数据被 b' '
包括 然后再被双引号包括,这样就导致了显示不了图片
有时候我们需要动态的将图片的二进制在页面上进行显示,如我们需要弄一个验证码的功能,那么如果我们的验证码的图片在后台得到的是该图片的二进制,那么当我们需要在页面上点击一个按钮利用ajax进行切换的时候,如果在后台直接返回的是该图片的二进制,那么该图片是无法进行显示的。
使用ajax请求,如果仅仅返回图片的二进制然后把它传给img的src是不能的,目前的方法是把图片的二进制进行base64编码,
base64编码后的内容,这样就可以使用后台直接利用图片的二进制进行图片的显示了
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。