图形验证码和短信验证码
图形验证码
注意事项
- 在虚拟环境中安装
Pillow
- 字体文件需要在环境中测试一下(字体文件习惯放在和验证码同层目录下)
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文档
- 接口地址:http://v.juhe.cn/sms/send
- 返回格式:
json/xml
- 请求方式:
http
get/post
- 请求示例:http://v.juhe.cn/sms/send?mobile=手机号码&tpl_id=短信模板
- ID&tpl_value=%23code%23%3D654654&key=
- 接口备注:
接口返回成功不代表接收成功,接口提交成功计费
,具体接收状态只能由运营商查询;运营商限制同1个号码同1个签名的内容1分钟内只能接收1条,10分钟3条,1小时内4条,一天20条,否则可能会被运营商屏蔽,短信api接口本身不限制发送频率,具体发送频率需要用户自行设置,只限国内手机号。请务必添加图片验证码等防恶意攻击的机制,以防短信轰炸,营销内容最后加回T退订,营销短信发送时间为:8:30至21:30
,字数限制:短信内容(包含签名)小于等于70个字符为计费1条。超过70个字符为长短信,按每67个字符计费1条,中英文标点空格都算作一个字符,最多300字符。
requests
- 在虚拟环境中安装
request
- 测试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
来判断值是否返回成功
图形验证码和短信验证码相关推荐
- 2020/11/03:图片验证码和短信验证码
2020/11/03:图片验证码和短信验证码 图形验证码: 流程: 看懂前端代码,理清逻辑思路,画的出流程图 settings.py配置: # 缓存配置 CACHES = {'default': {' ...
- python3中生成图片验证码和短信验证码的程序
当下,python3已经逐渐取代了python2的地位,而一些开发中常用的功能模块(如生成图片验证码和短信验证码的模块)还是基于python2封装的模块,在调用时会各种出错.因此本人稍稍整理了一套在p ...
- 图片验证码和短信验证码开发
图片验证码和短信验证码开发 tip :前后端分离,先开发后端,后完善前端 一.图片验证码流程 1.引入captcha包放入utils 不是独立的第三方包放入utils,独立的包放入libs里面 cap ...
- android 验证码短信验证码,Android短信验证码倒计时验证的2种常用方式
前言 本文主要介绍的是短信验证码功能,这里总结了两种常用的方式,可以直接拿来使用. 看图 计时器 说明:这里的及时从10开始,是为了演示的时间不要等太长而修改的. 方法如下 1.第一种方式:Time ...
- java实现发送短信验证码、短信验证码防刷校验-49
一:认证服务环境搭建 1.新建gulimail-auth-server 2.整合相关依赖 <!--引入commom依赖--><dependency><groupId> ...
- 防止刷单杜绝薅羊毛:语音验证码和短信验证码及最新一键登录(秒验点验)解决思路
1.传统的网站和APP在早期开发时很少关注到刷单防范和羊毛党问题.甚至很多网站注册没有考虑到手机绑定.在以PC为主的互联网时代网站注册时很少使用到短信验证码,随着工信部强制要求手机号必须实名认证,同时 ...
- api调用 python 验证码_Python短信验证码接口调用demo
基于创蓝253云通讯品台的Python短信验证码接口调用demo !/usr/local/bin/python -- coding:utf-8 -- Author: jacky Time: 14-2- ...
- 短信验证码mysql_短信验证码
public String sendCode(String phoneString){ String code=createRandomVcode();//验证码 // 用户名 String name ...
- 登录页获取短信验证码 读取短信验证码到键盘
需要实现如下效果: 首先定义一个SMSContentObserver 来拦截短信内容: package "你的包名";import android.content.Context; ...
最新文章
- GCC中通过--wrap选项使用包装函数
- [unreal4入门系列之四] 熟悉虚幻4项目浏览器界面
- v8学习笔记(六) 汇编过程
- SpringBoot启动流程分析(四):IoC容器的初始化过程
- js获取当前页面url网址等信息
- 配置 Sybase数据源
- SpringBoot 自带工具类~ObjectUtils
- Python Tricks —— 使用 pywinrm 远程控制 Windows 主机
- Linux学习笔记016---CentOS7虚拟机设置使用静态IP上网_配置集群的时候可以用
- 10. 单例模式(singleton pattern)
- python读取文件中的内容_python逐行读取文件内容的三种方法
- 如何在vim中打印出^M
- Chrome 浏览器安装 JSONView 插件
- matlab 固态 机械_忆捷固态硬盘怎么样(2款忆捷固态硬盘测评)
- python snownlp了解_python中snownlp情感分析简易的demo分享
- TRNSYS与MATLAB联合仿真
- Gitee+PicGo+Typora图床搭建丨出现 Error: You must be logged in to use 的解决方法
- wireshark抓包详细图文教程
- 萝卜青菜各有所爱------TypeScript VS JavaScript
- 大数据BI可视化基础