广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Django验证码的生成与使用示例
  • 300
分享到

Django验证码的生成与使用示例

验证码示例Django 2022-06-04 18:06:30 300人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

前言 本文主要介绍的是关于Django验证码生成与使用的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍: 方法如下: 1、基于PIL生成一个带验证码的图片和验证码,生成验证码图片需要Monaco

前言

本文主要介绍的是关于Django验证码生成与使用的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍:

方法如下:

1、基于PIL生成一个带验证码的图片和验证码,生成验证码图片需要Monaco.ttf字体,可按自己要求更改check_code中的字体和字体文件位置,如下图


#!/usr/bin/env python
# -*- coding:utf-8 -*-

import random
from PIL import Image, ImageDraw, ImageFont, ImageFilter

_letter_cases = "abcdefghjkmnpqrstuvwxy" # 小写字母,去除可能干扰的i,l,o,z
_upper_cases = _letter_cases.upper() # 大写字母
_numbers = ''.join(map(str, range(3, 10))) # 数字
init_chars = ''.join((_letter_cases, _upper_cases, _numbers))


def create_validate_code(size=(120, 30),
       chars=init_chars,
       img_type="GIF",
       mode="RGB",
       bg_color=(255, 255, 255),
       fg_color=(0, 0, 255),
       font_size=18,
       font_type="Monaco.ttf",
       length=4,
       draw_lines=True,
       n_line=(1, 2),
       draw_points=True,
       point_chance=2):
 """
 @todo: 生成验证码图片
 @param size: 图片的大小,格式(宽,高),默认为(120, 30)
 @param chars: 允许的字符集合,格式字符串
 @param img_type: 图片保存的格式,默认为GIF,可选的为GIF,JPEG,TIFF,PNG
 @param mode: 图片模式,默认为RGB
 @param bg_color: 背景颜色,默认为白色
 @param fg_color: 前景色,验证码字符颜色,默认为蓝色#0000FF
 @param font_size: 验证码字体大小
 @param font_type: 验证码字体,默认为 ae_AlArabiya.ttf
 @param length: 验证码字符个数
 @param draw_lines: 是否划干扰线
 @param n_lines: 干扰线的条数范围,格式元组,默认为(1, 2),只有draw_lines为True时有效
 @param draw_points: 是否画干扰点
 @param point_chance: 干扰点出现的概率,大小范围[0, 100]
 @return: [0]: PIL Image实例
 @return: [1]: 验证码图片中的字符串
 """

 width, height = size # 宽高
 # 创建图形
 img = Image.new(mode, size, bg_color)
 draw = ImageDraw.Draw(img) # 创建画笔

 def get_chars():
  """生成给定长度的字符串,返回列表格式"""
  return random.sample(chars, length)

 def create_lines():
  """绘制干扰线"""
  line_num = random.randint(*n_line) # 干扰线条数

  for i in range(line_num):
   # 起始点
   begin = (random.randint(0, size[0]), random.randint(0, size[1]))
   # 结束点
   end = (random.randint(0, size[0]), random.randint(0, size[1]))
   draw.line([begin, end], fill=(0, 0, 0))

 def create_points():
  """绘制干扰点"""
  chance = min(100, max(0, int(point_chance))) # 大小限制在[0, 100]

  for w in range(width):
   for h in range(height):
    tmp = random.randint(0, 100)
    if tmp > 100 - chance:
     draw.point((w, h), fill=(0, 0, 0))

 def create_strs():
  """绘制验证码字符"""
  c_chars = get_chars()
  strs = ' %s ' % ' '.join(c_chars) # 每个字符前后以空格隔开

  font = ImageFont.truetype(font_type, font_size)
  font_width, font_height = font.getsize(strs)

  draw.text(((width - font_width) / 3, (height - font_height) / 3),
     strs, font=font, fill=fg_color)

  return ''.join(c_chars)

 if draw_lines:
  create_lines()
 if draw_points:
  create_points()
 strs = create_strs()

 # 图形扭曲参数
 params = [1 - float(random.randint(1, 2)) / 100,
    0,
    0,
    0,
    1 - float(random.randint(1, 10)) / 100,
    float(random.randint(1, 2)) / 500,
    0.001,
    float(random.randint(1, 2)) / 500
    ]
 img = img.transfORM(size, Image.PERSPECTIVE, params) # 创建扭曲

 img = img.filter(ImageFilter.EDGE_ENHANCE_MORE) # 滤镜,边界加强(阈值更大)

 return img, strs

