from django.http import HttpResponse, JsonResponse
from django.shortcuts import render
from django.views import View
class ImageCodeView(View):
def get(self, request, uuid):
# 1接收路由中的uuid
# 2生成图片验证码和图片二进制
from libs.captcha.captcha import captcha
#text 是图片验证码的内容保存起来,image是图片二进制
text,image=captcha.generate_captcha()
# 通过redis把图片验证码保存起来
# 3.1进行redis的连接
from django_redis import get_redis_connection
redis_cli=get_redis_connection('code') #code就是setting文件保存session中的设置
# 3.2指令操作
redis_cli.setex(uuid,60,text)
# 4.返回图片二进制 content_ type=响应体薮据类型
# content type的语法形式是:大类/小类 以图片为列子
return HttpResponse(image,content_type='image/jpeg')
class SmsCodeView(View):
def get(self, request, mobile):
#1:获取请求参数
image_code=request.GET.get('image_code')
uuid=request.GET.get('image_code_id')
#2验证参数
if not all ([image_code,uuid]):
return JsonResponse({'code':400,'errmsg':'参数不全'})
#3验证图片
#3.1连接redis
from django_redis import get_redis_connection
redis_cli = get_redis_connection('code')
#3.2获取redis的数据
redis_image_code=redis_cli.get(uuid)
if redis_image_code is None:
return JsonResponse({'code': 400, 'errmsg': '验证码以过期'})
#3.3对比
if redis_image_code.decode().lower() !=image_code.lower():
return JsonResponse({'code': 400, 'errmsg': '验证码错误'})
#提取发送短信的标记
send_flag=redis_cli.get('send_flag_%s'%mobile)
if send_flag is None:
return JsonResponse({'code': 400, 'errmsg': '不要频繁发送短信'})
#4生成短信验证码
from random import randint
sms_code = '%06d' % randint(0, 999999)
#5保存短信验证码
redis_cli.setex(mobile,300,sms_code)
#添加一个有效期
redis_cli.setex('send_flag_%s'%mobile,60,1)
#6发送短信验证码
from libs.yuntongxun.sms import CCP
CCP().send_template_sms(mobile,[sms_code,5],1)
#7 返回响应
return JsonResponse({'code':0,'errmsg':'ok'})