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 验证码实现的更多相关文章

  1. django 验证码(django-simple-captcha)

    django 验证码(django-simple-captcha) django-simple-captcha 官方文档(含基于modelForm的用法)  https://django-simple ...

  2. django验证码配置与使用

    1.安装django-simple-captcha pip install django-simple-captcha 2.配置settings.py ##加app列表INSTALLED_APPS = ...

  3. django验证码功能

    1.目的 现在我们一般访问网页都需要输入验证码,比如博客园,有的甚至是通过手机验证码实时登录.这样做的目的主要还是为了防止其他人的恶意访问,比如爬虫,下面就来看看验证码是如何实现的 2.StringI ...

  4. django验证码django-simple-captha

    搭建网站很经常要用到验证码,django中就有这样的中间件django-simple-captha githup地址https://github.com/mbi/django-simple-captc ...

  5. django 验证码

    1.django 缓存设置 django的六种缓存(mysql+redis) :https://www.cnblogs.com/xiaonq/p/7978402.html#i6 1.1 安装Djang ...

  6. 探索Django验证码功能的实现 - DjangoStarter项目模板里的封装

    前言 依然是最近在做的这个项目,用Django做后端,App上提交信息的时候需要一个验证码来防止用户乱提交,正好我的「DjangoStarter」项目脚手架也有封装了验证码功能,不过我发现好像里面只是 ...

  7. python_way day21 Django文件上传Form方式提交,原生Ajax提交字符处啊,Django文件上传之原生Ajax方式、jQuery Ajax方式、iframe方式,Django验证码,抽屉示例,

    python_way day21 1.Django文件上传至Form方式 2.原生Ajax文件上传提交表单 使用原生Ajax好处:不依赖jquery,在发送一个很小的文件或者字符串的时候就可以用原生A ...

  8. Django验证码【附源码】

    一.安装依赖 CentOS 第一步: yum install python-devel 第二步: yum install freetype-devel libjpeg-devel libpng-dev ...

  9. 快速创建Django验证码

    # 生成随机验证码图片 import stringfrom random import randint, samplefrom PIL import Image, ImageDraw, ImageFo ...

随机推荐

  1. springcloud学习总结

    最近花了一周的时间对springcloud的常用组件进行了一些入门级的了解,也破天荒的积极起来用博客进行了学习的记录,只是希望以后用的时候能对自己有所帮助,也希望给跟我一样对springcloud毫无 ...

  2. django 简易版搭建

    1.根目录下创建mysql.cnf文件 [client]database = identimguser = rootpassword = roothost = 127.0.0.1port = 3306 ...

  3. 权限系统(RBAC)的数据模型设计

    前言: RBAC是Role-Based Access Control的缩写, 它几乎成为权限系统的数据模型的选择标配. 之前写个两篇关于权限系统的文章, 主要涉及如何在应用中实现权限控制, 对权限系统 ...

  4. C++中的指针,指针函数和函数指针

    指针是C或C++中的一大难题,因此弄懂指针对C和C++的学习有很大的帮助,最近一直在研究指针,因此写一篇随笔把心得记录一下. 简单来说指针也是一种变量,只不过指针变量所存储的不是我们直观上看到的,而是 ...

  5. 复习-java-001

    一.基本数据类型: byte.boolean.char.string.int.short.long.float.double 二.java三大特性: 1.封装 封装是实现面向对象程序设计的第一步,封装 ...

  6. tree-lstm初探

    https://zhuanlan.zhihu.com/p/35252733 可以先看看上面知乎文章里面的例子 Socher 等人于2012和2013年分别提出了两种区分词或短语类型的模型,即SU-RN ...

  7. vue安装过程

    我们3个安装参考的博客地址 http://blog.qianduanchina.cn/post/596c5bb27838a71273eb4da3 http://blog.csdn.net/unamat ...

  8. day02python入门

    今日概要 解释器环境安装 输出 python试执行 数据类型 变量 输入 注释 条件判断 循环 占位符 数据类型转换 1. 环境的安装 python解释器 py2: Python2.7 (老版本) . ...

  9. Redis无法启动

    我的原因是:没有足够的可用空间 以往双击redis-server.exe就可以启动,但突然启动不了,只是弹出控制台一闪而过,之后就自动关闭了, 因为没看到具体错误,百度了下关键字”Redis无法启动“ ...

  10. s2第六章继承和多态

    public class Employee { //年龄 public int Age { get; set; } //性别 public Gender Gender { get; set; } // ...