django-simple-captcha

在网站开发的登录页面中,经常会需要使用到图形验证码来验证。在Django中,django-simple-captcha库包提供了图形验证码的使用。

下面我们来讲讲如何使用django-simple-captcha包来图形验证,并且点击图片刷新验证码。

django-simple-captcha的安装

  1. pip install django-simple-captcha

在settings.py文件中注册captcha

  1. INSTALLED_APPS = [
  2. 'captcha'
  3. ]

在settings.py文件中设置图形验证码的样式

  1. #字母验证码
  2. CAPTCHA_IMAGE_SIZE = (80, 45) # 设置 captcha 图片大小
  3. CAPTCHA_LENGTH = 4 # 字符个数
  4. CAPTCHA_TIMEOUT = 1 # 超时(minutes)
  5. #加减乘除验证码
  6. CAPTCHA_OUTPUT_FORMAT = '%(image)s %(text_field)s %(hidden_field)s '
  7. CAPTCHA_NOISE_FUNCTIONS = ('captcha.helpers.noise_null',
  8. 'captcha.helpers.noise_arcs', # 线
  9. 'captcha.helpers.noise_dots', # 点
  10. )
  11. CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.random_char_challenge'
  12. CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.math_challenge'
  13. CAPTCHA_TIMEOUT = 1

执行数据迁移,在数据表中生成captcha_captchastore表

  1. python manage.py migrate

在urls.py中添加路由

  1. urlpatterns = [
  2. path('captcha/', include('captcha.urls')), # 图片验证码 路由
  3. path('refresh_captcha/', views.refresh_captcha), # 刷新验证码,ajax
  4. ]

下面是源代码。

urls.py文件

  1. from django.urls import path
  2. from django.conf.urls import include
  3. from App.views import IndexView
  4. from App import views
  5. urlpatterns = [
  6. path('captcha/', include('captcha.urls')),
  7. path('refresh_captcha/',views.refresh_captcha),
  8. path('',IndexView.as_view()),
  9. ]

views.py文件

  1. from django.shortcuts import render
  2. from django.views.generic import View
  3. from captcha.models import CaptchaStore
  4. from captcha.helpers import captcha_image_url
  5. from django.http import HttpResponse
  6. import json
  7. # 创建验证码
  8. def captcha():
  9. hashkey = CaptchaStore.generate_key() #验证码答案
  10. image_url = captcha_image_url(hashkey) #验证码地址
  11. captcha = {'hashkey': hashkey, 'image_url': image_url}
  12. return captcha
  13. #刷新验证码
  14. def refresh_captcha(request):
  15. return HttpResponse(json.dumps(captcha()), content_type='application/json')
  16. # 验证验证码
  17. def jarge_captcha(captchaStr, captchaHashkey):
  18. if captchaStr and captchaHashkey:
  19. try:
  20. # 获取根据hashkey获取数据库中的response值
  21. get_captcha = CaptchaStore.objects.get(hashkey=captchaHashkey)
  22. if get_captcha.response == captchaStr.lower(): # 如果验证码匹配
  23. return True
  24. except:
  25. return False
  26. else:
  27. return False
  28. class IndexView(View):
  29. def get(self, request):
  30. hashkey = CaptchaStore.generate_key() # 验证码答案
  31. image_url = captcha_image_url(hashkey) # 验证码地址
  32. captcha = {'hashkey': hashkey, 'image_url': image_url}
  33. return render(request, "login.html", locals())
  34. def post(self,request):
  35. capt=request.POST.get("captcha",None) #用户提交的验证码
  36. key=request.POST.get("hashkey",None) #验证码答案
  37. if jarge_captcha(capt,key):
  38. return HttpResponse("验证码正确")
  39. else:
  40. return HttpResponse("验证码错误")

login.html文件,这里使用 js 动态刷新图形验证码用到了jquery和bootstrap的js,所以,我们提前将jquery和bootstrap放在了static文件夹下。关于如何加载静态文件,传送门——>Django加载静态文件

  1. {% load static %}
  2. <!DOCTYPE html>
  3. <html lang="en">
  4. <head>
  5. <meta charset="UTF-8">
  6. <title>Title</title>
  7. <script src="{% static 'bower_components/jquery/dist/jquery.min.js' %}"></script>
  8. <script src="{% static 'bower_components/bootstrap/dist/js/bootstrap.min.js'%}"></script>
  9. </head>
  10. <body>
  11. <form action="/" method="post">
  12. <a href="#" class="captcha">
  13. <img src="{{ captcha.image_url }}" alt="点击切换" id="id_captcha" >
  14. </a> <br>
  15. <input type="text" name="captcha" placeholder="验证码"> <br>
  16. <input value="{{ captcha.hashkey }}" name="hashkey" type="hidden" id="id_captcha_0">
  17. <button type="submit" class="btn btn-primary btn-block ">提交</button>
  18. </form>
  19. <script>
  20. <!-- 动态刷新验证码js -->
  21. $(document).ready(function(){
  22. $('.captcha').click(function () {
  23. $.getJSON("refresh_captcha/", function (result) {
  24. $('#id_captcha').attr('src', result['image_url']);
  25. $('#id_captcha_0').val(result['hashkey'])
  26. });
  27. });
  28. });
  29. </script>
  30. </body>
  31. </html>

