一、原理图
将后端?成的图?验证码存储在redis数据库2号库
结构:{‘img_uuid’:‘0594’}
二、创建验证码?应?
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、配置路由 主路由
urlpatterns = [
path('admin/', admin.site.urls),
re_path('^',include('userapp.urls')),
re_path('^',include(('newsapp.urls','newsapp'),namespace='newsapp')),
re_path('^',include(('verifications.urls','verifications'),namespace='verifications'))
]
子路由
from django.urls import path,re_path
from . import views
urlpatterns=[
re_path('^imgcodes/(?P<uuid>[\w-]+)/$',views.ImgcodeView.as_view()),
]
2、配置redis数据库专?存储验证码(之前已经配置完成) 3、安装模块
pip install pillow
pip install captcha
4、创建视图 短信验证码实现步骤 a、随机生成验证码的字符串(4位数值类型) b、根据生成的字符串,创建图片验证码资源 c、将验证码字符串保存到redis数据库的2号库中 d、将图形验证码资源返回前端
import django_redis
from django.shortcuts import render
from django.views.generic.base import View
import random,string
from captcha.image import ImageCaptcha
from mgproject.mgproject.utils.constants import IMAGE_CODE_REDIS_EXPIRES
from django.http import HttpResponse
class ImgcodeView(View):
def get(self,request,uuid):
'''
获取图片验证码资源
:param request:
:return:
'''
seed=string.digits
r=random.choices(seed,k=4)
imgcode_str=''.join(r)
imgcode=ImageCaptcha().generate(chars=imgcode_str)
redis_conn=django_redis.get_redis_connection('verify_code')
redis_conn.setex('img_{}'.format(uuid),IMAGE_CODE_REDIS_EXPIRES,imgcode_str)
return HttpResponse(imgcode,type='image/png')
五、Vue实现图形验证码展示:
1、register.js
mounted(){
this.generate_imgcode();
},
methods:{
generate_imgcode:function(){
this.uuid = generateUUID();
this.imgcode_url = '/imgcodes/'+this.uuid+'/';
},
...
2、register.html
<p class="form-row form-row-wide">
<input style="width: 250px;" v-model="imgcode" placeholder="图片验证码" @blur="check_imgcode" name="imgcode" type="text" class="input-text" >
<img style="height: 40px;float: right;" :src="imgcode_url">
<span class="error-tip" v-show="error_imgcode">${error_imgcode_msg}</span>
</p>
3.图形验证码展示和存储效果 4、redis数据库中存储图形验证码
六、Vue实现图形验证码校验
1、register.html
<p class="form-row form-row-wide">
<input style="width: 250px;" v-model="imgcode" placeholder="图片验证码" @blur="check_imgcode" name="imgcode" type="text" class="input-text" >
<img style="height: 40px;float: right;" :src="imgcode_url">
<span class="error-tip" v-show="error_imgcode">${error_imgcode_msg}</span>
</p>
2、register.js
check_imgcode:function(){
if(!this.imgcode){
this.error_imgcode_msg = '图片验证码不能为空!'
this.error_imgcode = true;
}else{
this.error_imgcode = false;
}
},
3、校验效果
知识点: string.digits:随机生成0-9的字符串 random.choices(seed,k=4):生成4个值的列表 imgcode=ImageCaptcha().generate(chars=imgcode_str):根据数值,创建图片验证码资源
|