实现图片验证码的校验和发送手机验证码 django Day12
2018-12-26 18:29
786 查看
生成图片验证码:
[code]from PIL import Image, ImageDraw, ImageFont from django.utils.six import BytesIO import random from django_redis import get_redis_connection class ImgCodeView(View): def get(self, request, uuid): bgcolor = (random.randrange(20, 100), random.randrange( 20, 100), 255) width = 100 height = 25 # 创建画面对象 im = Image.new('RGB', (width, height), bgcolor) # 创建画笔对象 draw = ImageDraw.Draw(im) # 调用画笔的point()函数绘制噪点 for i in range(0, 100): xy = (random.randrange(0, width), random.randrange(0, height)) fill = (random.randrange(0, 255), 255, random.randrange(0, 255)) draw.point(xy, fill=fill) # 定义验证码的备选值 str1 = 'ABCD123EFGHIJK456LMNOPQRS789TUVWXYZ0' # 随机选取4个值作为验证码 rand_str = '' for i in range(0, 4): rand_str += str1[random.randrange(0, len(str1))] # 构造字体对象,ubuntu的字体路径为“/usr/share/fonts/truetype/freefont” font = ImageFont.truetype('FreeMono.ttf', 23) # 构造字体颜色 fontcolor = (255, random.randrange(0, 255), random.randrange(0, 255)) # 绘制4个字 draw.text((5, 2), rand_str[0], font=font, fill=fontcolor) draw.text((25, 2), rand_str[1], font=font, fill=fontcolor) draw.text((50, 2), rand_str[2], font=font, fill=fontcolor) draw.text((75, 2), rand_str[3], font=font, fill=fontcolor) # 释放画笔 del draw # 存入session,用于做进一步验证 request.session['verifycode'] = rand_str # 内存文件操作 buf = BytesIO() # 将图片保存在内存中,文件类型为png im.save(buf, 'png') print(rand_str) print(uuid) con = get_redis_connection() con.setex(name=uuid, time=3000, value=rand_str) # 将内存中的图片数据返回给客户端,MIME类型为图片png return HttpResponse(buf.getvalue(), 'image/png')
实现校验图片验证码功能的serializers.py文件:
[code]from rest_framework import serializers from django_redis import get_redis_connection class MsgCodeSerialize(serializers.Serializer): uuid = serializers.UUIDField() rand_str = serializers.CharField(max_length=4, min_length=4) def validate(self, data): print(data) uuid = str(data['uuid']) rand_str = data['rand_str'] rand_str = rand_str.upper() con = get_redis_connection() img_str = con.get(uuid) print('#' * 80) print(self.context['view'].kwargs['phone']) if not img_str: raise serializers.ValidationError('验证码不存在') elif rand_str != img_str.decode(): raise serializers.ValidationError('验证失败') return data
view中校验图片验证码和发送手机验证码(使用容联):
[code]from rest_framework.views import APIView import random from django_redis import get_redis_connection from django.http import HttpResponse, JsonResponse from .serializers import MsgCodeSerialize from shanghuishop.utils.yuntongxun.sms import CCP class MsgCodeView(APIView): def get(self, request, phone): # 校验验证码 # 127.0.0.1:8000/msg_code/{phone}/?uuid={uuid}&rand_str={rand_str} serialize = MsgCodeSerialize(data=request.query_params) serialize.is_valid(raise_exception=True) # 发送短信 # print(phone) alert = '' con = get_redis_connection() pipe_obj = con.pipeline() # 若是手机验证码已过期或不存在 if not con.get(phone): rand_num = random.randint(1000, 9999) ccp = CCP() ccp.send_template_sms(phone, [rand_num, 5], 1) con.setex(name=phone, time=3000, value=rand_num) pipe_obj.execute() alert = '已发送' # 若是手机验证码未过期 else: # print('#'*80) alert = '勿重复发送' return JsonResponse({'alert': alert})
相关文章推荐
- 发送手机验证码实现验证时间过期
- java调接口实现发送手机短信验证码功能,手机验证码,接口调用
- Java调用WebService接口实现发送手机短信验证码功能,java 手机验证码,WebService接口调用
- java调接口实现发送手机短信验证码功能,手机验证码,接口调用
- java调接口实现发送手机短信验证码功能,手机验证码,接口调用
- 实现手机发送验证码 进行验证
- C# Ajax 手机发送短信验证码 校验验证码 菜鸟级别实现方法
- Java调用WebService接口实现发送手机短信验证码功能,java 手机验证码,WebService接口调用
- Java调用WebService接口实现发送手机短信验证码功能,java 手机验证码,WebService接口调用
- Java调用WebService接口实现发送手机短信验证码功能,java 手机验证码,WebService接口调用
- java调接口实现发送手机短信验证码功能,手机验证码,接口调用
- Java调用WebService接口实现发送手机短信验证码功能,java 手机验证码,WebService接口调用
- Java调用WebService接口实现发送手机短信验证码功能,java 手机验证码,WebService接口调用
- C# Ajax 手机发送短信验证码 校验验证码 菜鸟级别实现方法
- Java调用WebService接口实现发送手机短信验证码功能,java 手机验证码,WebService接口调用
- 借助短信平台实现手机注册页面的验证吗发送检验功能
- jquery 实现 点击按钮后倒计时效果,多用于实现发送手机验证码、邮箱验证码
- jquery 实现 点击按钮后倒计时效果,多用于实现发送手机验证码、邮箱验证码
- jquery 实现 点击按钮后倒计时效果,多用于实现发送手机验证码
- django 中验证码登录验证的实现