django验证码模块django-simple-captcha的使用介绍
django-simple-captcha是django验证码模块,非常方便易用。
1、环境的准备:
在django项目环境中安装:pip install django-simple-captcha
django-simple-captcha官方文档地址:http://django-simple-captcha.readthedocs.io/en/latest/
2、配置settings.py:
# 注册app
INSTALLED_APPS = [
...,
'captcha',
]
# django_simple_captcha 验证码配置其他配置项查看文档
# 默认格式
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', # 点
)
# 图片中的文字为随机英文字母,如 mdsh
# CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.random_char_challenge'
# 图片中的文字为数字表达式,如2+2=
CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.math_challenge'
# 超时(minutes)
CAPTCHA_TIMEOUT = 1
执行migrate命令,生成CaptchaStore表,表中主要有chalenge,response,hashkey三个字段,分别存放验证码、验证码的值、key。
3、配置urls.py:
urlpatterns = [
path(r'^captcha/', include('captcha.urls')), # 验证码url, 内部使用了路由分发
path(r'^login/', views.login, name='login'), # 登录url
]
4、配置form.py:
from django import forms
from captcha.fields import CaptchaField class CaptachTestForm(forms.Form):
username=forms.CharField(label='username')
password=forms.CharField(label='password',widget=forms.PasswordInput)
captcha=CaptchaField()
form中captcha的html代码为:
<tr><th><label for="id_captcha_1">Captcha:</label></th><td>
<img src="/captcha/image/496c83bf8bf85c313894e27797205b074cd9c263/" alt="captcha" class="captcha" /> <input autocapitalize="off" autocomplete="off" autocorrect="off" spellcheck="false" id="id_captcha_1" name="captcha_1" type="text" />
<input id="id_captcha_0" name="captcha_0" type="hidden" value="496c83bf8bf85c313894e27797205b074cd9c263" />
</td></tr>
分别为验证码图片、验证码input框、key值的隐藏input框,即通过返回到后台的key值到数据表CaptchaStore中查找验证码的reponse值进行验证。
5、配置views.py:
from django.shortcuts import render
from django.contrib.auth.models import User
from django.contrib.auth import login,authenticate
from django.http import JsonResponse
from captcha.models import CaptchaStore
from captcha.helpers import captcha_image_url
from .forms import CaptachTestForm def loginView(request):
# hashkey验证码生成的秘钥,image_url验证码的图片地址
hashkey = CaptchaStore.generate_key()
image_url = captcha_image_url(hashkey)
if request.method=='POST':
form=CaptachTestForm(request.POST)
if form.is_valid():
username=form.cleaned_data['username']
password=form.cleaned_data['password']
if User.objects.filter(username=username):
user=authenticate(username=username,password=password)
if user:
if user.is_active:
login(request,user)
tips='login success'
return render(request,'homePage.html')
else:
tips='the auth is wrongs,please input again...'
else:
tips='the username is not found,please to registe...'
else:
form=CaptachTestForm()
return render(request,'account/loginpage.html', locals()) def ajax_val(request):
if request.is_ajax():
r=request.GET['response']
h=request.GET['hashkey']
cs=CaptchaStore.objects.filter(response=r,hashkey=h)
if cs:
json_data={'status':1}
else:
json_data={'status':0}
return JsonResponse(json_data)
else:
json_data={'status':0}
return JsonResponse(json_data)
6、html 模板中显示验证码
<div class="form-group">
<label class="col-md-5 control-label" >captcha</label>
<div class="col-md-2 text-left"> <!-- {{ form.captcha }} </div> -->
<input autocomplete="off" id="id_captcha_1" name="captcha_1" type="text" style="width:80px;height: 28px">
<img src="{{ image_url}}" alt="captcha" class="captcha">
<input id="id_captcha_0" name="captcha_0" type="hidden" value="{{ hashkey }}"> </div>
</div>
在模板中加入js代码,使用ajax刷新验证码
<script>
$(function (){
$('.captcha').click(function (){
// console.log('click');
$.getJSON("/captcha/refresh/",function (result){
$('.captcha').attr('src',result['image_url']);
$('#id_captcha_0').val(result['key'])
})
});
$('#id_captcha_1').blur(function (){
json_data={
'response':$('#id_captcha_1').val(),
'hashkey':$('#id_captcha_0').val()
}
$.getJSON('/account/ajax_val',json_data,function (data){
$('#captcha_status').remove()
if(data['status']){
$('#id_captcha_1').after('<span id="captcha_status">*验证码正确</span>')
}else {
$('#id_captcha_1').after('<span id="captcha_status">*验证码错误</span>')
}
});
});
});
</script>
7、使用效果:

