djangoform表单使用验证码
8.1.安装captcha
直接安装:pip install django-simple-captcha
Django自动帮我们安装了相关的依赖库six、olefile和Pillow,其中的Pillow是大名鼎鼎的绘图模块。
注册captcha
在settings中,将‘captcha’注册到app列表里:
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'login',
'captcha',
]
captcha需要在数据库中建立自己的数据表,所以需要执行migrate命令生成数据表:
python manage.py migrate
8.2.添加url路由
根目录下的urls.py文件中增加captcha对应的网址:
- from django.conf.urls import url
 - from django.conf.urls import include
 - from django.contrib import admin
 - from login import views
 - urlpatterns = [
 - url(r'^admin/', admin.site.urls),
 - url(r'^index/', views.index),
 - url(r'^login/', views.login),
 - url(r'^register/', views.register),
 - url(r'^logout/', views.logout),
 - url(r'^captcha', include('captcha.urls')) # 增加这一行
 - ]
 
8.3.修改forms.py
如果上面都OK了,就可以直接在我们的forms.py文件中添加CaptchaField了。
- from django import forms
 - from captcha.fields import CaptchaField
 - class UserForm(forms.Form):
- username = forms.CharField(label="用户名", max_length=128, widget=forms.TextInput(attrs={'class': 'form-control'}))
 - password = forms.CharField(label="密码", max_length=256, widget=forms.PasswordInput(attrs={'class': 'form-control'}))
 - captcha = CaptchaField(label='验证码')
 
 
需要提前导入from captcha.fields import CaptchaField,然后就像写普通的form字段一样添加一个captcha字段就可以了!
8.4.修改login.html
由于我们前面是手动生成的form表单,所以还要修改一下,添加captcha的相关内容,如下所示:
- <form class='form-login' action="/login/" method="post">
 - <h2 class="text-center">欢迎登录</h2>
 - <div class="form-group">
 - {{ login_form.username.label_tag }}
 - {{ login_form.username}}
 - </div>
 - <div class="form-group">
 - {{ login_form.password.label_tag }}
 - {{ login_form.password }}
 - </div>
 - <div class="form-group">
 - {{ login_form.captcha.errors }}
 - {{ login_form.captcha.label_tag }}
 - {{ login_form.captcha }}
 - </div>
 - <button type="reset" class="btn btn-default pull-left">重置</button>
 - <button type="submit" class="btn btn-primary pull-right">提交</button>
 - </form>
 - </div>
 - </div> <!-- /container -->
 - {% endblock %}
 
这里额外增加了一条{{ login_form.captcha.errors }}用于明确指示用户,你的验证码不正确
对于刷新验证码
修改login.html:
<div class="form-group">
{{login_form.captcha.label_tag}}<a id="refesh">刷新</a>
<p>
{{login_form.captcha}}
{{login_form.captcha.errors}}</p> </div> JS:
//验证码动态刷新实现
$('#refesh').click(function () {
$.getJSON("/captcha/refresh/", function (result) {
$('.captcha').attr('src', result['image_url']);
$('#id_captcha_0').val(result['key'])
});
}); //后端返回验证失败后的动作
if('{{ status }}' == 'error'){
alert("验证失败,请重新登录!");
window.location.assign("/accounts/login/")
}
djangoform表单使用验证码的更多相关文章
- DedeCMS提交自定义表单加入验证码功能
		
织梦dedecms网站给自定义表单加dede模板自带验证码的方法. 有时候,我们因为需要给dede网站的自定义表单添加验证码,防止恶意填写表单提交. 我们可以用以下的方法来实现: 首先,我们要找到 / ...
 - Ajax实现提交表单时验证码自动验证(原创自Zjmainstay)
		
本文通过源码展示如何实现表单提交前,验证码先检测正确性,不正确则不提交表单,更新验证码. 1.前端代码 index.html <!DOCTYPE html> <html> &l ...
 - JavaWeb 之 重复提交表单和验证码相关的问题!
		
