栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

图片验证码实现流程

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

图片验证码实现流程

图片验证码

  1. 配置图片包
  2. 生成图片验证码
  3. 发送图片验证码
  4. 效验图片验证码
  5. 前端图片验证码配置

 

1. syl/settings.py中配置缓存
# 缓存配置
CACHES = {
    # django存缓默认位置,redis 0号库
    # default: 连接名称
    "default": {  
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/0",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    },
    # django session存 reidis 1 号库(现在基本不需要使用)
    "session": {  
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    },
    # 图形验证码,存redis 2号库
    "img_code": {  
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/2",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}

# 配置session使用redis存储
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
# 配置session存储的位置: 使用cache中的 session配置
SESSION_CACHE_ALIAS = "session"
2.在verifications/views.py中使用

from django.http import HttpResponse, HttpResponseForbidden
from django.views import View
from django_redis import get_redis_connection
from libs.captcha.captcha import captcha


class ImageCodeView(View):
    def get(self, request):
        # 1.接收数据(uuid)
        uuid = request.GET.get('uuid')

        # 2.校验数据
        if not uuid:
            return HttpResponseForbidden('uuid无效')

        # 3.处理业务
        # 获取图片文本内容和图片二进制代码
        text, image = captcha.generate_captcha()   # text=GPMZ; image=图片

        # 4.把uuid和图片文本存入redis
        redis_client = get_redis_connection('img_code')  # 获取redis客户端
        
        # 5.写入redis(是字符串)
        redis_client.setex(uuid, 60 * 5, text)

        # 6.返回响应图片
        return HttpResponse(image, content_type='image/jpg')
 3.使用图片验证码登录views.py
class Login(Resource):
    """登录

    手机号/用户名登录
    1.获取数据:账号的唯一识别信息
    2.获取对应的账号信息3l
    3.验证密码是否正确
    密码
    """
    def post(self):
        parse = reqparse.RequestParser()
        parse.add_argument('uuid')
        # 这个是前段的输入图片验证数字
        parse.add_argument('img_code')
        args = parse.parse_args()
        uuid = args.get('uuid')
        img_code = args.get('img_code')
       # 存入redis
        res = redis.Redis()
        # 这个UUID 是存入redis数据库的 get(uuid)取出
        real_code = res.get(uuid)
        if not real_code:
            return {'code': 407, 'message': '验证码过期'}
        # 将decode() 的redis字符串解码
        real_code = real_code.decode()
        # lower转换字符串中所有大写字符为小写
        real_code = real_code.lower()
        code = img_code.lower()
        # redis中得到的跟前端传过来的是否一样
        if real_code != code:
            return {'code': 406, 'message': '验证码错误'}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1009392.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号