Django中生成随机验证码

Django中生成随机验证码

1、html中a标签的设置

1 <img src="/get_validcode_img/" alt="">

2、views中的get2、views中的getvalidcode_img设置

导入文件

 1 import json
 2 import os
 3 import random
 4 from django.contrib import auth
 5 from django.shortcuts import render, redirect, HttpResponse
 6 from django.forms import Form
 7 from django.forms import fields
 8 from django.forms import widgets
 9 from django.core.exceptions import ValidationError
10 from django.conf import settings
11 from PIL import Image, ImageDraw, ImageFont
12 from io import BytesIO

方法配置

 1 def get_validcode_img(request):
 2     color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
 3     # 生成一个颜色随机的大小为160,30的图片
 4     img = Image.new(mode="RGB", size=(160, 30), color=(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)))
 5     # 设置图片的绘制颜色
 6     draw = ImageDraw.Draw(img, "RGB")
 7     # 设置图片的绘制字体(只写字体名,会默认在系统的Fonts下去找)
 8     # font_path = os.path.join(settings.BASE_DIR, "static", "font", "kumo.ttf")
 9     # font = ImageFont.truetype(font_path, 25)
10     font = ImageFont.truetype(r‘C:\Windows\Fonts\Arial.ttf‘, 25)
11     # font = ImageFont.truetype(r‘C:\中文\kumo.ttf‘, 25)  # 中文路径无法识别
12
13     # 设置图片上的字符串
14     valid_list = []
15     for i in range(5):
16         random_num = str(random.randint(0, 9))
17         random_letter_low = chr(random.randint(65, 90))
18         random_letter_upper = chr(random.randint(96, 122))
19         random_char = random.choice([random_num, random_letter_low, random_letter_upper])  # 随机选择字符(数字,大小写字母)
20         # 通过draw.text方法,设置图片上字符串的x,y坐标,字符串,颜色,字体(for循环5次,生成5个字符的验证码)
21         draw.text([5+i*25, 10], random_char, (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)), font=font)
22         valid_list.append(random_char)
23     # 获取一个内存中的文件句柄
24     f = BytesIO()
25     # 在文件句柄中写入文件
26     img.save(f, ‘png‘)
27     # 取出文件
28     data = f.getvalue()
29     # 转换成字符串
30     valid_str = "".join(valid_list)
31     print(valid_str)
32
33     # 把验证码保存在session中,当用户出入验证码发送请求的时候,把用户输入的数据和session中的验证码做对比
34     request.session["validcode"] = valid_str
35     return HttpResponse(data)

三、 Ajax请求配置

 1 $(function(){
 2     $("#login_btn").click(function () {
 3         var username = $("#username").val();
 4         var password = $("#password").val();
 5         var validcode = $("#validcode").val();
 6
 7         $.ajax({
 8             url: "/login/",
 9             type: "POST",
10             data : {"username":username, "password":password, "validcode":validcode},
11             headers: {"X-CSRFToken": $.cookie("csrftoken")},  //配置csrftoken
12             success: function (data) {
13                 console.log(data);
14                 var response = JSON.parse(data);
15                 if (response["is_login"]){
16                     self.location.href = ("/index/")
17                 }else{
18                     $(".error").html(response["error_msg"]).css("color","red")
19                 }
20             }
21         })
22     })
23 })

四、login登录函数配置

 1 def login(request):
 2     if request.method == "GET":
 3         return render(request, "login.html")
 4     elif request.method == "POST":
 5         print(request.POST)
 6         # 1,获取用户输入信息
 7         username = request.POST.get("username")
 8         password = request.POST.get("password")
 9         validcode = request.POST.get("validcode")
10         session_validcode = request.session.get(‘validcode‘)
11         # 设置ajax请求的返回数据
12         login_response = {"is_login": False, "error_msg": None}
13         # 首先验证验证码输入是否正确
14         if validcode.upper() == session_validcode.upper():
15             # 通过auth模块,验证用户名和密码是否正确
16             user = auth.authenticate(username=username, password=password)
17             print(user)
18             if user:
19                 # 验证成功则在返回数据中标志True
20                 login_response[‘is_login‘] = True
21                 # 同时设置用户session
22                 auth.login(request, user)   # request.session[is_login] = True
23             else:
24                 login_response[‘error_msg‘] = "用户名或密码错误"
25         else:
26             login_response[‘error_msg‘] = "验证码错误"
27         print(login_response)
28         return HttpResponse(json.dumps(login_response))

