python验证码图片生成
环境:win10(64位)+pycharm2018+pillow5.4+python3.7
对Django的跨站请求保护的有所了解的同学会知道{%csrf_token%}在实际上作用并不是那么大,只要我们拿到了cookie的值添加进去就可以避开这种保护机制,所有有了更安全的-------验证码
python实现验证码功能有赖于第三方库Pillow,可以通过它来绘制图像,添加颜色文字并呈现在我们的web网站上。下面是pillow的官方文档:https://pillow.readthedocs.io/en/latest/handbook/index.html
言归正传:实现验证码功能依靠pillow的三个类Image,ImageDraw,ImageFont,分别用于创建画布,画笔,字体。
其中有坑的地方。。。
1:font字体的定义要自己去看自己的电脑支持什么(window的字体在 C:\Windows\Fonts 下)ubuntu在/usr/share/fonts,自己去看支持什么就写什么,不要乱写。
2:ImageDraw.Draw.text()方法,别看官方文档给你那么多参数,,并没有啥用,你只要记住,设置坐标,内容,颜色,字体就万事大吉了
3:在利用内存存储生成的图像时会利用io模块下的StringIO(至少有些教程是这样写的),在这不能用StringIO,因为内存,我们操作的字节,,,所以要用ByteIO方法去保存我们的img
代码如下:
view.py
def varity(request):
from PIL import Image,ImageDraw,ImageFont #导入画布,画题,字体
import random
#背景颜色
bgcolor=(random.randrange(10,160),random.randrange(50,160),255)
#宽高
width = 140
height = 60
#创建画板
img = Image.new(mode='RGB',size=(width,height),color=bgcolor)
#创建画笔
draw = ImageDraw.Draw(img,mode='RGB')
#定义字符
text = 'ABCD1234'
# 字体对象,字体,字号
font1 = ImageFont.truetype('AdobeGothicStd-Bold.otf',40)
#temp用来存储随机生成的验证码
temp = ''
for i in range(4):
# 每循环一次,从a到z中随机生成一个字母或数字
# 65到90为字母的ASCII码,使用chr把生成的ASCII码转换成字符
# str把生成的数字转换成字符串
temp1= text[random.randrange(0,len(text))]
# 把生成的随机码存起来
temp += temp1
#每一次生成新的颜色
color1 = (random.randint(0,255),random.randint(0,255),random.randint(0,255))
#把文字写到img中
draw.text((i*24, i*6),temp1,color1,font1)
#保存到内存流
import io
buf = io.BytesIO()
img.save(buf,'png')
#将验证保存并传递
request.session['code']=temp
#将得到的对象返回
return HttpResponse(buf.getvalue(),'image/png')
def varity1(request):
return render(request,'booktest/varity1.html')
def varity2(request):
name = request.POST['varity']
name1=request.session['code']
if name == name1:
return HttpResponse('ok')
else:
return HttpResponse('error')
urls.py
urls.py
from django.urls import re_path
from .import views
urlpatterns = [
re_path(r'^$',views.index,name='index'),
# re_path(r'^(\d+)$',views.show,name = 'show'),
# re_path(r'^index2$',views.index2),
# re_path(r'^index1',views.index1),
# re_path(r'^user$',views.user),
# re_path(r'^csrf1$',views.csrf1),
# re_path(r'^csrf2$',views.csrf2),
re_path(r'^varity$',views.varity),
re_path(r'^varity1$',views.varity1),
re_path(r'^varity2$',views.varity2),
]
varity1.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="varity2" method="post">
{% csrf_token %}
<input type="text" name="varity" value="验证码">
<img src="varity" alt="">
<input type="submit">
</form>
</body>
</html>
运行截图:

