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 ...
随机推荐
- SQL注入之Sqli-labs系列第三十三关(基于宽字符逃逸注入)
开始挑战第三十三关(Bypass addslashes) 0x1查看源码 本关和第三十二关其实是一样的,只是这里用到了addslashes()函数 function check_addslashes( ...
- 二进制安装MySQL数据库
今天安装的是二进制的mysql包5.7.21的包,在配置文件的时候采了好多坑,左后还是搞定了,来和大家分享一下 二进制msyql5.7.21版本的主从复制安装 新建/picclife目录 mkdir ...
- jQuery-1.样式篇---选择器
jQuery选择器之id选择器 页面的任何操作都需要节点的支撑,开发者如何快速高效的找到指定的节点也是前端开发中的一个重点.jQuery提供了一系列的选择器帮助开发者达到这一目的,让开发者可以更少的处 ...
- 一款我常用到的手机app
我从初中开始接触电子书,后来渐渐养成了看电子书的习惯.在阅读电子书的过程中自然要接触到各种各样的阅读类的手机app,比如书旗.qq阅读.百度阅读器等等.个人感觉掌阅使用起来好一些. 首先,它的界面很简 ...
- c# ef
找出不同项 ).ToList(); resultMsg = string.Join(",", query.select(p=>p.key).ToList())
- JS效果
多标签页效果 tab切换 <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset ...
- JVM的基本结构及其各部分详解(一)
1 java虚拟机的基本结构如图: 1)类加载子系统负责从文件系统或者网络中加载Class信息,加载的类信息存放于一块称为方法区的内存空间.除了类的信息外,方法区中可能还会存放运行时常量池信息,包括字 ...
- C语言strcmp()实现
函数原型: extern int strcmp(const char *s1,const char *s2); 比较两个字符串 设这两个字符串为str1,str2, 若str1=str2,则返回 ...
- c++ CreateProcess调用dos命令
// test.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <windows.h> #include &l ...
- Node.js express获取参数有三种方法
express获取参数有三种方法:官网介绍如下 Checks route params (req.params), ex: /user/:id Checks query string params ( ...