图形验证码

注意事项

  1. 在虚拟环境中安装Pillow
  2. 字体文件需要在环境中测试一下(字体文件习惯放在和验证码同层目录下)
import random
# Image:是一个画板(context),ImageDraw:是一个画笔, ImageFont:画笔的字体
from PIL import Image,ImageDraw,ImageFont
import time
import os
import string# Captcha验证码class Captcha(object):# 把一些常量抽取成类属性#字体的位置font_path = os.path.join(os.path.dirname(__file__),'verdana.ttf')# font_path = 'utils/captcha/verdana.ttf'#生成几位数的验证码number = 4#生成验证码图片的宽度和高度size = (100,40)#背景颜色,默认为白色 RGB(Re,Green,Blue)bgcolor = (0,0,0)#随机字体颜色random.seed(int(time.time()))fontcolor = (random.randint(200,255),random.randint(100,255),random.randint(100,255))# 验证码字体大小fontsize = 20#随机干扰线颜色。linecolor = (random.randint(0,250),random.randint(0,255),random.randint(0,250))# 是否要加入干扰线draw_line = True# 是否绘制干扰点draw_point = True# 加入干扰线的条数line_number = 3SOURCE = list(string.ascii_letters)for index in range(0, 10):SOURCE.append(str(index))#用来随机生成一个字符串(包括英文和数字)# 定义成类方法,然后是私有的,对象在外面不能直接调用@classmethoddef gene_text(cls):return ''.join(random.sample(cls.SOURCE,cls.number))#number是生成验证码的位数#用来绘制干扰线@classmethoddef __gene_line(cls,draw,width,height):begin = (random.randint(0, width), random.randint(0, height))end = (random.randint(0, width), random.randint(0, height))draw.line([begin, end], fill = cls.linecolor)# 用来绘制干扰点@classmethoddef __gene_points(cls,draw,point_chance,width,height):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))#生成验证码@classmethoddef gene_code(cls):width,height = cls.size #宽和高image = Image.new('RGBA',(width,height),cls.bgcolor) #创建画板font = ImageFont.truetype(cls.font_path,cls.fontsize) #验证码的字体draw = ImageDraw.Draw(image)  #创建画笔text = cls.gene_text() #生成字符串font_width, font_height = font.getsize(text)draw.text(((width - font_width) / 2, (height - font_height) / 2),text,font= font,fill=cls.fontcolor) #填充字符串# 如果需要绘制干扰线if cls.draw_line:# 遍历line_number次,就是画line_number根线条for x in range(0,cls.line_number):cls.__gene_line(draw,width,height)# 如果需要绘制噪点if cls.draw_point:cls.__gene_points(draw,10,width,height)return (text,image)

验证码不能直接放在HttpResponse中返回,而是要

from utils.captcha.xfzcaptcha import Captcha
from io import BytesIO
from django.http import HttpResponsedef img_captcha(request):text,image = Captcha.gene_code()# BytesIO:相当于一个管道,用来存储图片的流数据out = BytesIO()# 调用image的save方法,将这个image对象保存到BytesIO中image.save(out,'png')# 将BytesIO的文件指针移动到最开始的位置out.seek(0)response = HttpResponse(content_type='image/png')# 从BytesIO的管道中,读取出图片数据,保存到response对象上response.write(out.read())response['Content-length'] = out.tell()# 12Df:12Df.lower()cache.set(text.lower(),text.lower(),5*60)return response

短信验证码(聚合数据):

API文档

  1. 接口地址:http://v.juhe.cn/sms/send
  2. 返回格式:json/xml
  3. 请求方式:http get/post
  4. 请求示例:http://v.juhe.cn/sms/send?mobile=手机号码&tpl_id=短信模板
  5. ID&tpl_value=%23code%23%3D654654&key=
  6. 接口备注:接口返回成功不代表接收成功,接口提交成功计费,具体接收状态只能由运营商查询;运营商限制同1个号码同1个签名的内容1分钟内只能接收1条,10分钟3条,1小时内4条,一天20条,否则可能会被运营商屏蔽,短信api接口本身不限制发送频率,具体发送频率需要用户自行设置,只限国内手机号。请务必添加图片验证码等防恶意攻击的机制,以防短信轰炸,营销内容最后加回T退订,营销短信发送时间为:8:30至21:30,字数限制:短信内容(包含签名)小于等于70个字符为计费1条。超过70个字符为长短信,按每67个字符计费1条,中英文标点空格都算作一个字符,最多300字符。

requests

  1. 在虚拟环境中安装request
  2. 测试demo:
