Django中生成随机验证码(pillow模块的使用)
Django中生成随机验证码
1、html中a标签的设置
<img src="/get_validcode_img/" alt="">
2、views中的get2、views中的getvalidcode_img设置
导入文件
import json
import os
import random
from django.contrib import auth
from django.shortcuts import render, redirect, HttpResponse
from django.forms import Form
from django.forms import fields
from django.forms import widgets
from django.core.exceptions import ValidationError
from django.conf import settings
from PIL import Image, ImageDraw, ImageFont
from io import BytesIO
方法配置
def get_validcode_img(request):
color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
# 生成一个颜色随机的大小为160,30的图片
img = Image.new(mode="RGB", size=(160, 30), color=(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)))
# 设置图片的绘制颜色
draw = ImageDraw.Draw(img, "RGB")
# 设置图片的绘制字体(只写字体名,会默认在系统的Fonts下去找)
# font_path = os.path.join(settings.BASE_DIR, "static", "font", "kumo.ttf")
# font = ImageFont.truetype(font_path, 25)
font = ImageFont.truetype(r'C:\Windows\Fonts\Arial.ttf', 25)
# font = ImageFont.truetype(r'C:\中文\kumo.ttf', 25) # 中文路径无法识别 # 设置图片上的字符串
valid_list = []
for i in range(5):
random_num = str(random.randint(0, 9))
random_letter_low = chr(random.randint(65, 90))
random_letter_upper = chr(random.randint(96, 122))
random_char = random.choice([random_num, random_letter_low, random_letter_upper]) # 随机选择字符(数字,大小写字母)
# 通过draw.text方法,设置图片上字符串的x,y坐标,字符串,颜色,字体(for循环5次,生成5个字符的验证码)
draw.text([5+i*25, 10], random_char, (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)), font=font)
valid_list.append(random_char)
# 获取一个内存中的文件句柄
f = BytesIO()
# 在文件句柄中写入文件
img.save(f, 'png')
# 取出文件
data = f.getvalue()
# 转换成字符串
valid_str = "".join(valid_list)
print(valid_str) # 把验证码保存在session中,当用户出入验证码发送请求的时候,把用户输入的数据和session中的验证码做对比
request.session["validcode"] = valid_str
return HttpResponse(data)
三、 Ajax请求配置
$(function(){
$("#login_btn").click(function () {
var username = $("#username").val();
var password = $("#password").val();
var validcode = $("#validcode").val();
$.ajax({
url: "/login/",
type: "POST",
data : {"username":username, "password":password, "validcode":validcode},
headers: {"X-CSRFToken": $.cookie("csrftoken")}, //配置csrftoken
success: function (data) {
console.log(data);
var response = JSON.parse(data);
if (response["is_login"]){
self.location.href = ("/index/")
}else{
$(".error").html(response["error_msg"]).css("color","red")
}
}
})
})
})
四、login登录函数配置
def login(request):
if request.method == "GET":
return render(request, "login.html")
elif request.method == "POST":
print(request.POST)
# 1,获取用户输入信息
username = request.POST.get("username")
password = request.POST.get("password")
validcode = request.POST.get("validcode")
session_validcode = request.session.get('validcode')
# 设置ajax请求的返回数据
login_response = {"is_login": False, "error_msg": None}
# 首先验证验证码输入是否正确
if validcode.upper() == session_validcode.upper():
# 通过auth模块,验证用户名和密码是否正确
user = auth.authenticate(username=username, password=password)
print(user)
if user:
# 验证成功则在返回数据中标志True
login_response['is_login'] = True
# 同时设置用户session
auth.login(request, user) # request.session[is_login] = True
else:
login_response['error_msg'] = "用户名或密码错误"
else:
login_response['error_msg'] = "验证码错误"
print(login_response)
return HttpResponse(json.dumps(login_response))
Django中生成随机验证码(pillow模块的使用)的更多相关文章
- Python使用PIL模块生成随机验证码
PIL模块的安装 pip3 install pillow 生成随机验证码图片 import random from PIL import Image, ImageDraw, ImageFont fro ...
- pillow实例 | 生成随机验证码
1 PIL(Python Image Library) PIL是Python进行基本图片处理的package,囊括了诸如图片的剪裁.缩放.写入文字等功能.现在,我便以生成随机验证码为例,讲述PIL的基 ...
- 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 ...
- Java生成随机验证码
package com.tg.snail.core.util; import java.awt.Color; import java.awt.Font; import java.awt.Graphic ...
- Django中生成PDF(一)
Django中生成PDF(一) 需求描述: 某网站与其用户达成一致的协议,每份协议中都有用户相关的独特信息,且还需要生成PDF并存档.PDF文件中需要有企业LOGO.文字描述等信息.其展现形式 ...
- .NET中生成动态验证码
.NET中生成动态验证码 验证码是图片上写上几个字,然后对这几个字做特殊处理,如扭曲.旋转.修改文字位置,然后加入一些线条,或加入一些特殊效果,使这些在人类能正常识别的同时,机器却很难识别出来,以达到 ...
- 星际SC地图制作中生成随机位置,也包括所有需要随机的效果
星际SC地图制作中生成随机位置,也包括所有需要随机的效果 利用单位 kakaru T 开头那个, kakaru是随机变化位置 注意kakaru的放置位置和占用格子大小,kakaru周围放上LOCATI ...
- C#生成随机验证码例子
C#生成随机验证码例子: 前端: <tr> <td width=" align="center" valign="top"> ...
随机推荐
- 003-guava 集合-不可变集合
一.概述 二.使用 2.1.不可变集合 1.为什么使用不可变集合 不可变对象有很多优点,包括: 当对象被不可信的库调用时,不可变形式是安全的:不可变对象被多个线程调用时,不存在竞态条件问题不可变集合不 ...
- Qt获取时间戳作为图片名
Qt获取时间戳作为图片名 //保存图片 void SaveRealsenseImg() { QString picIndexName = dataSavePath; picIndexName.appe ...
- SftpUtil FTP文件上传
package ftputil; import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream; ...
- 【PHP】php7.2报错The each() function is deprecated. This message will be suppressed on furthe
php7.2以上 废除了 each()方法,项目中用到的地方会出现以下报错 The each() function is deprecated. This message will be suppre ...
- RabbitMQ 入门教程(PHP版) 第一部分:Hello World
abbitMQ是一个消息代理.它的核心原理非常简单:接收和发送消息.你可以把它想像成一个邮局:你把信件放入邮箱,邮递员就会把信件投递到你的收件人处.在这个比喻中,RabbitMQ是一个邮箱.邮局.邮递 ...
- MySQL中事务的隔离级别
MySQl InnoDB存储引擎实现SQL标准的4种隔离级别(RU,RC,RR,serializable),用来限定事务内外的哪些改变时可见的,哪些时不可见的.低级别的隔离级一般支持更高的并发处理,并 ...
- 【opencv基础-VxWorks】话说图像格式转换-COLOR_YUV2BGR_YUY2
前言 基于Vxworks的WindRiver获取摄像头图像进行处理,需要先进行转换,对于转换格式博主有点疑问.本文对此作出解释,若有错误,请交流指正. README.md The video came ...
- 【linux学习笔记五】帮助命令
man //查看ls作用 man ls man -f命令 相当于 whatis命令 --help ls --help help help shell help cd info详细命令帮助
- vue项目开发优化
1 按需引入ui组件 比如elementUI,不要直接在main.js中全局引入所有的组件,可以根据elementui的说明文件,按需引入 项目中的组件 2 异步引入路由组件 使用 { path:'/ ...
- SpringBoot学习笔记:动态数据源切换
SpringBoot学习笔记:动态数据源切换 数据源 Java的javax.sql.DataSource接口提供了一种处理数据库连接的标准方法.通常,DataSource使用URL和一些凭据来建立数据 ...