下面我们首先来说一下表单的重复提交问题,我们知道在真实的网络环境中可能受网速带宽的原因会造成页面中表单在提交的过程中出现网络的延迟等问题,从而造成多次提交的问题!下面我们就具体来分析一下造成表单提交的 ...
 - 用python模拟登录(解析cookie + 解析html + 表单提交 + 验证码识别 + excel读写 + 发送邮件)
		
老婆大人每个月都要上一个网站上去查数据,然后做报表. 为了减轻老婆大人的工作压力,所以我决定做个小程序,减轻我老婆的工作量. 准备工作 1.tesseract-ocr 这个工具用来识别验证码,非常好用 ...
 - Ajax提交表单时验证码自动验证 php后端验证码检测
		
本文通过源码展示如何实现表单提交前,验证码先检测正确性,不正确则不提交表单,更新验证码. 1.前端代码 index.html <!DOCTYPE html> <html> &l ...
 - django-form表单的提交
		
<form action="/blog/" method="get"> 如果runserver默认启用127.0.0.1:8000的话,且上面这个f ...
 - Django---form表单提交数据到数据库(普通方法+Django的form类)
		
目标: ①.初始form的简单应用 ②.使用Django的form组件完成新增一个帖子 方法一:普通方法 1.前端表单代码 <div> <form class="navba ...
 - python自动化之djangoform表单验证
		
djangoforms表单验证 创建个类,继承于 forms.form obj = FM(request.post) obj.is_valid() 如果验证没有问题会返回true,否则会返回false ...
 - Django-Form表单(验证、定制、错误信息、Select)
		
Django form 流程 1.创建类,继承form.Form 2.页面根据类的对象自动创建html标签 3.提交,request.POST 封装到类的对象里,obj=UserInf ...
 
随机推荐
- Python - Django - ORM 多对多操作
			
models.py: from django.db import models # 出版社 class Publisher(models.Model): id = models.AutoField(p ...
 - python那些事儿
			
一.探索python 1.尝试安装python3 https://www.python.org/downloads/mac-osx/ 2.问题 安装了3.7,但是python -V还显示2.7.10. ...
 - HTML中设置在浏览器中固定位置fixed定位
			
之前的博文 HTML布局排版之制作个人网站的文章列表,中链接到的文章本身,也需要返回到列表主页,可在每个文章页面加导航条,也可以只加个返回到列表主页的链接.刚开始是想在博文最下方,加个返回文章列表的链 ...
 - Ubuntu 18.04  使用标准Ubuntu 仓库进行自动化安装NVIDIA驱动
			
首先,检测你的NVIDIA显卡型号和推荐的驱动程序的模型.在命令行中输入如下命令: $ ubuntu-drivers devices == /sys/devices/pci0000:/::::00.0 ...
 - layui开关switch显示不全问题
			
先看效果: 开关显示不全,高度也不对称. 解决: 在所用到的html/jsp中自己加css .layui-form-switch { width: 52px; height: 23px; } 再看效果 ...
 - CSS float属性
			
表示向左浮动,比如多个div在一个页面上,默认情况是:一行一个div,但是只要在div的css中使用float:left,可以使一行有多个div,这样可以把网页划分成很多块,但是使用该属性会影响后面的 ...
 - poj3660(floyd最短路)
			
题目链接:https://vjudge.net/problem/POJ-3660 题意:给出一个有向图,n个结点,每个结点的权值为[1,n]中的一个独特数字,m条边,如果存在边a->b,说明a的 ...
 - 自然语言处理(简称NLP)
			
自然语言处理(简称NLP),是研究计算机处理人类语言的一门技术,包括: 1.句法语义分析:对于给定的句子,进行分词.词性标记.命名实体识别和链接.句法分析.语义角色识别和多义词消歧. 2.信息抽取:从 ...
 - [WinForm] - "更新 DataSet 应用程序集对象失败,Visual Studio 自动重启" 之解决
			
背景 在 WinForm 解决方案中,更新 DataSet 应用程序集对象失败,Visual Studio 自动重启. 试一试 1. 更新 .xsd 时打开对应的 .Designer.cs.2. 如果 ...
 - vue cli3 项目优化
			
vue-cli3 Prefetch (官网内容) <link rel="prefetch"> 是一种 resource hint,用来告诉浏览器在页面加载完成后,利用空 ...