【Django 026】利用Pillow生成验证码图片结合session用于登录验证图文详解

光是用户名和密码的登陆验证方式还是很难阻止爬虫的步伐,毕竟cookie或session等会话机制的存在,使得爬虫在自动登陆后变得一劳永逸。因为不借助外力爬虫本身是很难去识别图片信息的,所以如果能结合图片验证码,会使得反爬变得更容易一点。这一篇文章我们就一起来学习下如何自己绘制出图片验证码,以及如何在登陆中应用它。

我是T型人小付,一位坚持终身学习的互联网从业者。喜欢我的博客欢迎在csdn上关注我,如果有问题欢迎在底下的评论区交流,谢谢。

操作环境

先总结下我的操作环境:

  • Centos 7
  • Python 3.7
  • Pycharm 2019.3
  • Django 2.2
  • Pillow 5.3

因为Django长期支持版本2.2LTS和前一个长期支持版本1.11LTS有许多地方不一样,需要小心区分。

Pillow绘图基本操作

虽然说有很多插件能帮助我们完成验证码这个事情,但是知其然还得知其所以然,我们通过Pillow原生绘图来理清验证码绘制和验证的原理有助于我们处理更多的绘图相关的需求。

工欲善其事必先利其器,首先来看一下Pillow这个工具画图的基本操作。

准备工具

有三个对象要准备好:

  • Image对象,可以理解为一块画布
  • ImageDraw对象,可以理解为一块画笔,是绘图时的主要操作对象,需要和Image对象绑定
  • ImageFont对象,字体对象

首先从Pillow导入这三个类,并生成实例,需要注意的是因为历史遗留问题,Python3里面虽然安装的是Pillow,但是导入的时候还是从PIL进行导入

from PIL import Image, ImageDraw, ImageFont

生成画布命令如下

Image.new(mode,size,color=0)
  • mode可以是彩色图片用到的RGB模式,也可以是计算机处理常用的灰度图片的L模式。如果是RGB模式,所有的颜色都是三元素元组,如果是L模式,所有的颜色都是单值
  • size是一个二元元组,分别是pixel为单位的宽和高。需要注意计算机中的坐标都是以左上角为原点,左边为x,下面为y
  • color是画布的背景色,根据前面的mode进行设置

例如生成一块白色画布

mode = 'RGB'
bg_size = (300, 100)
bg_color = (255, 255, 255)

img = Image.new(mode, bg_size, bg_color)
img.show()

之后显示如下
1-image.png

生成画笔命令如下

ImageDraw.Draw(im, mode=None)
  • im是一个Image对象,画笔必须要和画布绑定才能操作
  • mode填一个和画布一样的模式即可

生成一个画笔,绑定上面的画布

draw = ImageDraw.Draw(img, mode)

生成字体命令如下

ImageFont.truetype(
    ['font=None', 'size=10', 'index=0', "encoding=''", 'layout_engine=None'],
)

通常指定字体和大小即可,而且实际赋值的时候不用写为list

  • font是一
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值