Django拓展 图片验证码与redis简单实现

Django框架

拓展 图片验证码与redis简单实现

前言

需要额外安装下面两个库

pip install pillow
pip install django-redis

生成图形验证码源代码下载

redis配置

在项目的settings.py中配置redis数据库的连接

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/3",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    },
    "verification_code": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/4",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    },

}

redis://127.0.0.1:6379/3 其中6379是redis的端口号,3指的是第三个数据库
default,verification_code是自己命的名,在后文中使用

视图设置

from tool.verification import ValidCodeImg # 从本地导入我们已经写好的创建图片验证码的代码
from django_redis import get_redis_connection	# 导入redis数据库操作相关的宝
def verification_code(request,uuid_id):
    img_obj = ValidCodeImg('./tool/kumo.TTF')
    img_data,verification_str = img_obj.getValidCodeImg()
    try: # 避免发生异常
        img_conn = get_redis_connection('verification_code')
        img_conn.setex(str(uuid_id),60,verification_str) # 60指的是过期时间
    except:
        pass
    return HttpResponse(img_data,content_type='image/png') # 使用HttpResponse返回图片

结果展示

访问下面的url(先使用自己知道的一个uuid,便于观察)
http://127.0.0.1:8000/users/verification_code/57c807a3-cae8-42c6-b8a1-77dda700db29
我们可以看到网页返回了验证码的图片
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020030415195318.png
接下来我们再看看数据库中
在这里插入图片描述
这样便成功的达到了我们想要的目的
我们可以简单的修改一下原先img标签的src属性

<img src="{% url 'users:img_verification' '57c807a3-cae8-42c6-b8a1-77dda700db29'%}" alt="验证码" title="点击刷新">

如下图,我们所要的验证码就出现在了框框中,只需要简单的一些css样式处理即可
在这里插入图片描述
我们只做到了把图片显示出来,我们还需调整其css样式,以及点击切换的效果等,这些细节部分先不介绍,包括uuid的随机生成,需要结合前端的js代码来实现真正的图片验证码\

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章