django 验证码实现
django验证码的使用:
验证码的作用:用于人机识别。
验证码
###验证码:
def code_str(request):
from PIL import Image
from PIL import ImageDraw,ImageFont
from io import BytesIO #生成随机字符串,一个数组的形式
import random
def get_random_color():
return (random.randint(0,255),random.randint(0,255),random.randint(0,255)) ##图片颜色,RGB模式,(220,36)是尺寸,color是颜色,需要输入上方的三个随机数字
image=Image.new("RGB",(220,36),color=get_random_color())
draw =ImageDraw.Draw(image)
# 图片字体的样式,大小
font = ImageFont.truetype("static/font/kumo.ttf",size=32)
# !!!!!!/static/font/kumo.ttf",不好使,不能在开头加"/" #图片中的字,先生成随机的字符串,用chr把数组转化为对应的字符
random_str=""
for i in range(5):
num=str(random.randint(0,9))
up=chr(random.randint(97,122))
down=chr(random.randint(65,90))
res=random.choice([num,up,down])
#font对应上方的font对象,()中的数字代表每个字符的间距,起始位置。
# xy = xy[0] + offset[0], xy[1] + offset[1](这个是源码中的标识,text中的第一位)
draw.text((20 + i * 30, 0), res, get_random_color(), font=font)
random_str+=res
# xy = xy[0] + offset[0], xy[1] + offset[1] print(random_str)
print("wwwwwwwwwwwwww",random_str)
#这里,因为每个人的验证码不能一样,而且需要保存,所以可以用session来进行保存,
#相当于每个人一个仓库,之后登陆之后去session中去取,来验证.
request.session["code_str"]=random_str
#这里将生成的图片以二进制的方式读取到内存.而后将二进制文件
f = BytesIO()
image.save(f,"png") #png是格式
data = f.getvalue() #取到二进制值 print(data)#打印出来的是下方的格式.
#b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xdc\x00\x00\x0...... #html中的代码,调用这个函数,返回的是图片的二进制码的形式,转化为图片。
# < img width = "250" height = "36" src = "/code_str/" alt = "" class ="valid_img" >
return HttpResponse(data)
校验验证码:如果验证码不对,不需要校验用户名,密码等。
#登陆函数
def login(request):
###先校验验证码
if request.is_ajax():
user=request.POST.get("user")
pwd=request.POST.get("pwd")
#取到用户输入的验证码
code_str=request.POST.get("code_str")
print("",code_str) print(request.POST)
res={}
#取到后台生成的验证码
random_str=request.session.get("code_str")
print(666666666,random_str)
if str(code_str).upper()==random_str.upper():
print("")
#如果验证码正确进行验证
from django.contrib import auth
user=auth.authenticate(username=user,password=pwd)
if user:
res["user"]=user.username
else:
res["msg"]="用户名或者密码错误"
else:
res["msg"]='验证码错误'
print("sssssssssssssssss",res) return HttpResponse(json.dumps(res))
return render(request,"login.html",locals())
在login.html中添加更换验证码功能,点击图片,更换验证码。
{# 点击验证码换字符 #}
$(".valid_img").click(function () {
{#取到你点击的对象,然后刷新src属性#}
$(this)[0].src+="?" })
django 验证码实现的更多相关文章
- django 验证码(django-simple-captcha)
django 验证码(django-simple-captcha) django-simple-captcha 官方文档(含基于modelForm的用法) https://django-simple ...
- django验证码配置与使用
1.安装django-simple-captcha pip install django-simple-captcha 2.配置settings.py ##加app列表INSTALLED_APPS = ...
- django验证码功能
1.目的 现在我们一般访问网页都需要输入验证码,比如博客园,有的甚至是通过手机验证码实时登录.这样做的目的主要还是为了防止其他人的恶意访问,比如爬虫,下面就来看看验证码是如何实现的 2.StringI ...
- django验证码django-simple-captha
搭建网站很经常要用到验证码,django中就有这样的中间件django-simple-captha githup地址https://github.com/mbi/django-simple-captc ...
- django 验证码
1.django 缓存设置 django的六种缓存(mysql+redis) :https://www.cnblogs.com/xiaonq/p/7978402.html#i6 1.1 安装Djang ...
- 探索Django验证码功能的实现 - DjangoStarter项目模板里的封装
前言 依然是最近在做的这个项目,用Django做后端,App上提交信息的时候需要一个验证码来防止用户乱提交,正好我的「DjangoStarter」项目脚手架也有封装了验证码功能,不过我发现好像里面只是 ...
- python_way day21 Django文件上传Form方式提交,原生Ajax提交字符处啊,Django文件上传之原生Ajax方式、jQuery Ajax方式、iframe方式,Django验证码,抽屉示例,
python_way day21 1.Django文件上传至Form方式 2.原生Ajax文件上传提交表单 使用原生Ajax好处:不依赖jquery,在发送一个很小的文件或者字符串的时候就可以用原生A ...
- Django验证码【附源码】
一.安装依赖 CentOS 第一步: yum install python-devel 第二步: yum install freetype-devel libjpeg-devel libpng-dev ...
- 快速创建Django验证码
# 生成随机验证码图片 import stringfrom random import randint, samplefrom PIL import Image, ImageDraw, ImageFo ...
随机推荐
- mod_fcgid FcgidMaxRequestLen 131072 问题
mod_fcgid: HTTP request length 136136 (so far) exceeds MaxRequestLen (131072) 原来是fastcgi模式下的设置问题,需 ...
- 基于Verilog的串口接收程序
一.模块框图及基本思路 detect_module:检测输入引脚的下降沿,以此判断一帧数据的开始 rx_bps_module:波特率时钟产生模块 rx_control_module:串口接收的核心控制 ...
- CMD命令,动态执行存储或DML命令
--exec master..xp_cmdshell CMD命令 --EXECUTE sys.sp_sqlexec 执行存储 --EXEC sp_executesql 执行DML语句
- 剑指Offer 38. 二叉树的深度 (二叉树)
题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 题目地址 https://www.nowcoder.com/prac ...
- js实现颜色渐变
#grad { background: -webkit-linear-gradient(red, blue); /* Safari 5.1 - 6.0 */ background: -o-linear ...
- IC卡热复位时序
热复位(warm reset):在时钟CLK和电源电压VCC处于激活状态的前提下,IC卡收到复位信号时产生的复位. 冷复位过程之后,如果收到的复位应答信号不满足规定,终端将启动热复位并从IC卡获得复位 ...
- python学习之路07
Python中你可能不关心的这几个关键字:break.continue.pass 1.break 作用:跳出循环[直接跳出整个循环,继续执行后面的代码] 1.特殊情况一 #当break使用在嵌套循环中 ...
- hello1源码解析
1.选择hello1文件夹并单击“打开项目” 2.展开网页节点,双击index.xhtml文件在编辑器中查看它 index.xhtml文件是facelets应用程序的默认登录页,在典型的facelet ...
- Oracle数据库-sqlplus命令下出现SP2-0640: Not connected
可以正常登录sqlplus,通过sys as sysdba 但在sql>输入语句,反馈如下 解决方法: sql>输入conn sys/as sysdba Enter password: c ...
- CDI的分析
CDI是一组服务,它们一起使用,使开发人员可以轻松地在Web应用程序中使用企业bean和JavaServer Faces技术.CDI设计用于有状态对象,还有许多更广泛的用途,允许开发人员以松散耦合但类 ...