8、小结:
django-simple-captcha在数据库生成数据表CaptchaStore,设立chalenge,response,hashkey三个字段,分别存放验证码、验证码的值、key。
froms.py设置captcha字段,forms中的html代码中有三个标签,分别是img、验证码的input、key的input。通过key查找response值验证验证码。
可以参考https://www.cnblogs.com/the3times/p/13124453.html,此文介绍的较为详细。
django验证码模块django-simple-captcha的使用介绍的更多相关文章
- Django Simple Captcha插件
正文开始 先看官方描述 1.安装 打开控制台,输入如下: pip install django-simple-captcha 2.把APP添加到Django项目进入自己的Django项目,在setti ...
- Django Simple Captcha的使用
Django Simple Captcha的使用 1.下载Django Simple Captcha django-simple-captcha官方文档地址 http://django-simple- ...
- 探索Django验证码功能的实现 - DjangoStarter项目模板里的封装
前言 依然是最近在做的这个项目,用Django做后端,App上提交信息的时候需要一个验证码来防止用户乱提交,正好我的「DjangoStarter」项目脚手架也有封装了验证码功能,不过我发现好像里面只是 ...
- django 验证码
1.django 缓存设置 django的六种缓存(mysql+redis) :https://www.cnblogs.com/xiaonq/p/7978402.html#i6 1.1 安装Djang ...
- django日志,django-crontab,django邮件模块
django 日志 四大块,格式器,过滤器,处理器,日志管理器 LOGGING = { 'version': 1, 'disable_existing_loggers': True, 'formatt ...
- django验证码django-simple-captha
搭建网站很经常要用到验证码,django中就有这样的中间件django-simple-captha githup地址https://github.com/mbi/django-simple-captc ...
- django 验证码(django-simple-captcha)
django 验证码(django-simple-captcha) django-simple-captcha 官方文档(含基于modelForm的用法) https://django-simple ...
- Python Django 功能模块
Python Django模块 Django模块,是针对有django基础,对django功能进行模块化,方便下次使用. 一.注册模块 该注册采用邮箱验证,注册成功后会发送激活链接到邮箱. 邮箱验证参 ...
- Django学习之六:Django 常用模块导入记忆
Django 常用模块导入记忆 django相关 1. urls相关操作 from django.urls import path, re_path, include from django.urls ...
- Python第十三天 django 1.6 导入模板 定义数据模型 访问数据库 GET和POST方法 SimpleCMDB项目 urllib模块 urllib2模块 httplib模块 django和web服务器整合 wsgi模块 gunicorn模块
Python第十三天 django 1.6 导入模板 定义数据模型 访问数据库 GET和POST方法 SimpleCMDB项目 urllib模块 urllib2模块 ...
随机推荐
- Vulnhub:PowerGrid-1.0.1靶机
kali:192.168.111.111 靶机:192.168.111.182 信息收集 端口扫描 nmap -A -v -sV -T5 -p- --script=http-enum 192.168. ...
- [WinError 10061] 由于目标计算机积极拒绝,无法连接。- EnlightenGan运行
在测试EnlightenGan时,可视化结果保存出现问题. 原因:调用visdom可视化,需要先打开visdom python -m visdom.server
- QueryObject
1 package com.ygm.aa.page.qo; 2 3 import lombok.Getter; 4 import lombok.NoArgsConstructor; 5 import ...
- 开源 IM 系统 tinode 部署教程| WSL 环境
背景 我们的需求是在本地部署一套 IM 系统,选择 tinode.为便于后端启动,我们采用 WSL 环境,配合 docker 安装数据库,来启动 IM 应用. 解决 WSL 启动前端和后台服务 cmd ...
- Visual Studio 2017(vs2017)绿色便携版-北桃特供
原版的VisualStudio2017有几十G,安装起来特别慢,不少用户叫苦连天.该版本是精简过的vs2017,且简化了原来的安装程序,特别适用于教学.个人开发者.某些要求不高的企业. 该绿色便携版是 ...
- pytest框架增加log打印(包括pytest的执行结果、自定义的log信息)
前言: 之前同事在跑脚本的时候报错了,发现没法把需要的log信息打印出来,我这边定位问题比较麻烦,所以增加了log的打印.这个问题之前已经处理过了,本来以为是小问题,结果今天又要用到这个小技巧的时候居 ...
- USB从机主动断开连接
目录 在一些情况下,需要USB口的引脚复用成其他功能,比如说PB10.PB11要复用成定时器输出引脚:或者需要USB从机主动断开,类似某些杀毒软件带的"安全弹出",不过杀毒软件操作 ...
- 关于sqlsugar二级缓存
二级缓存 1.优点 (1).维护方便:SqlSugar的 二级缓存 支持单表和多表的 CRUD 自动缓存更新 ,减少了复杂的缓存KEY维护操作 (2).使用方便:可以直接在Queryable.With ...
- 1、docker 安装
1 准备三台linux服务器 2 docker安装 三台机器全部执行docker安装操作 2.1 移除以前docker相关包 sudo yum remove docker \ docker-clien ...
- 对SQL CTE的一点个人理解
/*执行顺序: 首先,执行按一.二,此时二输出的结果,可以理解为临时n 然后,按三.二.三.二循环执行 注意:,步骤三的where为递归终止条件,由于用的是substr函数.在最后一次递归的时候,如果 ...