python验证码图片生成的更多相关文章
- 验证码图片生成工具类——Captcha.java
验证码图片生成工具,使用JAVA生成的图片验证码,调用getRandcode方法获取图片验证码,以流的方式传输到前端页面. 源码如下:(点击下载 Captcha.java) import java. ...
- .Net中验证码图片生成
开发网站或平台系统,登录页面是必不可少的功能,但是现在很多人可以使用工具暴力破解网站密码,为了防止这类非法操作,需要在登录页面添加验证,验证码就是最常用的一种验证方式. 我结合了自己的经验和网上的验证 ...
- asp.net验证码图片生成示例
验证码,一个很常见的东西.不管你是使用者还是开发者,这个东西80%的人都见到过,但是之前有人给我说过这么一句话“内行看门道,外行看热闹!”,仔细琢磨一下还真的是那么一回事.对于怎么实现验证码,闲话不多 ...
- c# 验证码图片生成类
using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D ...
- mvc验证码图片生成
/// <summary> ///生成验证码 /// </summary> public class VerifyCode { /// <summary> /// ...
- django 验证码图片生成视图函数
def verify_code(request): import random # 定义验证码图片背景颜色 宽和高 bgcolor = (random.randrange(20,180),random ...
- 通过python将图片生成字符画
基础知识: 1.python基础知识 快速学习链接:https://www.shiyanlou.com/courses/214 2.linux命令行操作 快速学习链接:https://www. ...
- python识别图片生成字符模式
此python文件来自D7哥, 放在这里备份. 用法 python3 PIL\&argparse.py 1.jpg -o test.txt --width 300 --height 300 p ...
- python imageio 图片生成gif
#!/bin/python3 import matplotlib.pyplot as plt import imageio,os TIME_GAP=0.075 #两帧之间的时间间隔,秒为单位 FILE ...
随机推荐
- 『无为则无心』Python基础 — 3、搭建Python开发环境
目录 1.Python开发环境介绍 2.Python解释器的分类 3.下载Python解释器 4.安装Python解释器 5.Python解释器验证 1.Python开发环境介绍 所谓"工欲 ...
- [非专业翻译] 高性能对象映射框架 - Mapster
[非专业翻译] 高性能对象映射框架 - Mapster 系列介绍 [非专业翻译] 是对没有中文文档进行翻译的系列博客,文章由机翻和译者自己理解构成,和原文相比有所有不通,但意思基本一致. 因个人能力有 ...
- Serverless Web Function 实践教程(一):快速部署 Node.js Web 服务
作为目前广受欢迎的 Web 服务开发语言,Node.js 提供了众多支持 HTTP 场景的相关功能,可以说是为 Web 构建而生.因此,基于 Node.js,也诞生了多种 Web 服务框架,它们对 N ...
- 《吃透微服务》 - 服务容错之Sentinel
大家好,我是小菜. 一个希望能够成为 吹着牛X谈架构 的男人!如果你也想成为我想成为的人,不然点个关注做个伴,让小菜不再孤单! 本文主要介绍 SpringCloud中Sentinel 如有需要,可以参 ...
- Elasticsearch中的Term查询和全文查询
目录 前言 Term 查询 exists 查询 fuzzy 查询 ids 查询 prefix 查询 range 查询 regexp 查询 term 查询 terms 查询 terms_set 查询 t ...
- Zabbix5.0钉钉报警(centos7)
2.1.到钉钉官网下载pc版钉钉,安装.注册.登陆: 钉钉下载地址:https://www.dingtalk.com/ 2.2.创建群聊和钉钉机器人: 1.创建群聊,把需要收到报警的人员都拉到这个群: ...
- 29、vi和vim用法详解
vi类似于windows中的文本文件,用于普通的文本文件 vim:专家版的文件编辑器,用于shell程序型文件,带颜色,自检查语法 一般模式快捷键 O:光标到一行的首 $:光标到一行的尾 H:光标到整 ...
- 数据备份[APIO/CTSC 2007]题解
题目描述 你在一家IT公司为大型写字楼或办公楼的计算机数据做备份. 然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽享计算机游戏的乐趣. 已知办公楼 ...
- 『心善渊』Selenium3.0基础 — 20、Selenium对Cookie的操作
目录 1.Cookie介绍 2.Session介绍 3.Cookie工作原理图解 4.Cookie内容参数说明 5.Selenium操作Cookie的API 6.Selenium操作Cookie的示例 ...
- Machine Schedule 赤裸裸的二分匹配 二部图中的点覆盖书==匹配数
Machine Schedule 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 ...