Django框架登录加上验证码校验实现验证功能示例


Posted in Python onMay 23, 2019

本文实例讲述了Django框架登录加上验证码校验实现验证功能。分享给大家供大家参考,具体如下:

验证码生成函数

pip install Pillow
# /verify_code
def verif_ycode(request):
  #引入绘图模块
  from PIL import Image, ImageDraw, ImageFont
  #引入随机函数模块
  import random
  #定义变量,用于画面的背景色、宽、高
  bgcolor = (random.randrange(20, 100), random.randrange(
    20, 100), random.randrange(20, 100))
  width = 100
  height = 50
  #创建画面对象
  im = Image.new('RGB', (width, height), bgcolor)
  #创建画笔对象
  draw = ImageDraw.Draw(im)
  #调用画笔的point()函数绘制噪点
  for i in range(0, 100):
    xy = (random.randrange(0, width), random.randrange(0, height))
    fill = (random.randrange(0, 255), 255, random.randrange(0, 255))
    draw.point(xy, fill=fill)
  #定义验证码的备选值
  str = '1234567890QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm'
  #随机选取4个值作为验证码
  rand_str = ''
  for i in range(0, 4):
    rand_str += str[random.randrange(0, len(str))]
  #构造字体对象
  # font = ImageFont.truetype('楷体', 40)
  #构造字体颜色
  fontcolor1 = (255, random.randrange(0, 255), random.randrange(0, 255))
  fontcolor2 = (255, random.randrange(0, 255), random.randrange(0, 255))
  fontcolor3 = (255, random.randrange(0, 255), random.randrange(0, 255))
  fontcolor4 = (255, random.randrange(0, 255), random.randrange(0, 255))
  #绘制4个字
  draw.text((5, 2), rand_str[0], fill=fontcolor1)
  draw.text((25, 2), rand_str[1], fill=fontcolor2)
  draw.text((50, 2), rand_str[2], fill=fontcolor3)
  draw.text((75, 2), rand_str[3], fill=fontcolor4)
  #释放画笔
  del draw
  # 存入session,用于做进一步验证
  request.session['verifycode'] = rand_str
  #内存文件操作
  import io
  buf = io.BytesIO()
  #将图片保存在内存中,文件类型为png
  im.save(buf, 'png')
  #将内存中的图片数据返回给客户端,MIME类型为图片png
  return HttpResponse(buf.getvalue(), 'image/png')

login.html

html文件加上<img src="/verify_code" alt="">…当然这里还需要配置url,去urls.py里url(r'^verify_code$',views.verif_ycode),

login_check视图函数里加上验证码校验

首先拿到用户输入的验证码和def verif_ycode(request):函数保存在session中的验证码

# 获取验证码
vcode1 = request.POST.get('vcode')# 用户输入的验证码
vcode2 = request.session.get('verifycode')# 获取session中保存的验证码

判断是否一样,不一样的话就redirct('/login')跳转到登录页面

if vcode1 != vcode2:
  return redirect('/login')
else:

否则向下运行

希望本文所述对大家基于Django框架的Python程序设计有所帮助。

Python 相关文章推荐
基于Python实现的百度贴吧网络爬虫实例
Apr 17 Python
Python常用的文件及文件路径、目录操作方法汇总介绍
May 21 Python
Python Sql数据库增删改查操作简单封装
Apr 18 Python
Python实现将罗马数字转换成普通阿拉伯数字的方法
Apr 19 Python
python制作填词游戏步骤详解
May 05 Python
利用keras加载训练好的.H5文件,并实现预测图片
Jan 24 Python
基于Python实现人脸自动戴口罩系统
Feb 06 Python
python numpy--数组的组合和分割实例
Feb 24 Python
pandas分组聚合详解
Apr 10 Python
python:解析requests返回的response(json格式)说明
Apr 30 Python
Python xml、字典、json、类四种数据类型如何实现互相转换
May 27 Python
python实现图片转换成素描和漫画格式
Aug 19 Python
python图形工具turtle绘制国际象棋棋盘
May 23 #Python
python os模块简单应用示例
May 23 #Python
python使用turtle绘制国际象棋棋盘
May 23 #Python
Python实现的服务器示例小结【单进程、多进程、多线程、非阻塞式】
May 23 #Python
Python3.8中使用f-strings调试
May 22 #Python
总结Python图形用户界面和游戏开发知识点
May 22 #Python
Python闭包和装饰器用法实例详解
May 22 #Python
You might like
MOTOROLA 摩托罗拉 MODEL 66-XI五灯中波收音机
2021/03/02 无线电
php读取javascript设置的cookies的代码
2010/04/12 PHP
PHP转换文件夹下所有文件编码的实现代码
2013/06/06 PHP
PHP面向对象之事务脚本模式(详解)
2017/06/07 PHP
php判断文件上传图片格式的实例详解
2017/09/30 PHP
Yii 框架使用数据库(databases)的方法示例
2020/05/19 PHP
获取DOM对象的几种扩展及简写
2006/10/09 Javascript
JS中字符问题(二进制/十进制/十六进制及ASCII码之间的转换)
2008/11/03 Javascript
javascript 快速排序函数代码
2012/05/30 Javascript
ajax java 实现自动完成功能
2012/12/19 Javascript
javascript自定义startWith()和endWith()的两种方法
2013/11/11 Javascript
jQuery防止click双击多次提交及传递动态函数或多参数
2014/04/02 Javascript
js交换排序 冒泡排序算法(Javascript版)
2014/10/04 Javascript
javascript编写实用的省市选择器
2015/02/12 Javascript
ES6使用let命令更简单的实现块级作用域实例分析
2017/03/31 Javascript
JavaScript实现简单的树形菜单效果
2017/06/23 Javascript
浅谈js中的bind
2019/03/18 Javascript
微信小程序实现的一键复制功能示例
2019/04/24 Javascript
vue+elementUi 实现密码显示/隐藏+小图标变化功能
2020/01/18 Javascript
JavaScript数组排序功能简单实现
2020/05/14 Javascript
在JavaScript中查找字符串中最长单词的三种方法(推荐)
2021/01/18 Javascript
[15:09]DOTA2国际邀请赛采访专栏:Loda
2013/08/06 DOTA
python局部赋值的规则
2013/03/07 Python
在Django中限制已登录用户的访问的方法
2015/07/23 Python
Python编程实现的图片识别功能示例
2017/08/03 Python
Python常见MongoDB数据库操作实例总结
2018/07/24 Python
Python连接Oracle之环境配置、实例代码及报错解决方法详解
2020/02/11 Python
css3实现背景颜色渐变让图片不再是唯一的实现方式
2012/12/18 HTML / CSS
基于canvas的骨骼动画的示例代码
2018/06/12 HTML / CSS
美国顶级水上运动专业店:Marine Products
2018/04/15 全球购物
国际旅客访问北美最大的汽车租赁提供商:Alamo Rent A Car
2018/06/13 全球购物
小学语文教学反思
2014/02/10 职场文书
小学生十佳少年事迹材料
2014/08/20 职场文书
2015年学校团委工作总结
2015/05/26 职场文书
高中升旗仪式主持词
2015/07/03 职场文书
Vue+Element UI实现概要小弹窗的全过程
2021/05/30 Vue.js