生成验证码图片的第三方包——captcha

一、准备

1、在Django工程的apps中,新建子应用verifications ,里面新建包libs,存放生成图片验证码的扩展包captcha

在这里插入图片描述

2、安装Pillow的图片库

添加captcha完成后,如果直接使用会报错:
报错原因:captcha 框架, 需要依赖 Pillow 这个包
在虚拟环境–安装 Python 处理图片的库 Pillow:

pip  install  Pillow  -i https://pypi.tuna.tsinghua.edu.cn/simple

captcha 这个框架中有一个generate_captcha( ) 函数, 调用这个函数, 可以同时生成一个图片和对应内容的文字信息(验证码):

  • 使用示例:
    # text 文本验证码
    # image 验证码图片二进制流
    text, image = captcha.generate_captcha()

    print('验证码的内容是:', text)

    # 将验证码图片二进制流 存入图片
    with open('demo.png', 'wb') as f:
        f.write(image)
3、图片验证码有时效性-选用redis数据库存储

在Django的配置文件中配置 Redis 的 2号库——存储图片验证码数据

    # 验证码信息: 存到 2 号库
    "verify_code": {  
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/2",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    },

二、接口实现

逻辑分析:
在这里插入图片描述

1、请求方式

选项方案
请求方法get
请求地址image_codes/(?P[\w-]+)/

2、请求参数:路径参数

参数名类型是否必传说明
uuidstring唯一编号

3、响应结果: image / jpg在这里插入图片描述

知识点:

redis_conn.setex('key', '过期时间', 'value')

接口视图代码实现:

from django.views import View
from django  import http
from django_redis import get_redis_connection
from apps.verifications.libs.captcha.captcha import captcha

class ImageCodeView(View):
    """图形验证码
    GET http://www.meiduo.site:8000/image_codes/550e8400-e29b-41d4-a716-446655440000/
    """

    def get(self, request, uuid):
        """
        实现图形验证码逻辑
        :param uuid: UUID
        :return: image/jpg
        """
        # 生成图形验证码
        # text:验证码; image:验证码的图形(字节数据)
        text, image = captcha.generate_captcha()

        # 保存图形验证码
        # 使用配置的redis数据库的别名,创建连接到redis的对象
        redis_conn = get_redis_connection('verify_code')
        # 使用连接到redis的对象去操作数据存储到redis
        # redis_conn.set('key', 'value') # 因为没有有效期
        # 图形验证码必须要有有效期的:美多商城的设计是300秒有效期
        # redis_conn.setex('key', '过期时间', 'value')
        redis_conn.setex('img_%s' % uuid, 300, text)

        # 响应图形验证码: image/jpg
        return http.HttpResponse(image, content_type='image/jpg')
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值