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
我们可以看到网页返回了验证码的图片
接下来我们再看看数据库中
这样便成功的达到了我们想要的目的
我们可以简单的修改一下原先img标签的src属性
<img src="{% url 'users:img_verification' '57c807a3-cae8-42c6-b8a1-77dda700db29'%}" alt="验证码" title="点击刷新">
如下图,我们所要的验证码就出现在了框框中,只需要简单的一些css样式处理即可
我们只做到了把图片显示出来,我们还需调整其css样式,以及点击切换的效果等,这些细节部分先不介绍,包括uuid的随机生成,需要结合前端的js代码来实现真正的图片验证码\