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模块的使用)的更多相关文章

  1. Python使用PIL模块生成随机验证码

    PIL模块的安装 pip3 install pillow 生成随机验证码图片 import random from PIL import Image, ImageDraw, ImageFont fro ...

  2. pillow实例 | 生成随机验证码

    1 PIL(Python Image Library) PIL是Python进行基本图片处理的package,囊括了诸如图片的剪裁.缩放.写入文字等功能.现在,我便以生成随机验证码为例,讲述PIL的基 ...

  3. Python 生成随机验证码

    Python生成随机验证码  Python生成随机验证码,需要使用PIL模块. 安装: 1 pip3 install pillow 基本使用 1. 创建图片 1 2 3 4 5 6 7 8 9 fro ...

  4. Python生成随机验证码

    Python生成随机验证码,需要使用PIL模块. 安装: pip3 install pillow 基本使用 1.创建图片 from PIL import Image img = Image.new(m ...

  5. Java生成随机验证码

    package com.tg.snail.core.util; import java.awt.Color; import java.awt.Font; import java.awt.Graphic ...

  6. Django中生成PDF(一)

    Django中生成PDF(一) 需求描述:     某网站与其用户达成一致的协议,每份协议中都有用户相关的独特信息,且还需要生成PDF并存档.PDF文件中需要有企业LOGO.文字描述等信息.其展现形式 ...

  7. .NET中生成动态验证码

    .NET中生成动态验证码 验证码是图片上写上几个字,然后对这几个字做特殊处理,如扭曲.旋转.修改文字位置,然后加入一些线条,或加入一些特殊效果,使这些在人类能正常识别的同时,机器却很难识别出来,以达到 ...

  8. 星际SC地图制作中生成随机位置,也包括所有需要随机的效果

    星际SC地图制作中生成随机位置,也包括所有需要随机的效果 利用单位 kakaru T 开头那个, kakaru是随机变化位置 注意kakaru的放置位置和占用格子大小,kakaru周围放上LOCATI ...

  9. C#生成随机验证码例子

    C#生成随机验证码例子: 前端: <tr> <td width=" align="center" valign="top"> ...

随机推荐

  1. Docs-.NET-C#-指南-语言参考-预处理器指令:#pragma(C# 参考)

    ylbtech-Docs-.NET-C#-指南-语言参考-预处理器指令:#pragma(C# 参考) 1.返回顶部 1. #pragma(C# 参考) 2015/07/20 #pragma 为编译器给 ...

  2. Ionic4.x、Cordova Android 检测应用版本号、服务器下载文件以及实现App自动升级、安装

    Android App 升级执行流程 1.获取本地版本号 2.请求服务器获取服务器版本号 3.本地版本和服务器版本不一致提示升级,弹窗提示用户是否更新 4.用户确定升级,调用文件传输方法下载 apk ...

  3. flutter SnackBar 底部消息提示

    具有可选操作的轻量级消息提示,在屏幕的底部显示 文档:https://api.flutter.dev/flutter/material/SnackBar-class.html demo: import ...

  4. Influxdb修改数据保留策略

    retention policy: 存储策略,用于设置数据保留的时间,每个数据库刚开始会自动创建一个默认的存储策略 autogen,数据保留时间为永久,之后用户可以自己设置,例如保留最近2小时的数据. ...

  5. 算法习题---5-2Ducci序列(UVa1594)

    一:题目 对于一个n元组(a1, a2, …, an),可以对于每个数求出它和下一个数的差的绝对值,得到一个新的n元组(|a1-a2|, |a2-a3|, …, |an-a1|).重复这个过程,得到的 ...

  6. 【Linux】反向代理

    Nginx server { root /data/wwwroot/; server_name www.test.com; location / { proxy_http_version 1.1; p ...

  7. SpringCloud学习成长之十四 服务注册(consul)

    这篇文章主要介绍 spring cloud consul 组件,它是一个提供服务发现和配置的工具.consul具有分布式.高可用.高扩展性. 一.consul 简介 consul 具有以下性质: 服务 ...

  8. jenkins编译时文件存放的位置

    1.首先随便打包编译一下 2.查看编译执行的目录 [root@bogon ~]# ls /root/.jenkins/workspace/pipline-test/ CHANGE_LOGS.html ...

  9. MySQL中事务的隔离级别

    MySQl InnoDB存储引擎实现SQL标准的4种隔离级别(RU,RC,RR,serializable),用来限定事务内外的哪些改变时可见的,哪些时不可见的.低级别的隔离级一般支持更高的并发处理,并 ...

  10. MySQL学习笔记——MySQL启动过程(一)

    首先去官网或者github下载MySQL5.7的源码. 官网地址:https://dev.mysql.com/downloads/mysql/ github地址:https://github.com/ ...