django生成简单的验证码

在这里将生成的图片验证码存入了reids,因为存session存在浏览器同源策略的问题,在取的时候取不出来,要解决同源策略的问题,可以在vue中的main.js文件中加入一行代码,不过我自己测试的时候加了这行代码也没用,还是获取不到session存的值

/* 浏览器同源策略,所以在后端拿不到session,加入这行代码就能拿到了 */
Axios.defaults.withCredentials = true;

  • views.py
# 导入图片库
# 绘画库
from PIL import ImageDraw
# 字体库
from PIL import ImageFont
# 图片库
from PIL import Image
# 随机库
import random
# 文件流
import io

# 定义验证码类
class MyCode(View):
    # 定义随机取色方法
    def get_random_color(self):
        R = random.randrange(255)
        G = random.randrange(255)
        B = random.randrange(255)
        return (R,G,B)
    def get(self,request):
        # 定义画布
        img_size = (120,50)
        # 定义图像,颜色种类,画布,背景颜色
        image = Image.new('RGB',img_size,'white')
        # 定义画笔
        draw = ImageDraw.Draw(image,'RGB')
        # 随机字符串的组成
        source = '01234567890asdfgw'
        # 定义容器
        code_str = ''
        for i in range(4):
            # 取色
            text_color = self.get_random_color()
            # 获取一个字符串
            tmp_num = random.randrange(len(source))
            # 获取字符集
            random_str = source[tmp_num]
            # 将随机生成的字符串放入定义的容器
            code_str += random_str
            # 将文字输入绘图
            draw.text((10+30*i,20),random_str,text_color)
        # 建立io文件流
        buf = io.BytesIO()
        # 保存内存中
        image.save(buf,'png')
        # 将验证码放入到session

        # 测试redis
        import redis
        # 建立连接
        r = redis.Redis('localhost')
        r.set('mykey',code_str)  # 根据key,value的形式存入

        # request.session['code'] = code_str
        # print(request.session['code'])
        # 返回文件流图像
        return HttpResponse(buf.getvalue(),'image/png')
#注册接口
class Register(APIView):
    def get(self,request):

        #接收参数
        username = request.GET.get('username','未收到用户名')
        password = request.GET.get('password','未收到密码')

        #获取随机验证码
        code = request.GET.get('code','未收到验证码')

        # #获取session中的验证码
        # mycode = request.session.get('code',None)
        # print(mycode)
        import redis
        r = redis.Redis('localhost')
        mycode = r.get('mykey')     # 在这里获取存入的mykey
        # 转码
        mycode = mycode.decode('utf-8')
        print(mycode)

        if code != mycode:
            res = {}
            res['code'] = 405
            res['message'] = '验证码输入错误'
            return Response(res)


        #排重操作
        user = User.objects.filter(username=username).first()
        if user:
            res = {}
            res['code'] = 405
            res['message'] = '用户已经存在'
            return Response(res)

        #进行入库逻辑 加密
        user = User(username=username,password=make_password(password),type=0)
        #保存
        user.save()

        #返回结果
        res = {}
        res['code'] = 200
        res['message'] = '注册成功'
        return Response(res)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值