原文地址:https://www.cnblogs.com/hongdoudou/p/12635321.html

时间: 2024-10-07 01:00:57

Django中生成随机验证码的相关文章

java 中生成随机验证码

1.导包 2. public void generateVCode() throws FileNotFoundException, IOException { VerifyCode verifyCode=new VerifyCode(); BufferedImage bi=verifyCode.getImage(); System.out.println(verifyCode.getText()); VerifyCode.output(bi, new FileOutputStream("E:/a

Python 生成随机验证码

Python生成随机验证码 Python生成随机验证码,需要使用PIL模块. 安装: 1 pip3 install pillow 基本使用 1. 创建图片 1 2 3 4 5 6 7 8 9 from PIL import Image img = Image.new(mode='RGB', size=(120, 30), color=(255, 255, 255)) # 在图片查看器中打开 # img.show()  # 保存在本地 with open('code.png','wb') as f

android 客户端生成随机验证码的实现

由于项目中要用到验证码,自己找了些资料,试着就把这个验证码给做了出来,代码不是很多,比较的简单,下面给大家看看我是怎么实现该功能的: 源码地址下载:http://download.csdn.net/detail/u014608640/7268905 首先当然是写XML咯,贴上代码 <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" andr

如何生成随机验证码

Python生成随机验证码 Python生成随机验证码,需要使用PIL模块. 安装: pip3 install pillow 基本使用 1. 创建图片 from PIL import Image img = Image.new(mode='RGB', size=(120, 30), color=(255, 255, 255)) # 在图片查看器中打开 # img.show() # 保存在本地 with open('code.png','wb') as f: img.save(f,format='

pillow实例 | 生成随机验证码

1 PIL(Python Image Library) PIL是Python进行基本图片处理的package,囊括了诸如图片的剪裁.缩放.写入文字等功能.现在,我便以生成随机验证码为例,讲述PIL的基本用法. PIL库似乎已经被人抛弃,就为更新,上次使用时竟然不能用show()直接将图片,在系统默认的图片管理器中打开.好在pillow,一个PIL的方言,将PIL继续维护了下去. 生成验证码一般需要对写入的文字进行旋转.扭曲.变色等一系列操作,才能避免计算机算法的识别. 因此定义一个生成验证码的类

python生成随机验证码

Python 生成随机验证码,需安装 PIL模块 安装: pip3 install pillow 基本使用 1,.创建图片 from PIL import Image img = Image.new(mode='RGB', size=(120, 30), color=(255, 255, 255)) # 在图片查看器中打开 # img.show() # 保存在本地 with open('code.png','wb') as f: img.save(f,format='png') 2.创建画笔,用

Android生成随机验证码技术

在Android客户端应用开发中,往往需要短信验证码或者随机验证码来限制用户的操作或者认证.短信验证码是为了对用户进行认证,主要通过Http协议等通信协议实现;随机验证码很大程度是为限制或者提示用户相关操作.随机验证码的验证主要有两种方式:请求服务器验证,本地验证.比如,在用户向服务器发送登录请求,我们通过随机验证码(本地验证即可)限制用户随意按请求按钮,演示如下: 源码实战 (1)src/.../createCode.java 功能:使用Random.Canvas.Paint及其相关方法创建包

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

PIL模块的安装 pip3 install pillow 生成随机验证码图片 import random from PIL import Image, ImageDraw, ImageFont from io import BytesIO def random_str(): ''' 生成随机字符 :return:随机字符 ''' random_int = str(random.randint(0,9)) random_up = chr(random.randint(65,90)) random_

BBS之生成随机验证码

生成随机验证码 views.py 首先需要下载一个pillow模块   pip3 install pillow from PIL import Image,ImageDraw,ImageFont #导入pillow模块 ''' Image:生成图片 ImageDraw:在图片上写东西 相当于画笔 ImageFont: 控制字体样式的 ''' from io import BytesIO,StringIO ''' io是一个内存管理器模块 BytesIO 能够帮你存储数据以二进制的格式 Strin