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 ...
随机推荐
- Python基础01_介绍_HelloWorld
首先,当然是python的版本了,老师讲课学习都是以python3为主, 我的centos中还是python2.6.6 然后参照老师的教程升级到了2.7.14 谢谢! 平时主要练习3的,有时间的情况下 ...
- SLEUTH 城市扩张模型
3.19号准备试着运行一下SLEUTH模型,但是好不容易没报错出了一个test的结果,我就再也没看过了,导致现在我竟然差不多忘记当时怎么搞出来的了... 这也提醒我了,,,以后解决一个什么东西一定要立 ...
- JDBC driver连接MySQL运行报错The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than
出错原因: 因为安装mysql的时候时区设置的不正确. mysql默认的是美国的时区,而我们中国大陆要比他们迟8小时,采用GMT+8:00格式. 也就是说是数据库和系统时区差异所造成的. 验证:运行c ...
- Atom选中多行操作
没有用过sublime,但是有选取多行的需求 我有一个文本文件,前面几行都是文件夹路径,并且都是单个字母,我想删除路径,保存纯粹的子文件夹名称,这样可以上传谷歌翻译文档,写程序再写txt略显麻烦,直接 ...
- SSH设置秘钥登录
设置 SSH 通过密钥登录 我们一般使用 PuTTY 等 SSH 客户端来远程管理 Linux 服务器.但是,一般的密码方式登录,容易有密码被暴力破解的问题.所以,一般我们会将 SSH 的端口设置为默 ...
- 《Java编程思想》读书笔记-对象导论
计算机是头脑延伸的工具,是一种不同类型的表达媒体.本文以背景性的和补充性的材料,介绍包括开发方法概述在内的面向对象程序设计(Object-oriented Programming,OOP)的基本概念. ...
- jwt 接口加密
什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点 ...
- php连接redis服务
$redis = new Redis(); $redis->connect('127.0.0.1', 6379);//可以执行redis操作了.....
- C# 线程安全集合
转载 对于并行任务,与其相关紧密的就是对一些共享资源,数据结构的并行访问.经常要做的就是对一些队列进行加锁-解锁,然后执行类似插入,删除等等互斥操作. .NetFramework 4.0 中提供了一些 ...
- Mathematics for Computer Science (Eric Lehman / F Thomson Leighton / Albert R Meyer 著)
I Proofs1 What is a Proof?2 The Well Ordering Principle3 Logical Formulas4 Mathematical Data Types5 ...