#encoding: utf-8
import requestsdef send(mobile,captcha):url = "http://v.juhe.cn/sms/send"params = {"mobile": mobile,"tpl_id": "121674","tpl_value": "#code#="+captcha,"key": "4f2dc49ce16b8538522f0f11fb6cd0a2"}response = requests.get(url,params=params)result = response.json()if result['error_code'] == 0:return Trueelse:return False

通过判断json数据中的error_code来判断值是否返回成功

图形验证码和短信验证码相关推荐

  1. 2020/11/03:图片验证码和短信验证码

    2020/11/03:图片验证码和短信验证码 图形验证码: 流程: 看懂前端代码,理清逻辑思路,画的出流程图 settings.py配置: # 缓存配置 CACHES = {'default': {' ...

  2. python3中生成图片验证码和短信验证码的程序

    当下,python3已经逐渐取代了python2的地位,而一些开发中常用的功能模块(如生成图片验证码和短信验证码的模块)还是基于python2封装的模块,在调用时会各种出错.因此本人稍稍整理了一套在p ...

  3. 图片验证码和短信验证码开发

    图片验证码和短信验证码开发 tip :前后端分离,先开发后端,后完善前端 一.图片验证码流程 1.引入captcha包放入utils 不是独立的第三方包放入utils,独立的包放入libs里面 cap ...

  4. android 验证码短信验证码,Android​短信验证码倒计时验证的2种常用方式

    前言 ​本文主要介绍的是短信验证码功能,这里总结了两种常用的方式,可以直接拿来使用. 看图 计时器 说明:这里的及时从10开始,是为了演示的时间不要等太长而修改的. 方法如下 1.第一种方式:Time ...

  5. java实现发送短信验证码、短信验证码防刷校验-49

    一:认证服务环境搭建 1.新建gulimail-auth-server 2.整合相关依赖 <!--引入commom依赖--><dependency><groupId> ...

  6. 防止刷单杜绝薅羊毛:语音验证码和短信验证码及最新一键登录(秒验点验)解决思路

    1.传统的网站和APP在早期开发时很少关注到刷单防范和羊毛党问题.甚至很多网站注册没有考虑到手机绑定.在以PC为主的互联网时代网站注册时很少使用到短信验证码,随着工信部强制要求手机号必须实名认证,同时 ...

  7. api调用 python 验证码_Python短信验证码接口调用demo

    基于创蓝253云通讯品台的Python短信验证码接口调用demo !/usr/local/bin/python -- coding:utf-8 -- Author: jacky Time: 14-2- ...

  8. 短信验证码mysql_短信验证码

    public String sendCode(String phoneString){ String code=createRandomVcode();//验证码 // 用户名 String name ...

  9. 登录页获取短信验证码 读取短信验证码到键盘

    需要实现如下效果: 首先定义一个SMSContentObserver 来拦截短信内容: package "你的包名";import android.content.Context; ...

最新文章

  1. GCC中通过--wrap选项使用包装函数
  2. [unreal4入门系列之四] 熟悉虚幻4项目浏览器界面
  3. v8学习笔记(六) 汇编过程
  4. SpringBoot启动流程分析(四):IoC容器的初始化过程
  5. js获取当前页面url网址等信息
  6. 配置 Sybase数据源
  7. SpringBoot 自带工具类~ObjectUtils
  8. Python Tricks —— 使用 pywinrm 远程控制 Windows 主机
  9. Linux学习笔记016---CentOS7虚拟机设置使用静态IP上网_配置集群的时候可以用
  10. 10. 单例模式(singleton pattern)
  11. python读取文件中的内容_python逐行读取文件内容的三种方法
  12. 如何在vim中打印出^M
  13. Chrome 浏览器安装 JSONView 插件
  14. matlab 固态 机械_忆捷固态硬盘怎么样(2款忆捷固态硬盘测评)
  15. python snownlp了解_python中snownlp情感分析简易的demo分享
  16. TRNSYS与MATLAB联合仿真
  17. Gitee+PicGo+Typora图床搭建丨出现 Error: You must be logged in to use 的解决方法
  18. wireshark抓包详细图文教程
  19. 萝卜青菜各有所爱------TypeScript VS JavaScript
  20. 大数据BI可视化基础

热门文章

  1. GPL和LGPL的区别!
  2. jQuery动画操作
  3. js小游戏——五子棋人机大战
  4. sqlite3数据库的使用及其对应的API函数接口的使用
  5. 怎么把录音转文字?快把这些方法收好
  6. Arrays及Array
  7. 无法安装64位版本的微软Office
  8. 物理学与计算机相关参考文献,中国科学技术大学 计算物理学 教材与参考文献...
  9. jQuery基础知识(黑马程序员前端基础必备教程视频笔记)
  10. css中a标签超链接在新窗口中打开以及超链接去除/添加下划线