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. PHP如何实现静态的链式调用

    Db::table('**')->where('***','***')->order('***')->find('**'); 想这种应该怎么实现 public function ta ...

  2. Java基础 import 要在所有的class前面

        JDK :OpenJDK-11      OS :CentOS 7.6.1810      IDE :Eclipse 2019‑03 typesetting :Markdown   code ...

  3. shell编程系列5--数学运算

    shell编程系列5--数学运算 方法1 expr $num1 operator $num2 方法2 $(($num1 operator $num2)) expr操作符对照表1 操作符 含义 num1 ...

  4. Scala里面的排序函数的使用

    排序方法在实际的应用场景中非常常见,Scala里面有三种排序方法,分别是: sorted,sortBy ,sortWith 分别介绍下他们的功能: (1)sorted 对一个集合进行自然排序,通过传递 ...

  5. 全面系统Python3入门+进阶-1-7 课程内容与特点

    结束

  6. 123457123456#0#-----com.ppGame.huaHua65--前拼后广--儿童填色-pp

    com.ppGame.huaHua65--前拼后广--儿童填色-pp

  7. 【WAP触屏】YouKu视频弹窗播放组件

    (function(window){ /* youku api : http://open.youku.com/tools 调用方法 : LM_youkuPop.open('XODI5Mzk3MDAw ...

  8. Difference between Process and thread?

    What are the differences between a process and a thread? How are they similar? How can 2 threads com ...

  9. Java基础教程:多线程杂谈——Volatile

    Java基础教程:多线程杂谈——Volatile 引入Volatile Java语言提供了一种稍弱的同步机制,即Volatile变量,用来确保将变量的更新操作通知到其他线程.当把变量声明为Volati ...

  10. windows下 pip下载包到指定目录

    pip download -r requirements.txt -d G:\PythonVirtualenv\packages python setup.py install