check_code.py

查看图片

2、创建urls和views,请按自己需求创建


# 将check_code包放在合适的位置,导入即可,我是放在utils下面
from utils import check_code

def create_code_img(request):
 f = Bytesio() #直接在内存开辟一点空间存放临时生成的图片

 img, code = check_code.create_validate_code() #调用check_code生成照片和验证码
 request.session['check_code'] = code #将验证码存在服务器的session中,用于校验
 img.save(f,'PNG') #生成的图片放置于开辟的内存中
 return HttpResponse(f.getvalue()) #将内存的数据读取出来,并以HttpResponse返回

Views

urls我的设置:url(r'^create_code_img/', views.create_code_img)

3、前端应用验证码和点击自动刷新


<div class="row">
     <div class="col-xs-7">
      <input type="text" class="form-control" name="check_code" id="check_code" placeholder="请输入验证码">
     </div>
     <div class="col-xs-5">
      <img id="check_code_img" src="/create_code_img/" onclick="refresh_check_code(this)">
{#      src是url路径,可得到验证码图片,点击时调用refresh_check_code#}
     </div>
    </div>

  <script>
   function refresh_check_code(ths) {
     ths.src += '?';
 {#    src后面加问好会自动刷新验证码img的srC#}
   }
  </script>

4、login的Views进行数据验证,然后做相应的处理


post_check_code = request.POST.get('check_code')
session_check_code = request.session['check_code']
if post_check_code.lower() == session_check_code.lower() :
 pass

总结

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对编程网的支持。

--结束END--

本文标题: Django验证码的生成与使用示例

本文链接: https://www.lsjlt.com/news/13220.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Django验证码的生成与使用示例
    前言 本文主要介绍的是关于Django验证码生成与使用的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍: 方法如下: 1、基于PIL生成一个带验证码的图片和验证码,生成验证码图片需要Monaco...
    99+
    2022-06-04
    验证码 示例 Django
  • SpringBoot使用Kaptcha实现验证码的生成与验证功能
    当我们在项目中登录使用验证码的时候,不妨试试Kaptcha生成验证码,非常简单 1、首先,我们在pom.xml文件中引入kaptcha的maven依赖 <!-- kaptcha...
    99+
    2023-03-13
    SpringBoot实现Kaptcha验证码 SpringBoot Kaptcha验证码 SpringBoot验证码
  • python基于opencv批量生成验证码的示例
    基本思路是使用opencv来把随机生成的字符,和随机生成的线段,放到一个随机生成的图像中去。   虽然没有加复杂的形态学处理,但是目前看起来效果还不错   尝试生成1000张图片,但是最后只有998张,因为有有重复的...
    99+
    2022-06-02
    python 生成验证码 python opencv
  • springboot验证码的生成与验证的两种方法
    目录前言效果一览(单击图片刷新验证码)一、使用整合kaptcha方式实现验证码生成与验证二、使用hutool-captcha方式实现验证码生成与验证前言 在springboot的登陆...
    99+
    2022-11-13
  • Google Kaptcha验证码生成的使用实例说明
    目录Kaptcha是什么?怎么使用Kaptcha?1.首先下载jar包2.配置kaptcha3.将验证码保存进session中4.验证码校验Kaptcha验证码配置效果图如下Kapt...
    99+
    2022-11-13
  • SpringBoot如何使用Kaptcha实现验证码的生成与验证功能
    本篇内容主要讲解“SpringBoot如何使用Kaptcha实现验证码的生成与验证功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot如何使用Kaptcha实现验证码的生成与验...
    99+
    2023-07-05
  • SpringMvc使用GoogleKaptcha生成验证码
    前言:google captcha 是google生成验证码的一个工具类,其原理是将随机生成字符串保存到session中,同时以图片的形式返回给页面,之后前台页面提交到后台进行对比。1、jar包准备官方提供的pom应该是<depend...
    99+
    2023-05-31
    springmvc googlekaptcha 验证码
  • SpringBoot使用Captcha生成验证码
    目录1. 基本结构 2. Kaptcha的依赖 3. 配置SpringBoot 4. 配置Captcha 5. 工具类 6. 接口以及实现类 7. Controller8. 前端页面...
    99+
    2022-11-12
  • spring mvc 使用kaptcha配置生成验证码实例
    使用Kaptcha 生成验证码十分简单并且参数可以进行自定义,以下简单记录下使用步骤。1.在pom.xml中添加maven依赖:<dependency> <groupId>com.google.code.kaptc...
    99+
    2023-05-31
    kaptcha spring mvc
  • Django使用celery异步发送短信验证码代码示例
    目录celery1.celery介绍1.1 celery应用举例1.2 Celery有以下优点1.3 Celery 特性2.工作原理2.1 Celery 扮演生产者和消费者的角色3....
    99+
    2022-11-12
  • C#使用GDI+实现生成验证码
    一、概述 一般处理程序 ashx :它没有服务器控件,用response输出什么就是什么。 生成验证码原理:产生随机字符,并将字符生成为图片,同时储存到Session里去,然后验证用...
    99+
    2022-11-13
  • Java使用Servlet生成验证码图片
    本文实例为大家分享了Java使用Servlet生成验证码图片的具体代码,供大家参考,具体内容如下 一、实现思路 1、使用BufferedImage用于在内存中存储生成的验证码图片 2...
    99+
    2022-11-12
  • Nhibernate与代码生成的示例分析
    这篇文章主要为大家展示了“Nhibernate与代码生成的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Nhibernate与代码生成的示例分析”这篇文章吧。在向大家详细介绍Nhiber...
    99+
    2023-06-17
  • 如何使用canvas及js生成验证码
    这篇文章将为大家详细讲解有关如何使用canvas及js生成验证码,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在很多时候都需要用到验证码,前端验证码需要知道Html5中的...
    99+
    2022-10-19
  • 如何使用random模块生成验证码
    这篇“如何使用random模块生成验证码”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何...
    99+
    2022-10-19
  • MyBatisPlus代码生成器的使用示例
    目录导入依赖表结构当前项目结构配置代码生成器1、globalConfig 全局策略配置2、dataSourceConfig 数据源配置AutoGenerator 是 MyBatis-...
    99+
    2022-11-12
  • php实现自动生成验证码的实例讲解
    现在验证码在表单中的应用越来越多了,但是如果用js来实现总觉得不太方便,因此使用php来实现下,在此记录下。 当然,我们也可以封装成一个函数,以后使用的时候也是很方便的,这里并未封装...
    99+
    2022-11-12
  • Python使用PIL模块生成随机验证码
    Python生成随机验证码,需要使用PIL模块,具体内容如下 安装: pip3 install pillow 基本使用 1. 创建图片 from PIL import Image img = I...
    99+
    2022-06-04
    验证码 模块 Python
  • Elasticsearches之python使用及Django与Flask集成示例
    目录Elasticsearch之Python使用Elasticsearch之Django/Flask集成elasticsearch-dsldjango集成Elasticsearch之...
    99+
    2022-11-10
  • 使用java如何生成一个验证码图片
    本文章向大家介绍使用java如何生成一个验证码图片的基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论,允许程...
    99+
    2023-06-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作