8.1.安装captcha

直接安装:pip install django-simple-captcha

Django自动帮我们安装了相关的依赖库sixolefilePillow,其中的Pillow是大名鼎鼎的绘图模块。

注册captcha

在settings中,将‘captcha’注册到app列表里:

INSTALLED_APPS = [

'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对应的网址:

  1.  
    from django.conf.urls import url
  2.  
    from django.conf.urls import include
  3.  
    from django.contrib import admin
  4.  
    from login import views
  5.  
     
  6.  
    urlpatterns = [
  7.  
    url(r'^admin/', admin.site.urls),
  8.  
    url(r'^index/', views.index),
  9.  
    url(r'^login/', views.login),
  10.  
    url(r'^register/', views.register),
  11.  
    url(r'^logout/', views.logout),
  12.  
    url(r'^captcha', include('captcha.urls')) # 增加这一行
  13.  
    ]

8.3.修改forms.py

如果上面都OK了,就可以直接在我们的forms.py文件中添加CaptchaField了。

  1. from django import forms
  2. from captcha.fields import CaptchaField
  3.  
  4. class UserForm(forms.Form):
    1.   username = forms.CharField(label="用户名", max_length=128, widget=forms.TextInput(attrs={'class': 'form-control'}))
    2.   password = forms.CharField(label="密码", max_length=256, widget=forms.PasswordInput(attrs={'class': 'form-control'}))
    3.   captcha = CaptchaField(label='验证码')

需要提前导入from captcha.fields import CaptchaField,然后就像写普通的form字段一样添加一个captcha字段就可以了!

8.4.修改login.html

由于我们前面是手动生成的form表单,所以还要修改一下,添加captcha的相关内容,如下所示:

  1. <form class='form-login' action="/login/" method="post">
  2. <h2 class="text-center">欢迎登录</h2>
  3. <div class="form-group">
  4. {{ login_form.username.label_tag }}
  5. {{ login_form.username}}
  6. </div>
  7. <div class="form-group">
  8. {{ login_form.password.label_tag }}
  9. {{ login_form.password }}
  10. </div>
  11. <div class="form-group"> 
  12. {{ login_form.captcha.errors }}
  13. {{ login_form.captcha.label_tag }}
  14. {{ login_form.captcha }} 
  15. </div>
  16. <button type="reset" class="btn btn-default pull-left">重置</button> 
  17. <button type="submit" class="btn btn-primary pull-right">提交</button>
  18. </form>
  19. </div> 
  20. </div> <!-- /container --> 
  21. {% 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表单使用验证码的更多相关文章

  1. DedeCMS提交自定义表单加入验证码功能

    织梦dedecms网站给自定义表单加dede模板自带验证码的方法. 有时候,我们因为需要给dede网站的自定义表单添加验证码,防止恶意填写表单提交. 我们可以用以下的方法来实现: 首先,我们要找到 / ...

  2. Ajax实现提交表单时验证码自动验证(原创自Zjmainstay)

    本文通过源码展示如何实现表单提交前,验证码先检测正确性,不正确则不提交表单,更新验证码. 1.前端代码 index.html <!DOCTYPE html> <html> &l ...

  3. JavaWeb 之 重复提交表单和验证码相关的问题!

    下面我们首先来说一下表单的重复提交问题,我们知道在真实的网络环境中可能受网速带宽的原因会造成页面中表单在提交的过程中出现网络的延迟等问题,从而造成多次提交的问题!下面我们就具体来分析一下造成表单提交的 ...

  4. 用python模拟登录(解析cookie + 解析html + 表单提交 + 验证码识别 + excel读写 + 发送邮件)

    老婆大人每个月都要上一个网站上去查数据,然后做报表. 为了减轻老婆大人的工作压力,所以我决定做个小程序,减轻我老婆的工作量. 准备工作 1.tesseract-ocr 这个工具用来识别验证码,非常好用 ...

  5. Ajax提交表单时验证码自动验证 php后端验证码检测

    本文通过源码展示如何实现表单提交前,验证码先检测正确性,不正确则不提交表单,更新验证码. 1.前端代码 index.html <!DOCTYPE html> <html> &l ...

  6. django-form表单的提交

    <form action="/blog/" method="get"> 如果runserver默认启用127.0.0.1:8000的话,且上面这个f ...

  7. Django---form表单提交数据到数据库(普通方法+Django的form类)

    目标: ①.初始form的简单应用 ②.使用Django的form组件完成新增一个帖子 方法一:普通方法 1.前端表单代码 <div> <form class="navba ...

  8. python自动化之djangoform表单验证

    djangoforms表单验证 创建个类,继承于 forms.form obj = FM(request.post) obj.is_valid() 如果验证没有问题会返回true,否则会返回false ...

  9. Django-Form表单(验证、定制、错误信息、Select)

      Django form 流程 1.创建类,继承form.Form 2.页面根据类的对象自动创建html标签 3.提交,request.POST       封装到类的对象里,obj=UserInf ...

随机推荐

  1. ABAP DEMO 下拉框

    效果展示: *&---------------------------------------------------------------------* *& Report YCX ...

  2. intellij maven配置与使用

    目录 intellij maven配置与使用 Maven 常用设置介绍 Maven 骨架创建 Java Web 项目 Maven 组件来管理项目 @(目录) intellij maven配置与使用 M ...

  3. 【esp8266】技术汇总帖

    https://blog.csdn.net/xh870189248/article/details/80027961 这哥们 牛

  4. 【Chrome插件】Session Buddy--搁置标签页

    写在前面:看文章前请先看文章写作时间,避免浪费时间.2019-09-10 使用场景 Chrome打开许多网页,临时有事需要把当前的一些标签页一键保存,等待事后继续处理. 操作演示 原片地址:https ...

  5. 【VS开发】windows下的signal

    在windows下,信号机制简单来说是通过工作线程实现的,该线程运行于相对优先级THREAD_PRIORITY_HIGHEST,当信号产生时,windows生成该线程执行信号处理逻辑,由于该线程优先级 ...

  6. 漏洞复现之JBoss 4.x JBossMQ JMS 反序列化漏洞(CVE-2017-7504)

    前言: 序列化就是把对象转换成字节流,便于保存在内存.文件.数据库中:反序列化即逆过程,由字节流还原成对象. Java中的ObjectOutputStream类的writeObject()方法可以实现 ...

  7. 【转帖】【PCI-E通道是个什么东西?他是干啥的?】

    [PCI-E通道是个什么东西?他是干啥的?] https://zhuanlan.zhihu.com/p/62426408 前言: 经常接触台式机的同学肯定绕不开PCI-E这个名词,因为这是台式机里最重 ...

  8. 树莓派上跑.NET的segment fault错误

    答案:树莓派1和树莓派zero是不支持的,原因是.net需要arm v7 详情看这里 可以用 cat /proc/cpuinfo | grep 'model name' |uniq 看一下cpu

  9. 过滤器( filter )的使用

    转自:https://www.jianshu.com/p/2ea2b0e4d1f2 过滤器通常 在 web 服务端用的比较多,有要功能 在客户端的请求访问后端资源之前,拦截这些请求. 在服务器的响应发 ...

  10. awk简单使用

    1.awk格式 awk  [ 切割符号 ]  ' [ / pattern/ ]  函数语句 '   [ 文件名 ] 2.输出对应列 $0  全部 , $1 第一列  ,$2 第二列  ...... a ...