环境: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验证码图片生成的更多相关文章

  1. 验证码图片生成工具类——Captcha.java

    验证码图片生成工具,使用JAVA生成的图片验证码,调用getRandcode方法获取图片验证码,以流的方式传输到前端页面. 源码如下:(点击下载  Captcha.java) import java. ...

  2. .Net中验证码图片生成

    开发网站或平台系统,登录页面是必不可少的功能,但是现在很多人可以使用工具暴力破解网站密码,为了防止这类非法操作,需要在登录页面添加验证,验证码就是最常用的一种验证方式. 我结合了自己的经验和网上的验证 ...

  3. asp.net验证码图片生成示例

    验证码,一个很常见的东西.不管你是使用者还是开发者,这个东西80%的人都见到过,但是之前有人给我说过这么一句话“内行看门道,外行看热闹!”,仔细琢磨一下还真的是那么一回事.对于怎么实现验证码,闲话不多 ...

  4. c# 验证码图片生成类

    using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D ...

  5. mvc验证码图片生成

    /// <summary> ///生成验证码 /// </summary> public class VerifyCode { /// <summary> /// ...

  6. django 验证码图片生成视图函数

    def verify_code(request): import random # 定义验证码图片背景颜色 宽和高 bgcolor = (random.randrange(20,180),random ...

  7. 通过python将图片生成字符画

    基础知识: 1.python基础知识   快速学习链接:https://www.shiyanlou.com/courses/214 2.linux命令行操作   快速学习链接:https://www. ...

  8. python识别图片生成字符模式

    此python文件来自D7哥, 放在这里备份. 用法 python3 PIL\&argparse.py 1.jpg -o test.txt --width 300 --height 300 p ...

  9. python imageio 图片生成gif

    #!/bin/python3 import matplotlib.pyplot as plt import imageio,os TIME_GAP=0.075 #两帧之间的时间间隔,秒为单位 FILE ...

随机推荐

  1. sql:group by和 max

    通过group by,having,max实现查询出每组里指定列中最大的内容 例如:我需要实现的功能是 获取每个模块中点击量最大的内容(表中有许多内容,内容里) 我写的查询语句如下 查询结果如下: 然 ...

  2. Django(67)drf搜索过滤和排序过滤

    前言 当我们需要对后台的数据进行过滤的时候,drf有两种,搜索过滤和排序过滤. 搜索过滤:比如我们想返回sex=1的,那么我们就可以从所有数据中进行筛选 排序过滤:比如我们想对价格进行升序排列,就可以 ...

  3. 题解 P5318 【【深基18.例3】查找文献】

    题目传送门 根据本蒟蒻细致粗略的分析 这明显是一道水题模(du)板(liu)题 可我竟然没有一遍AC; 为更好地食用本题解需要了解以下内容 1.dfs(大法师深搜) 2.bfs(冰法师广搜)/dij最 ...

  4. Windows操作系统添加永久静态路由

    1.比如:添加一条去往 10.10.10.0/24网段的静态路由,指定去往此网段的路由都走 172.20.153.254网关 route -p add 10.10.10.0 mask 255.255. ...

  5. 迁移Report Server DataBase时遇到的坑

    1.项目背景 由于历史原因,公司部分系统的Report是基于SQL Server Report Service搭建的,且Reporting Services 和Report Server DataBa ...

  6. 从 html 实现一个 react🎅

    前言 我们认为,React 是用 JavaScript 构建快速响应的大型 Web 应用程序的首选方式.它在 Facebook 和 Instagram 上表现优秀.官网地址 react 的理念是在于对 ...

  7. 关于Word转Markdown的工具Typora安装及使用

    简介 Typora是一款轻便简洁的Markdown编辑器,支持即时渲染技术,这也是与其他Markdown编辑器最显著的区别.即时渲染使得你写Markdown就想是写Word文档一样流畅自如,不像其他编 ...

  8. 1、mysql基础入门(2)

    1.4.常用非关系型数据库产品介绍: 1.Memcached(key-value)数据库:

  9. POJ 1696 Space Ant 点积计算夹角

    题意: 一只特别的蚂蚁,只能直走或者左转.在一个平面上,有很多株植物,这只蚂蚁每天需要进食一株,这只蚂蚁从起点为(0,miny)的点开始出发.求最多能活多少天 分析: 肯定是可以吃到所有植物的,以当前 ...

  10. 滑动窗口通用解leetcode字符串匹配问题

    滑动窗口,这玩意解决一些字符串匹配的题目是真的挺好用的,虽然本质还是双指针. 思路: 1.维护一个窗口,不断的向右边移动 2.满足要求后,移动左边,当不满足时,跳出. 3.重复1,2.得出答案. 下面 ...