python3 pillow生成简单验证码图片的示例
作者:Shao 发布时间:2022-08-16 23:17:05
标签:python,pillow,验证码
使用Python的pillow模块 random 模块随机生成验证码图片,并应用到Django项目中
安装pillow
$ pip3 install pillow
生成验证码图片
\vericode.py
from PIL import Image,ImageDraw,ImageFont,ImageFilter
import random
#随机码 默认长度=1
def random_code(lenght=1):
code = ''
for char in range(lenght):
code += chr(random.randint(65,90))
return code
#随机颜色 默认颜色范围【1,255】
def random_color(s=1,e=255):
return (random.randint(s,e),random.randint(s,e),random.randint(s,e))
#生成验证码图片
#length 验证码长度
#width 图片宽度
#height 图片高度
#返回验证码和图片
def veri_code(lenght=4,width=160,height=40):
#创建Image对象
image = Image.new('RGB',(width,height),(255,255,255))
#创建Font对象
font = ImageFont.truetype('Arial.ttf',32)
#创建Draw对象
draw = ImageDraw.Draw(image)
#随机颜色填充每个像素
for x in range(width):
for y in range(height):
draw.point((x,y),fill=random_color(64,255))
#验证码
code = random_code(lenght)
#随机颜色验证码写到图片上
for t in range(lenght):
draw.text((40*t+5,5),code[t],font=font,fill=random_color(32,127))
#模糊滤镜
image = image.filter(ImageFilter.BLUR)
return code,image
应用
编写Django应用下的视图函数
\views.py
from . import vericode.py
from io import BytesIO
from django.http import HttpResponse
def verify_code(request):
f = BytesIO()
code,image = vericode.veri_code()
image.save(f,'jpeg')
request.session['vericode'] = code
return HttpResponse(f.getvalue())
def submit_xxx(request):
if request.method == "POST":
vericode = request.session.get("vericode").upper()
submitcode = request.POST.get("vericode").upper()
if submitcode == vericode:
return HttpResponse('ok')
return HttpResponse('error')
这里使用了Django的session,需要在Django settings.py的INSTALLED_APPS中添加'django.contrib.sessions'(默认添加)
verify_code视图函数将验证码添加到session中和验证码图片一起发送给浏览器,当提交表单到submit_xxx()时,先从session中获取验证码,再对比从表单中的输入的验证码。
这里只是简单说明,url配置和前端代码未给出。
来源:https://segmentfault.com/a/1190000011228983
0
投稿
猜你喜欢
- 进程和线程的区别和联系终于开始加深难度,来到进程和线程的知识点~单就这两个概念,就难倒过不少初学者—&mdash
- python语言本身没有提供const,但实际开发中经常会遇到需要使用const的情形,由于语言本身没有这种支出,因此需要使用一些技巧来实现
- 前言利用Python实现获取动态图表,废话不多说~让我们愉快地开始吧~开发工具Python版本: 3.6.4相关模块:re模块;reques
- 1. sys 模块Python 中的 sys 模块具有 argv 功能。当通过终端触发 main.py 的执行时,此功能将返回提供给 mai
- 前言以前在写C/C++代码时,可以在代码中预定义一些版本宏定义,然后再编译时从外部传入数据作为版本号。 golang代码不支持宏定义,如果每
- 前言大多数人只知道github是开源社区,可以用来做项目的版本管理,但是其实他还有一些其他功能和小彩蛋。有没有和我一样不想花钱去购置服务器的
- Python continue语句:当执行到 continue 语句时,将不再执行本次循环中 continue 语句接下来的部分,而是继续下
- 简介除ide的执行方式外,命令行的方式执行Python脚本是参数化程序执行的一种常见且简单的方法,正确处理命令行参数,可以提供给包含某种参数
- 本文实例为大家分享了python样条插值的具体实现代码,供大家参考,具体内容如下import numpy as npimport panda
- 最近无意中接触到了一篇文章,里面写了一个SQL的用法,是with...as,中午抽空记录一下用MySQL试了一下,发现并不支持该语法(版本:
- translate函数语法:translate(expr, from_strimg, to_string)简介:translate返回exp
- GO的锁和原子操作分享上次我们说到协程,我们再来回顾一下:协程类似线程,是一种更为轻量级的调度单位线程是系统级实现的,常见的调度方法是时间片
- python sys模块用法sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和我一起走进python的模块吧!sys模块的
- 不是很难哦,我们现在就可以实现VBScript在服务器端验证,就是下面的函数:<%FUNCTION TestString(S
- 使用 str.split() 方法将字符串转换为数组,例如 array = string.split(',')。 str.s
- 默认barplotimport seaborn as snsimport matplotlib.pyplot as plt import n
- 1、dayin() 作用:将id为dayin的内容,新建页面并打印,可解决打印某页面中的部分内容的问题。 使用方法:将要打印的内容通过&nb
- 前言这是我在搭建Django项目时候的过程,拿来总结记录,以备不时之需。项目采用nginx+uwsgi的搭配方式。项目依赖包采用 requi
- 论坛经常有人会问到用CSS如何美化Select标签,其实但凡你看到很酷的都是用javascript来实现的。昨天试着做了一下,基本实现的初级
- 在Python中创建进程有两种方式,第一种是:from multiprocessing import Processimport timed