使用django-simple-captcha实现登录验证码:

第一步:安装pillow依赖

pip install pillow  -i https://pypi.tuna.tsinghua.edu.cn/simple/

第二步:安装django-simple-captcha

pip install django-simple-captcha  -i https://pypi.tuna.tsinghua.edu.cn/simple/

第三步:注册django-simple-captcha

INSTALLED_APPS = [
'captcha',
]

  

第四步:配置urls.py

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

  

第五步:数据库迁移

python manage.py makemigrations

python manage.py migrate

第六步:在settings.py中配置验证码的相关信息

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

第七步:创建form表单

from django import forms
from captcha.fields import CaptchaField # 创建form表单
class LoginForm(forms.Form): '''
生成的captcha,包括三部分的内容:
1. 验证码的图片
2. 验证码的输入框
3. 验证码的答案【默认是隐藏的】
'''
captcha = CaptchaField()

  

第八步:定义视图函数views.py

# 处理验证码请求的视图函数 test
def test(request): # 如果是GET方法,则将form对象传递到页面中
# 传递的内容就是上面刚刚所说的三个部分的内容
if request.method == 'GET':
my_form = LoginForm()
return render(request, 'template.html', locals()) # 前端将验证码以POST方法提交过来后,进行校验
my_form = LoginForm(request.POST)
# 如果输入的验证码正确,则返回“通过”,反之,返回“不通过”
if my_form.is_valid():
return HttpResponse('通过')
else:
return HttpResponse('不通过')

  

第九步:模板HTML页面

<form action="" method="post">

    <!-- my_form.captcha中包含了前面说的三个内容 -->
{{ my_form.captcha }} <!-- 按钮需要自己添加 -->
<input type="submit"> </form>

渲染后的html页面如下:

--- 注:

(1)img为:验证码图片

(2)第二个input为:验证码输入框

(3)第一个input为:验证码答案【隐藏】


到此为止,就实现了基本的验证码功能, 
但是,如果想要刷新验证码,就必须刷新整个页面,
所以,需要使用Ajax来进行验证码的刷新,
那如何操作呢?

其实,只需要给图片添加一个点击事件,当点击图片时,向后端发起一个请求,让后端的某一个函数来处理请求,然后返回新的验证码图片地址和验证码答案即可,
最后再把前端的图片地址src替换为新的地址,和答案的value替换为新的value就可以了。

那怎么获取新的图片地址和答案呢?如下:
# 刷新验证码,处理Ajax请求
def refreshCode(request): # 获取:新的验证码答案
captcha_answer = CaptchaStore.generate_key()
# 获取:验证码答案对应的验证码图片地址
img_url = captcha_image_url(captcha_answer)

  

<!-- 给验证码图片修改新的地址 -->
$("img").attr("src",img_url); <!-- 给验证码答案修改新的value值 -->
$("#id_captcha_0").attr("value",captcha_answer);

  

到此,大功告成!!!


补充:

上面在settings.py中配置的是字母验证码,除此之外,还有加减乘除验证码,如下:

#加减乘除验证码
CAPTCHA_OUTPUT_FORMAT = '%(image)s %(text_field)s %(hidden_field)s '
CAPTCHA_NOISE_FUNCTIONS = ('captcha.helpers.noise_null',
'captcha.helpers.noise_arcs', # 线
'captcha.helpers.noise_dots', # 点
)
CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.random_char_challenge'
CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.math_challenge'
CAPTCHA_TIMEOUT = 1

  

另外,还有一些其他的配置信息,例如:

CAPTCHA_IMAGE_SIZE = (100,30)  #设置生成验证码图片的长和宽,单位为像素

CAPTCHA_OUTPUT_FORMAT = u'%(text_field)s %(image)s %(hidden_field)s' #设置输出的格式,该插件自动在模板中生成3个元素:一个验证码图片,一个验证码输入框、一个用于存放秘钥的隐藏输入框。可以在此根据需要调整其在模板中生成的先后顺序

CAPTCHA_FOREGROUND_COLOR = 'red'  #设置验证码图片前景色

CAPTCHA_BACKGROUND_COLOR = '#ffffff'  #设置验证码图片背景色

CAPTCHA_FONT_SIZE = '20'   #设置验证码图片中字体大小

CAPTCHA_FONT_PATH = 'fonts/Vera.ttf'   #设置字体样式,支持TTF等文件格式

CAPTCHA_LETTER_ROTATION = (-35,35)  #设置验证码中字母旋转的角度

CAPTCHA_NOISE_FUNCTIONS = ('captcha.helpers.noise_arcs','captcha.helpers.noise_dots',)  #是否添加干扰点和干扰线,当值为'captcha.helpers.noise_null'时,表示不添加干扰

CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.random_char_challenge' #设置验证码类型,其内置了三种验证码类型,还包括'captcha.helpers.math_challenge'(数字)和'captcha.helpers.word_challenge'(字典),除此之外,你还可以自己定义验证码生成函数

CAPTCHA_TIMEOUT = '5' #设置验证码的有效时间,单位为分钟

