python函数登录验证_python flask 用pillow实现登录验证码验证

1、安装pillow 并编写validatecode.pyfrom PIL import Image, ImageFont, ImageDraw, ImageFilter

import random

def validate_picture():

total = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012345789'

# 图片大小130x50

width = 130

height = 50

# 先生成一个新图片对象

im = Image.new('RGB', (width, height), 'white')

# 设置字体

font = ImageFont.truetype('C:\\Windows\\Fonts\\Calibri.ttf', 50)

# font = ImageFont.load_default().font

# 创建draw对象

draw = ImageDraw.Draw(im)

str1 = ''

# 输入每一个文字

for item in range(5):

text = random.choice(total)

str1 += text

draw.text((5+random.randint(4, 7)+20*item, 5+random.randint(3, 7)), text=text, fill='blue', font=font)

# 划几根干扰线

for num in range(8):

x1 = random.randint(0, width/2)

y1 = random.randint(0, height/2)

x2 = random.randint(0, width)

y2 = random.randint(height/2, height)

draw.line(((x1, y1), (x2, y2)), fill='black', width=1)

# 模糊下,加个滤镜

im = im.filter(ImageFilter.FIND_EDGES)

return im, str1

if __name__ == '__main__':

im, str1 = validate_picture()

print(str1)

2、编写view 函数@admin.route('/login/code/')

def get_code():

image, str1 = validate_picture()

# 讲验证码图片以二进制形式写入内存,防止图片都放在文件夹中,占用磁盘空间

buf = BytesIO()

image.save(buf, 'jpeg')

buf_str = buf.getvalue()

# 把二进制作为response发回前端,并设置头部字段

response = make_response(buf_str)

response.headers['Content-Type'] = 'image/gif'

# 验证码字符串存储在seesion中

session['image'] = str1

return response

3、html模板部分

管理员登陆

{% for msg in get_flashed_messages() %}

{{ msg }}

{% endfor %}

{{ form.csrf_token }}

{{ form.name.label }}:

{{ form.name }}

{% for err in form.name.errors %}

{{ err }}

{% endfor %}

{{ form.pwd.label }}:

{{ form.pwd }}

{% for err in form.pwd.errors %}

{{ err }}

{% endfor %}

{{ form.verify_code.label }}:

{{ form.verify_code }}

                

border="0" class="verifyimg"/>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值