1、接口设计
1.1接口说明
条目 | 说明 |
---|---|
请求方式 | GET |
URL | /image_code/ |
参数格式 | 查询参数 |
1.2参数说明
参数名 | 类型 | 是否必须 | 描述 |
---|---|---|---|
rand | 字符串 | 否 | 随机浮点数字符串 |
注:避免被浏览器缓存
1.3返回数据
验证码图片
2、后端代码
views
import logging
from django.http import HttpResponse
from utils.captcha.captcha import captcha
#日志器
#在setting中设置的日志
logger = logging.getLogger('django')
#https://blog.youkuaiyun.com/fksfdh/article/details/98321663 中的5.配置日志器
def image_code_view(request):
'''
生成图像验证码
url:/image_code/
'''
#1、生成一个验证码图片,随机生成字符串,和图片(pip install pillpw)
#这个可以从网上找到,不用自己写
text,image = captcha.generate_captcha()
#2、在后端保存验证码
#保存到session中
requset.session['image_code'] = text
#设置过期时间
request.session.set_expiry(300)
#3、记录日志
logger.info('image code:{}'.format(text))
#4、返回验证码图片
return HttpResponse(content=image,content_type='image/jpg')
urls
from .import views
app_name = 'verification'
urlpatterns = [
path('image_code/',views.image_code_view,name='image_code')
]
主路由
from django/urls import path,include
urlpatterns = [
path('',include('verification.urls')),
]
因为是get请求,浏览器可能缓存路径,因此我们要加一个随机数来让浏览器认为是新的请求。
所以要在html点击图片中加入js。
点击验证码图片刷新的js代码如下:
$(function () {
#获取图像
let $img = $('.form-contain .form-item .captcha-graph-img img');
// 1.点击刷新图像验证码
$img.click(function () {
$img.attr('src', '/image_code/?rand=' + Math.random())
});
});
扩展:在django中session是默认保存在mysql中的:
想要修改session到redis中保存:
需要修改settings配置文件
# settings.py文件中指定redis配置
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/0",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
},
'session': {
'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION': 'redis://127.0.0.1:6379/1',
'OPTIONS': {
'CLIENT_CLASS': 'django_redis.client.DefaultClient',
}
},
}
# session存储缓存设置
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
SESSION_CACHE_ALIAS = 'session'