CAPTCHA_LENGTH = '4' #当验证码类型为字符型时,指定字母个数

  



  

django验证码插件 --- django-simple-captcha的更多相关文章

  1. Django Simple Captcha插件

    正文开始 先看官方描述 1.安装 打开控制台,输入如下: pip install django-simple-captcha 2.把APP添加到Django项目进入自己的Django项目,在setti ...

  2. Django学习系列之captcha 验证码插件

    安装部署 安装captcha pip3. install django-simple-captcha== settings.py中引入captcha INSTALLED_APPS = [ 'djang ...

  3. Django Simple Captcha的使用

    Django Simple Captcha的使用 1.下载Django Simple Captcha django-simple-captcha官方文档地址 http://django-simple- ...

  4. django入门6引入验证码插件 django-simple-captcha

    Django的验证码插件 https://github.com/mbi/django-simple-captcha 安装 (mxonline) C:\Users\ws>pip install  ...

  5. django 验证码(django-simple-captcha)

    django 验证码(django-simple-captcha) django-simple-captcha 官方文档(含基于modelForm的用法)  https://django-simple ...

  6. 探索Django验证码功能的实现 - DjangoStarter项目模板里的封装

    前言 依然是最近在做的这个项目,用Django做后端,App上提交信息的时候需要一个验证码来防止用户乱提交,正好我的「DjangoStarter」项目脚手架也有封装了验证码功能,不过我发现好像里面只是 ...

  7. django验证码django-simple-captha

    搭建网站很经常要用到验证码,django中就有这样的中间件django-simple-captha githup地址https://github.com/mbi/django-simple-captc ...

  8. django 验证码

    1.django 缓存设置 django的六种缓存(mysql+redis) :https://www.cnblogs.com/xiaonq/p/7978402.html#i6 1.1 安装Djang ...

  9. django验证码模块django-simple-captcha的使用介绍

    django-simple-captcha是django验证码模块,非常方便易用. 1.环境的准备: 在django项目环境中安装:pip install django-simple-captcha ...

  10. django 验证码实现

    django验证码的使用: 验证码的作用:用于人机识别. 验证码 ###验证码: def code_str(request): from PIL import Image from PIL impor ...

随机推荐

  1. 第十七篇:Django入门

    一.模板 二.BootStrap使用 三.web框架简绍 四.Django使用 五.创建APP 六.APP各目录功能 七.静态文件处理 八.模板语言 九.请求过程

  2. mysql 必知必会整理—数据汇总与分组[七]

    前言 简单整理一下数据汇总与分组 正文 我们经常需要汇总数据而不用把它们实际检索出来,为此MySQL提供了专门的函数.使用这些函数,MySQL查询可用于检索数据,以便分析和报表生成. 这种类型的检索例 ...

  3. 重新整理数据结构与算法(c#)——算法套路迪杰斯特拉算法[三十一]

    前言 迪杰斯特拉算法 是求最短路径方法的其中一种,这个有什么作用呢? 有一张图: 假设求G点到其他各点的最小路径. 是这样来的. 比如找到了和G点相连接所有点,ABED.这时候确定GA是一定是最短的, ...

  4. 实训篇-JavaScript-陶渊明去没去过桃花源

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  5. 前端使用 Konva 实现可视化设计器(5)

    关于第三章提到的 selectingNodesArea,在后续的实现中已经精简掉了. 而 transformer 的 dragBoundFunc 中的逻辑,也直接移动 transformer 的 dr ...

  6. E百科 | 第2期 扒一扒能加速互联网的QUIC协议

    简介: 众所周知,QUIC(Quick UDP Internet Connection)是谷歌制定的一种互联网传输层协议,它基于UDP传输层协议,同时兼具TCP.TLS.HTTP/2等协议的可靠性与安 ...

  7. 参与 Apache 顶级开源项目的 N 种方式,Apache Dubbo Samples SIG 成立!

    简介: 一说到参与开源项目贡献,一般大家的反应都是代码级别的贡献,总觉得我的代码被社区合并了,我才算一个贡献者,这是一个常见的错误认知.其实,在一个开源社区中有非常多的角色是 non-code con ...

  8. 技术干货 | 闲鱼:一个优秀的 Push 平台,需要经历怎样的前世今生

    ​简介: mPaaS 消息推送服务,快速集成多家厂商 Push 通道,有效提高用户留存率,提升用户体验. 编者荐语: 点击这里,了解 mPaaS 消息推送服务,快速集成多家厂商 Push 通道,有效提 ...

  9. 谁来拯救存量SGX1平台?又一个内核特性合并的血泪史

    ​简介: 今天的故事主角,是一个被称为Flexible Launch Control的SGX平台特性. ​ 前言 自从Intel内核开发人员Jarkko Sakkinen于2017年9月2日在inte ...

  10. [Go] 选择 Beego 的三个理由

    1. 项目支持角度较其它框架考虑的多一些,比如:目录结构的简单约定,内置项目配置读取,内置bee脚手架,热重载特性 等. (实际这些 feature 都可以找到 golang 专精的组件引入起来,效果 ...