django-simple-captcha 验证码模块的小结

一、引言 

        官方文档:django-simple-captcha

        本博客谈不上深度,算是笔记和一些探索经验。主要是遇到了一个实际问题,在使用django-simple-captcha模块的时候,官网推荐使用django表单的形式去添加,django表单确实很方便,但是对于简单项目或者只需要django-simple-captcha模块的时候也没有太多的文档具体说明,这篇博客就说一下怎么单独使用django-simple-captcha模块。

        目标:实现手动创建验证码和前端显示,后台手动验证,ajax请求。

二、流程

1)安装 django-simple-captcha

pip install django-simple-captcha

2)注册captcha

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'captcha',
]

也可以个性化定制,在 settings.py中添加如下代码,详情参考官方文档:

# 设置 captcha 图片大小
CAPTCHA_IMAGE_SIZE = (80, 45)
# 字符个数
CAPTCHA_LENGTH = 4
# 超时(minutes)
CAPTCHA_TIMEOUT = 1

3)执行数据迁移,生成数据表 captcha_captchastore

python manage.py migrate

4)添加路由

urlpatterns = [
    path('admin/', admin.site.urls),
    # 图片验证码 路由
    path('captcha/', include('captcha.urls'))
]

再添加ajax刷新请求的二级路由,ajxa请求地址: captcha/refresh_captcha/

path('refresh_captcha/', views.refresh_captcha),    # 刷新验证码,ajax

本次django使用的是2.1.1版本,路由的写法可能有点不同,原理一样。

5)在views.py中添加代码,因为在我的项目中,设计到代码的复用问题,所以我创建验证码和验证单独做成函数

# 验证码需要导入的模块
from captcha.models import CaptchaStore
from captcha.helpers import captcha_image_url

# 创建验证码
def captcha():
    # 验证码,第一次请求
    hashkey = CaptchaStore.generate_key()
    image_url = captcha_image_url(hashkey)
    captcha = {'hashkey': hashkey, 'image_url': image_url}
    return captcha

# 验证验证码
def jarge_captcha(captchaStr, captchaHashkey):
    if captchaStr and captchaHashkey:
        try:
            # 获取根据hashkey获取数据库中的response值
            get_captcha = CaptchaStore.objects.get(hashkey=captchaHashkey) 
            # 如果验证码匹配
            if get_captcha.response == captchaStr.lower():  
                return True
        except:
            return False
    else:
        return False

6)ajax请求,settings.py 文件中

# 刷新验证码
# path: /ims/refresh_captcha
import json
def refresh_captcha(request):
    return HttpResponse(json.dumps(captcha()), content_type='application/json')

前端页面:

点击换一张

前端页面显示图片采用 src="{{captcha.image_url}}"来获取:  

三、原理

django-simple-captcha 验证码模块的小结_第1张图片

 

你可能感兴趣的:(django学习)