django-生成随机验证码
pip3 install pillow
- pip3 install pillow
基本使用
from PIL import Image #导入模块
img=Image.new(mode="RGB",size=(120,40),color="yellow")
f=open("validCode.png","wb")
img.save(f,"png")
with open("validCode.png","rb") as f:
data=f.read()
return HttpResponse(data)
- from PIL import Image #导入模块
- img=Image.new(mode="RGB",size=(120,40),color="yellow")
- f=open("validCode.png","wb")
- img.save(f,"png")
- with open("validCode.png","rb") as f:
- data=f.read()
- return HttpResponse(data)
img = Image.new(mode='RGB', size=(120, 30), color=(255, 255, 255))
- img = Image.new(mode='RGB', size=(120, 30), color=(255, 255, 255))
img=Image.new(mode="RGB",size=(120,40),color="yellow")
draw=ImageDraw.Draw(img,mode='RGB')
draw.point([100,100],fill=255,255,255)
#第一个参数:表示坐标
#第二个参数:表示颜色
- img=Image.new(mode="RGB",size=(120,40),color="yellow")
- draw=ImageDraw.Draw(img,mode='RGB')
- draw.point([100,100],fill=255,255,255)
- #第一个参数:表示坐标
- #第二个参数:表示颜色
draw.line((100,100,300,100), fill=(255, 255, 255))
#第一个表示起始坐标和结束坐标
#第二个参数:表示颜色
- draw.line((100,100,300,100), fill=(255, 255, 255))
- #第一个表示起始坐标和结束坐标
- #第二个参数:表示颜色
img = Image.new(mode='RGB', size=(120, 30), color=(255, 255, 255))
draw = ImageDraw.Draw(img, mode='RGB')
draw.arc((100,100,300,300),0,90,fill="red")
# 第一个参数:表示起始坐标和结束坐标(圆要画在其中间)
# 第二个参数:表示开始角度
# 第三个参数:表示结束角度
# 第四个参数:表示颜色
- img = Image.new(mode='RGB', size=(120, 30), color=(255, 255, 255))
- draw = ImageDraw.Draw(img, mode='RGB')
- draw.arc((100,100,300,300),0,90,fill="red")
- # 第一个参数:表示起始坐标和结束坐标(圆要画在其中间)
- # 第二个参数:表示开始角度
- # 第三个参数:表示结束角度
- # 第四个参数:表示颜色
draw.text([0,0],'python',"red")
# 第一个参数:表示起始坐标
# 第二个参数:表示写入内容
# 第三个参数:表示颜色
- draw.text([0,0],'python',"red")
- # 第一个参数:表示起始坐标
- # 第二个参数:表示写入内容
- # 第三个参数:表示颜色
验证码的几种使用方式
#方式一
#通过静态文件的目录来定位路径
import os
path = os.path.join(settings.BASE_DIR,"static","img","ss.jpg") #BASE_DIR表示settings的上一级目录的上一级目录
with open(path,"rb") as f:
data=f.read()
#方式二
from PIL import Image #导入PIL模块
img=Image.new(mode="RGB",size=(120,40),color="yellow") #创建画笔
f=open("validCode.png","wb") #保存在本地
img.save(f,"png")
with open("validCode.png","rb") as f: #进行读取
data=f.read()
return HttpResponse(data) #然后返回给前端
'''
缺点:
会在服务端的根目录下产生一个文件,我们不应该让它产生文件
'''
#方式三
'''
把文件读到内存中去
'''
from io import BytesIO
from PIL import Image
img=Image.new(mode="RGB",size=(120,40),color="blue")
f=BytesIO()
img.save(f,"png")
data=f.getvalue()
return HttpResponse(data)
#方式四
'''
随机产生验证码
'''
# def text(self, xy, text, fill=None, font=None, anchor=None,*args, **kwargs):
from io import BytesIO #把内容保存到内存中
import random
from PIL import Image,ImageDraw,ImageFont #导入图画,画笔,字体
img = Image.new(mode="RGB", size=(120, 40), color=(random.randint(0,255),random.randint(0,255),random.randint(0,255)))
draw=ImageDraw.Draw(img,"RGB")
font=ImageFont.truetype("blog/static/font/kumo.ttf",25)
def fandomColor():
'''
生成随机颜色
:return:
'''
random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)
valid_list=[]
for i in range(5):
random_num=str(random.randint(0,9))
random_lower_zimu=chr(random.randint(65,90))
random_upper_zimu=chr(random.randint(97,122))
random_char=random.choice([random_num,random_lower_zimu,random_upper_zimu])
draw.text([5+i*24,10],random_char,(fandomColor()),font=font)
valid_list.append(random_char)
for i in range(100):
draw.point([random.randint(0, 5+i*24), random.randint(0,5+i*24 )], fill=fandomColor())
f=BytesIO()
img.save(f,"png")
data=f.getvalue()
valid_str="".join(valid_list)
print(valid_str)
request.session["keepValidCode"]=valid_str
return HttpResponse(data)
- #方式一
- #通过静态文件的目录来定位路径
- import os
- path = os.path.join(settings.BASE_DIR,"static","img","ss.jpg") #BASE_DIR表示settings的上一级目录的上一级目录
- with open(path,"rb") as f:
- data=f.read()
- #方式二
- from PIL import Image #导入PIL模块
- img=Image.new(mode="RGB",size=(120,40),color="yellow") #创建画笔
- f=open("validCode.png","wb") #保存在本地
- img.save(f,"png")
- with open("validCode.png","rb") as f: #进行读取
- data=f.read()
- return HttpResponse(data) #然后返回给前端
- '''
- 缺点:
- 会在服务端的根目录下产生一个文件,我们不应该让它产生文件
- '''
- #方式三
- '''
- 把文件读到内存中去
- '''
- from io import BytesIO
- from PIL import Image
- img=Image.new(mode="RGB",size=(120,40),color="blue")
- f=BytesIO()
- img.save(f,"png")
- data=f.getvalue()
- return HttpResponse(data)
- #方式四
- '''
- 随机产生验证码
- '''
- # def text(self, xy, text, fill=None, font=None, anchor=None,*args, **kwargs):
- from io import BytesIO #把内容保存到内存中
- import random
- from PIL import Image,ImageDraw,ImageFont #导入图画,画笔,字体
- img = Image.new(mode="RGB", size=(120, 40), color=(random.randint(0,255),random.randint(0,255),random.randint(0,255)))
- draw=ImageDraw.Draw(img,"RGB")
- font=ImageFont.truetype("blog/static/font/kumo.ttf",25)
- def fandomColor():
- '''
- 生成随机颜色
- :return:
- '''
- random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)
- valid_list=[]
- for i in range(5):
- random_num=str(random.randint(0,9))
- random_lower_zimu=chr(random.randint(65,90))
- random_upper_zimu=chr(random.randint(97,122))
- random_char=random.choice([random_num,random_lower_zimu,random_upper_zimu])
- draw.text([5+i*24,10],random_char,(fandomColor()),font=font)
- valid_list.append(random_char)
- for i in range(100):
- draw.point([random.randint(0, 5+i*24), random.randint(0,5+i*24 )], fill=fandomColor())
- f=BytesIO()
- img.save(f,"png")
- data=f.getvalue()
- valid_str="".join(valid_list)
- print(valid_str)
- request.session["keepValidCode"]=valid_str
- return HttpResponse(data)
验证码的局部刷新

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="/static/bootstrap-3.3.7/css/bootstrap.min.css">
<script src="/static/jquery-3.2.1.js"></script>
<script src="/static/bootstrap-3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<form class="form-horizontal">
{% csrf_token %}
<div class="form-group">
<label for="username" class="col-sm-2 control-label">用户名</label>
<div class="col-sm-4">
<input type="text" class="form-control" id="username" placeholder="用户名">
</div>
</div>
<div class="form-group">
<label for="inputPassword3" class="col-sm-2 control-label">Password</label>
<div class="col-sm-4">
<input type="password" class="form-control" id="password" placeholder="Password">
</div>
</div>
<div class="form-group">
<label for="validCode" class="col-sm-2 control-label">验证码</label>
<div class="col-sm-4">
<input type="text" class="form-control" id="validCode" placeholder="验证码">
<img src="/get_verification_img/" alt="" class="valid_code_img" >
<a class="refresh">刷新</a>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-default signlogin">Sign in</button>
</div>
<div class="col-sm-offset-2 col-sm-10">
</div>
</div>
</form>
<script>
$(".refresh").click(function () {
$(".valid_code_img")[0].src+="?";
});
$("img").click(function () {
$(this)[0].src+="?";
});
</script>
- x
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- <link rel="stylesheet" href="/static/bootstrap-3.3.7/css/bootstrap.min.css">
- <script src="/static/jquery-3.2.1.js"></script>
- <script src="/static/bootstrap-3.3.7/js/bootstrap.min.js"></script>
- </head>
- <body>
- <form class="form-horizontal">
- {% csrf_token %}
- <div class="form-group">
- <label for="username" class="col-sm-2 control-label">用户名</label>
- <div class="col-sm-4">
- <input type="text" class="form-control" id="username" placeholder="用户名">
- </div>
- </div>
- <div class="form-group">
- <label for="inputPassword3" class="col-sm-2 control-label">Password</label>
- <div class="col-sm-4">
- <input type="password" class="form-control" id="password" placeholder="Password">
- </div>
- </div>
- <div class="form-group">
- <label for="validCode" class="col-sm-2 control-label">验证码</label>
- <div class="col-sm-4">
- <input type="text" class="form-control" id="validCode" placeholder="验证码">
- <img src="/get_verification_img/" alt="" class="valid_code_img" >
- <a class="refresh">刷新</a>
- </div>
- </div>
- <div class="form-group">
- <div class="col-sm-offset-2 col-sm-10">
- <button type="submit" class="btn btn-default signlogin">Sign in</button>
- </div>
- <div class="col-sm-offset-2 col-sm-10">
- </div>
- </div>
- </form>
- <script>
- $(".refresh").click(function () {
- $(".valid_code_img")[0].src+="?";
- });
- $("img").click(function () {
- $(this)[0].src+="?";
- });
- </script>
django-生成随机验证码的更多相关文章
- Django中生成随机验证码(pillow模块的使用)
Django中生成随机验证码 1.html中a标签的设置 <img src="/get_validcode_img/" alt=""> 2.view ...
- Java生成随机验证码
package com.tg.snail.core.util; import java.awt.Color; import java.awt.Font; import java.awt.Graphic ...
- Python 生成随机验证码
Python生成随机验证码 Python生成随机验证码,需要使用PIL模块. 安装: 1 pip3 install pillow 基本使用 1. 创建图片 1 2 3 4 5 6 7 8 9 fro ...
- Python生成随机验证码
Python生成随机验证码,需要使用PIL模块. 安装: pip3 install pillow 基本使用 1.创建图片 from PIL import Image img = Image.new(m ...
- Python使用PIL模块生成随机验证码
PIL模块的安装 pip3 install pillow 生成随机验证码图片 import random from PIL import Image, ImageDraw, ImageFont fro ...
- C#生成随机验证码例子
C#生成随机验证码例子: 前端: <tr> <td width=" align="center" valign="top"> ...
- pillow实例 | 生成随机验证码
1 PIL(Python Image Library) PIL是Python进行基本图片处理的package,囊括了诸如图片的剪裁.缩放.写入文字等功能.现在,我便以生成随机验证码为例,讲述PIL的基 ...
- struts2生成随机验证码图片
之前想做一个随机验证码的功能,自己也搜索了一下别人写的代码,然后自己重新用struts2实现了一下,现在将我自己实现代码贴出来!大家有什么意见都可以指出来! 首先是生成随机验证码图片的action: ...
- python模块之PIL模块(生成随机验证码图片)
PIL简介 什么是PIL PIL:是Python Image Library的缩写,图像处理的模块.主要的类包括Image,ImageFont,ImageDraw,ImageFilter PIL的导入 ...
- C#生成随机验证码
使用YZMHelper帮助类即可 using System; using System.Web; using System.Drawing; using System.Security.Cryptog ...
随机推荐
- [kfaka] Apache Kafka:下一代分布式消息系统
简介 Apache Kafka是分布式发布-订阅消息系统.它最初由LinkedIn公司开发,之后成为Apache项目的一部分.Kafka是一种快速.可扩展的.设计内在就是分布式的,分区的和可复制的提交 ...
- [转]ASP.NET MVC 5 - 验证编辑方法(Edit method)和编辑视图(Edit view)
在本节中,您将验证电影控制器生成的编辑方法(Edit action methods)和视图.但是首先将修改点代码,使得发布日期属性(ReleaseDate)看上去更好.打开Models \ Movie ...
- ASP------字符串与HTML格式相互转换
代码: 1.字符串转HTML HttpUtility.HtmlDecode(" is ") 或者 Server.UrlDecode(" is ") 2.HTML ...
- Extjs学习笔记--(二)
1.配置实用Extjs <link href="Extjs/resources/css/ext-all.css" rel="stylesheet" /&g ...
- 什么是“类数组对象”,在jquer中怎样将类数组对象转换为数组对象
类数组对象的定义: 所谓"类数组对象"就是一个常规的Object对象,如$("div")但它和数组对象非常相似:具备length属性, 并以0.1.2.3……等 ...
- jQuery中的$.each的用法
$.each(Array,function(i,value){ this; //this指向当前对象 i; //i表示当前下标 value; //value表示当前元素 })
- 谈一谈php://input和php://output
对一php://input介绍,PHP官方手册文档有一段话对它进行了很明确地概述. php://input 是个可以访问请求的原始数据的只读流. POST 请求的情况下,最好使用 php://inpu ...
- 【Mysql】大数据处理优化方法
1.应尽量避免在 where 子句中使用 != 或 <> 操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 orde ...
- sql数据库中如何根据身份证号判断性别
身份证号有15位和18位的..在sql中该如何判断? I_sex ,) ,) then '男' else '女' END
- 1.执行环境判断 window 或 self
window or self ? 在 underscore 的判断所处环境的代码中,似乎我们没有看到 window 对象的引用,其实,在浏览器环境下,self 保存的就是当前 window 对象的引用 ...