1 图形验证码接口设计

将后端⽣成的图⽚验证码存储在redis数据库2号库。
结构:
- {'img_uuid':'0594'}
1.1 创建验证码⼦应⽤
$ cd apps
$ python ../../manage.py startapp verifications
# 注册新应⽤
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'userapp',
'newsapp',
'verifications',
]
1.2 图形验证码接⼝设计
1.2.1 请求⽅式
| 选项 | ⽅案 |
| 请求⽅法 | GET |
| 请求地址 1 | /imgcodes/(?P[\w-]+)/ |
1.2.2 请求参数:路径参数
| 参数名 | 类型 | 是否必传 | 说明 |
| uuid | string | 是 | 唯⼀编号 |
1.2.3 响应结果 图⽚验证码格式:image/png
1.3 图形验证码接⼝定义
1.3.1 图形验证码视图
# views.py视图⽂件
class ImageCode(View):
def get(self, request, uuid):
pass
1.3.2 配置路由
# 项⽬根路由
re_path('^', include(('verifications.urls', 'verifications',),
namespace='verify')),
# ⼦路由
re_path('^image_code/(?P<uuid>[\w-]+)/$', views.ImageCode.as_view())
2 图片验证码后端逻辑
2.1 配置Redis数据库
# 配置redis数据库专⻔存储验证码
"verify_code": { # 验证码
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://192.168.1.6:6379/2",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
2.2 安装模块
pip install pillow
pip install captcha
2.3 图⽚验证码视图
# constants.py⽂件内容
# 图⽚验证码有效期,单位:秒
IMAGE_CODE_REDIS_EXPIRES = 300
# views.py视图⽂件
from captcha.image import ImageCaptcha
from django_redis import get_redis_connection
from newsdemo.apps.verifications import constants
class ImageCode(View):
def get(self, request, uuid):
# 随机⽣成四位数字
seeds = string.digits
random_str = random.choices(seeds, k=4)
imgcode = "".join(random_str)
# ⽣成图⽚验证码
img = ImageCaptcha().generate(chars=imgcode)
# 保存图⽚验证码到redis
redis_conn = get_redis_connection('verify_code')
redis_conn.setex('img_%s' % uuid,
constants.IMAGE_CODE_REDIS_EXPIRES, imgcode)
return http.HttpResponse(img, content_type='image/png')
3 图片验证码前端逻辑
3.1 Vue实现图形验证码展示
3.1.1 register.js
mounted(){
// ⽣成图形验证码
this.generate_i

最低0.47元/天 解锁文章
3754

被折叠的 条评论
为什么被折叠?



