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 ...
随机推荐
- ::WritePrivateProfileString()的用法,以及GetPrivateProfileString的用法注意事项
WritePrivateProfileString(_T("Section1"),_T("Field1"),Field,savePath); 函数说明,这是在写 ...
- 王者荣耀交流协会第5次Scrum立会
开会时间:2017年10月31日下午18:00-18:31 共计31分钟 开会地点:一食堂二楼靠近窗户倒数第四排 今日完成工作进度: 王超同学完成了将生成饼状图原型整合到程序中 立会内容: 添加了新 ...
- Go语言判断if else语句
基本格式: if 条件语句{ 执行语句 }else{ 执行语句 } package main import "fmt" func main(){ fmt.Println(Add(- ...
- ViewpageAdapter
import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory; ...
- java.io.EOFException ValueOperations.increment()操作后,获取值时有的bug
---恢复内容开始--- 今天使用spring-data-redis包操作redis,就是简单的使用redis的计数功能,在redis中的操作命令如:incr key;get key; 这两步操作使用 ...
- [Java] 例外處裡 try/catch & throws
public class CheckException { public static void main(String[] args) { File file = new File("xx ...
- esxi5 的tart命令使用注意点
esxi5.0 注意tar命令参数使用和centos6稍微有点不一样,注意下 注意需要把-f参数单独分离出来,紧接着文件. 而不能和cz命令一起用 ~ # touch abc.txt ~ # ec ...
- linux(centos6.9)安装步骤
http://blog.csdn.net/u012453843/article/details/52819756 https://mirrors.aliyun.com/ 下载想要的版本 2选择新建虚拟 ...
- python3学习笔记七(字典)
参照http://www.runoob.com/python3/python3-dictionary.html 字典 字典是另一种可变容器模型,且可以存储任意类型对象. dict1 = {key1:v ...
- 用网站把图标做成iconFont文件引用
1,把psd文件另存为eps文件(ai能打开的格式),前提图标有路径, 2,用ai打开eps文件 3,新建一个空白文件100*100,然后把图标复制进来,等比拉宽至最大化 4,如果图标有蒙版,就点击图 ...