un1queyan

  • 主页
  • 随笔
  • 归档
所有文章 友链 关于我

un1queyan

  • 主页
  • 随笔
  • 归档

图片验证码


阅读数: 次    2021-05-07

图片验证码

生成验证码代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from PIL import Image,ImageDraw,ImageFont,ImageFilter

import random


def check_code(width=120, height=30, char_length=5, font_file='Monaco.ttf', font_size=28):
code = []
img = Image.new(mode='RGB', size=(width, height), color=(255, 255, 255))
draw = ImageDraw.Draw(img, mode='RGB')

def rndChar():
"""
生成随机字母
:return:
"""
return chr(random.randint(65, 90))

def rndColor():
"""
生成随机颜色
:return:
"""
return (random.randint(0, 255), random.randint(10, 255), random.randint(64, 255))

# 写文字
font = ImageFont.truetype(font_file, font_size)
for i in range(char_length):
char = rndChar()
code.append(char)
h = random.randint(0, 4)
draw.text([i * width / char_length, h], char, font=font, fill=rndColor())

# 写干扰点
for i in range(40):
draw.point([random.randint(0, width), random.randint(0, height)], fill=rndColor())

# 写干扰圆圈
for i in range(40):
draw.point([random.randint(0, width), random.randint(0, height)], fill=rndColor())
x = random.randint(0, width)
y = random.randint(0, height)
draw.arc((x, y, x + 4, y + 4), 0, 90, fill=rndColor())

# 画干扰线
for i in range(5):
x1 = random.randint(0, width)
y1 = random.randint(0, height)
x2 = random.randint(0, width)
y2 = random.randint(0, height)

draw.line((x1, y1, x2, y2), fill=rndColor())

img = img.filter(ImageFilter.EDGE_ENHANCE_MORE)
return img, ''.join(code)
# if __name__ == '__main__':
# image_object,code = check_code()
# print(code)
# # with open('code.png', 'wb') as f:
# # image_object.save(f,format='png')
# from io import BytesIO
# stream = BytesIO()
# image_object.save(stream,'png')
# stream.getvalue()

把图片存在内存中,并在session中设置超时时间,更新的话可以写个script让原地址url加上个?没请求一次url变一次相当于重新请求

1
2
3
4
5
6
7
8
9
10
11
12
13
def image_code(request):
'''生成图片验证码'''
from utils.image_code import check_code
from io import BytesIO
# # 把图片写到内存中
image_object,code = check_code()
stream = BytesIO()
image_object.save(stream,'png')
request.session['image_code'] = code
# 超时时间60s
request.session.set_expiry(60)

return HttpResponse(stream.getvalue())
赏

老板大气

支付宝
微信
  • Django

扫一扫,分享到微信

微信分享二维码
python操作MySQL
MySQL基础总结
  1. 1. 图片验证码
© 2022 un1queyan
Hexo Theme Yilia by Litten 本站总访问量次
  • 所有文章
  • 友链
  • 关于我

tag:

  • java基础
  • java
  • 随笔
  • Java基础
  • JavaScript
  • mybatis
  • MySQL
  • Nginx
  • spring
  • Shiro
  • django
  • docker
  • elasticsearch
  • 计算机网络
  • linux
  • Linux
  • maven
  • mongodb
  • Django
  • python
  • sqlalchemy
  • redis
  • rabbitMQ
  • 算法练习
  • 设计模式
  • 数据结构
  • jvm
  • 计算机基础

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

  • Mybatis-Plus学习笔记

    2022-01-31

    #mybatis

  • mongodb学习笔记

    2022-01-16

    #mongodb

  • dao,dto,vo,po,pojo,bo的区别

    2021-12-06

    #设计模式

  • docker安装elk

    2021-11-10

  • Shiro安全框架

    2021-09-09

    #Shiro

  • elasticsearch学习笔记

    2021-07-14

    #elasticsearch

  • rabbitMQ学习笔记

    2021-07-11

    #rabbitMQ

  • JVM学习笔记

    2021-07-08

    #Java基础

  • Java学习笔记

    2021-07-08

    #Java基础

  • Mybatis

    2021-06-27

    #spring

  • springMVC源码

    2021-06-24

    #spring

  • springMVC框架

    2021-06-21

    #spring

  • 计算机网络

    2021-06-19

    #计算机基础

  • 微信小程序学习笔记

    2021-06-12

    #Django

  • maven

    2021-06-11

    #maven

  • MySQL高级

    2021-06-06

    #MySQL

  • HashMap源码

    2021-05-21

    #java基础

  • Java NIO

    2021-05-21

    #java基础

  • docker学习笔记

    2021-05-21

    #docker

  • JVM类加载过程

    2021-05-15

    #java

  • linux操作汇总

    2021-05-15

    #linux

  • osi七层模型

    2021-05-12

    #计算机网络

  • 项目准备

    2021-05-12

    #django

  • rest framework

    2021-05-09

    #django

  • python操作MySQL

    2021-05-08

    #sqlalchemy

  • 图片验证码

    2021-05-06

    #Django

  • MySQL基础总结

    2021-05-06

  • 随笔

    2021-05-05

  • Nginx笔记

    2021-04-28

    #Nginx

  • redis学习笔记

    2021-04-27

    #redis

  • Java中的逃逸分析

    2021-04-22

    #Java基础

  • python内存管理与垃圾回收机制

    2021-03-31

    #python

  • 几种常见的排序算法

    2021-03-30

    #算法练习

  • 建造者模式

    2021-03-15

    #设计模式

  • 抽象工厂模式

    2021-03-15

    #设计模式

  • 抽象工厂模式

    2021-03-14

    #设计模式

  • 工厂方法模式

    2021-03-13

    #设计模式

  • 简单工厂模式

    2021-03-12

    #设计模式

  • Linux下安装python

    2021-03-11

    #Linux

  • ajax

    2021-02-28

  • redis列表相关的操作

    2021-02-10

    #redis

  • redis哈希表相关的操作

    2021-02-10

    #redis

  • StringTable

    2021-02-09

    #java

  • redis字符串相关的操作

    2021-02-09

    #redis

  • 观察者模式

    2021-02-09

    #设计模式

  • Http请求的声明周期

    2021-01-08

    #随笔

  • redis哨兵

    2020-12-24

    #redis

  • 单例模式

    2020-12-24

    #设计模式

  • 类加载过程详解

    2020-12-24

    #jvm

  • redis主从同步

    2020-12-12

    #redis

  • 对象的实例化、内存布局和访问定位

    2020-10-19

    #Java基础

  • JVM解释器与编译器

    2020-10-18

    #Java基础

  • JVM运行时的数据结构

    2020-10-18

    #Java基础

  • orm基本操作

    2020-10-18

    #Django

  • JVM指令手册

    2020-10-17

    #java

  • float计算的底层原理

    2020-08-06

  • 2020-06-15

    #数据结构

  • JavaScript学习笔记

    2020-05-07

    #JavaScript

  • 编写指南

    2019-12-06

  • 友情链接1
  • 友情链接2
  • 友情链接3
  • 友情链接4
  • 友情链接5
  • 友情链接6
很惭愧

只做了一点微小的工作
谢谢大家