参考文章:https://blog.csdn.net/qq_37648632/article/details/83149803

本文所有代码:https://github.com/xie1997/Django_captcha

Django中图形验证码(django-simple-captcha)的更多相关文章

  1. python爬虫中图形验证码的处理

    使用python爬虫自动登录时,遇到需要输入图形验证码的情况,一个比较简单的处理方法是使用打码平台识别验证码. 使用过两个打码平台,打码兔和若快,若快的价格更便宜,识别率相当.若快需要注册两个帐号:开 ...

  2. Django 中CSRF中间件 'django.middleware.csrf.CsrfViewMiddleware',

    1.Django中CSRF中间件的工作原理及form表单提交需要添加{% csrf_token %}防止出现403错误 CSRF # 表示django全局发送post请求均需要字符串验证功能:防止跨站 ...

  3. django中的验证码

    from django.shortcuts import renderfrom PIL import Imagefrom PIL import ImageDrawfrom PIL import Ima ...

  4. gin框架中图形验证码的生成和验证

    功能和验证码使用原理 本案例中没有使用redis作为缓存,而是使用的内存存储方法 github链接地址 下载命令 go get github.com/mojocn/base64Captcha 请求处理 ...

  5. Django中ORM介绍和字段及其参数

    ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述 ...

  6. Django中ORM介绍

    Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...

  7. Django 中的 cookie 和 session

    一.cookie 由于HTTP协议是无状态的,而服务器端的业务必须是要有状态的.Cookie诞生的最初目的是为了存储web中的状态信息,以方便服务器端使用.比如判断用户是否是第一次访问网站.目前最新的 ...

  8. django中的ORM介绍和字段及字段参数

    Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...

  9. Django中ORM介绍和字段及字段参数 Object Relational Mapping(ORM)

    Django中ORM介绍和字段及字段参数   Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简 ...

随机推荐

  1. CSDN博客转MD格式

    基于大神作品修改原文,使用了一下发现有一些小问题,爬取的博客标题如果含有字符是Windows不支持的命名格式,会卡在界面,进行了一下优化,加了一些字符过滤处理,但是tomd模块对html的处理还是不是 ...

  2. POJ_2533 Longest Ordered Subsequence 【LIS】

    一.题目 Longest Ordered Subsequence 二.分析 动态规划里的经典问题.重在DP思维. 如果用最原始的DP思想做,状态转移方程为$DP[i] = max(DP[j] + 1) ...

  3. 5行代码!完成bat病毒制作!!!

    这个病毒的功能是删除当前目录下.cpp类型的代码. copy %0 "%userprofile%\AppData\Roaming\Microsoft\Windows\Start Menu\P ...

  4. python3 输出字符

    import string'''whitespace -- a string containing all ASCII whitespaceascii_lowercase -- a string co ...

  5. 微信小程序--简约风博客小程序(基于云开发 - 全开源)

    微信小程序--简约风博客小程序(基于云开发 - 全开源) 项目启动纯属突发奇想,想看看博客小程序,例如wehalo博客小程序,但是感觉自建平台还要浪费自己的服务器算力,还没有访问量,省省吧. 本着白嫖 ...

  6. WebGPU[1] 三角形

    代码见: https://github.com/onsummer/my-dev-notes/tree/master/webgpu-Notes/01-triangle 如果本篇的代码不能跑了,请联系我或 ...

  7. Android Studio详解项目中的资源

    •目录结构 •作用 所有以 drawable 开头的文件都是用来放图片的: 所有以 mipmap 开头的文件都是用来放应用图标的: 所有以 value 开头的文件夹都是用来放字符串.样式.颜色等配置的 ...

  8. [LeetCode]1. 两数之和(难度:简单)

    题目: 给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值的那两个整数,并返回它们的数组下标.你可以假设每种输入只会对应一个答案.但是,数组中同一个元素在答案里不能重复 ...

  9. 「HTML+CSS」--自定义加载动画【008】

    前言 Hello!小伙伴! 首先非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出- 哈哈 自我介绍一下 昵称:海轰 标签:程序猿一只|C++选手|学生 简介:因C语言结识编程,随后转入计算机 ...

  10. ClickHouse性能优化?试试物化视图

    一.前言 ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS):目前我们使用CH作为实时数仓用于统计分析,在做性能优化的时候使用了 物化视图 这一特性作为优化手段,本文主 ...