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"> ...
随机推荐
- .NET Core入门程序
易百教程 https://www.yiibai.com/dotnet_core/dotnet_core_getting_started.html
- ByteBuffer使用实例
ByteBuffer作为JDK的字节流处理对象,这里举个小例子说明下用法,直接上代码: package com.wlf.netty.nettyserver; import org.junit.Asse ...
- php 验证rsa公钥和私钥是否正确
<?php /** * RSA加密 * * @param string $data 待加密数据 * @param string $publicKey 公钥 * @return string|fa ...
- 【430】BST and Splay Tree
参考:Hello, Splay! 目录: 1. Binary Search Tree 2. Splay Tree
- spring 使用Spring表达式(Spring EL)
Spring还提供了更灵活的注入方式,那就是Spring表达式,实际上Spring EL远比以上注入方式强大,我们需要学习它.Spring EL拥有很多功能. 使用Bean的id来引用Bean. •调 ...
- AWS 基础设施即代码(五)
基础设施即代码 概述 手动配置的挑战:可能因为人为错误导致缺乏可靠性,环境无法完全再现,同时需要额外文档 基础设施即代码,是软件开发中用于创建可重用.可维护.可扩展及可测试基础设施的技术.实践和工具, ...
- php面相对象类中成员
类中成员 一个类的内部可以有3种代码:属性.方法.类常量它们统称为“类中成员”. 一般属性 属性就是放在一个类中的变量. 定义形式: 形式1: var $v1 ; //定义不赋值 形式2: var ...
- PHP 与操作判断奇偶
/** * 判断奇偶数 * @param $n * @return int */ function isOdd($n){ // $a & $b And(按位与) 将把 $a 和 $b 中都为 ...
- MySQL引擎类型(三)
InnoDB: 1)经常更新的表,适合处理多重并发的更新请求. 2)支持事务. 3)可以从灾难中恢复(通过bin-log日志等). 4)外键约束.只有他支持外键. 5)支持自动增加列属性auto_in ...
- [转帖]Docker Hub上镜像发现挖矿蠕虫病毒,已导致2000台主机感染
Docker Hub上镜像发现挖矿蠕虫病毒,已导致2000台主机感染 https://www.kubernetes.org.cn/5951.html 本来想说可以用 official版本的镜像 但是一 ...