任俊达
Articles17
Tags9
Categories0
怎样实现图片验证码

怎样实现图片验证码

利用django + vue实现图片验证码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import uuid
import random
from captcha.image import ImageCaptcha
from io import BytesIO
import redis

# 创建redis实例
r = redis.Redis(host='127.0.0.1', port=6379, password='',decode_responses=True)

# 封装一个函数,此函数用于生成图片验证码中的数字或字母
def random_code(num=4):
# num 是生成随机的数量 默认为4
str__a_z = [chr(num) for num in range(97, 123)]
str__A_Z = [chr(num) for num in range(65, 91)]
num_0_9 = [str(num) for num in range(0, 10)]
return ''.join(random.sample(str__a_z + str__A_Z + num_0_9, num))

# 此函数用于生成图片
def make_verify_image(code_str, uuid=None):
# 保存验证码到redis中,并且设置过期时间
r.set(uuid, code_str, 60)
# 生成验证码图片
img = ImageCaptcha().generate_image(code_str)
# 图片不会永久存储,只需要在内存中存储即可
# 把Image对象写入到IO流中
out = BytesIO() # 文件流对象打开在内存中
img.save(out, 'jpeg')
return out.getvalue()

# vue代码

generate_image_code()
{
axios({
url:this.base_url + 'userapp/uuid/',
}).then(res=>{
console.log(res.data)
this.uuid = res.data
this.image_code_url = this.base_url +"userapp/" + 'tupian/' + this.uuid +'/'
})
},
UUId()
{
axios({
url:this.base_url + 'userapp/uuid/',
}).then(res=>{
console.log(res.data)
this.uuid = res.data
this.image_code_url = this.base_url +"userapp/" + 'tupian/' + this.uuid +'/'
})
},
jc()
{
axios({
url:this.base_url + 'userapp/xy/',
method:'post',
data:{'uuid':this.uuid,'code':this.check}
}).then(res=>{
console.log(res.data)
if(res.data.code == 200)
{
this.check_img = true
this.error_image_code = res.data.msg
}
if(res.data.code==500)
{
this.check_img = false
this.error_image_code = res.data.msg
}
})
},

class GenerateUUID(APIView):
def get(self, request):
# 注册页面 挂载时请求接口 返回一个uuid
rt = random_code()
# print(rt)
return Response(str(uuid.uuid1()))


class Generateimg(APIView):
'''
返回前端验证码图片
'''

def get(self, request, uuid):
# 2.创建随机数
code = random_code()
# 3.生成验证码图片
image = make_verify_image(code, uuid)
# 4.返回图片
return HttpResponse(image, content_type='image/jpeg')
Author:任俊达
Link:https://renjunda.ren/lxb/49696.html
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可
×