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自然语言编码转换模块codecs介绍
Apr 08 Python
python记录程序运行时间的三种方法
Jul 14 Python
python  创建一个保留重复值的列表的补码
Oct 15 Python
Python3使用Matplotlib 绘制精美的数学函数图形
Apr 11 Python
python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例
Jun 17 Python
python SQLAlchemy 中的Engine详解
Jul 04 Python
Python @property及getter setter原理详解
Mar 31 Python
python实现秒杀商品的微信自动提醒功能(代码详解)
Apr 27 Python
pycharm 对代码做静态检查操作
Jun 09 Python
基于pytorch中的Sequential用法说明
Jun 24 Python
Python字符串及文本模式方法详解
Sep 10 Python
python3 kubernetes api的使用示例
Jan 12 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
ThinkPHP中关联查询实例
2014/12/02 PHP
Thinkphp5+plupload实现的图片上传功能示例【支持实时预览】
2019/05/08 PHP
js将iframe中控件的值传到主页面控件中的实现方法
2013/03/11 Javascript
jQuery+AJAX实现网页无刷新上传
2015/02/22 Javascript
javascript实现简单计算器效果【推荐】
2016/04/19 Javascript
JavaScript奇技淫巧44招【实用】
2016/12/11 Javascript
Vue.js实战之通过监听滚动事件实现动态锚点
2017/04/04 Javascript
BootStrap表单控件之文本域textarea
2017/05/23 Javascript
JavaScript 值类型和引用类型的初次研究(推荐)
2017/07/19 Javascript
js中json对象和字符串的理解及相互转化操作实现方法
2017/09/22 Javascript
利用pm2部署多个node.js项目的配置教程
2017/10/22 Javascript
纯JS实现可用于页码更换的飞页特效示例
2018/05/21 Javascript
layui 上传文件_批量导入数据UI的方法
2019/09/23 Javascript
Openlayers实现图形绘制
2020/09/28 Javascript
python实现调用其他python脚本的方法
2014/10/05 Python
详解Django中的权限和组以及消息
2015/07/23 Python
黑科技 Python脚本帮你找出微信上删除你好友的人
2016/01/07 Python
Python中的条件判断语句与循环语句用法小结
2016/03/21 Python
Python+Turtle动态绘制一棵树实例分享
2018/01/16 Python
Python进阶之自定义对象实现切片功能
2019/01/07 Python
在Keras中实现保存和加载权重及模型结构
2020/06/15 Python
django rest framework使用django-filter用法
2020/07/15 Python
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
html5简介_动力节点Java学院整理
2017/07/07 HTML / CSS
西铁城美国官方网站:Citizen Watch美国
2019/11/08 全球购物
PHP面试题大全
2015/10/16 面试题
西安众合通用.net笔试题
2013/03/18 面试题
党员学习新党章思想汇报
2014/10/25 职场文书
2014年小学德育工作总结
2014/12/05 职场文书
2014年会计人员工作总结
2014/12/10 职场文书
2015秋季开学典礼新闻稿
2015/07/17 职场文书
2015年秋学期师德师风建设工作总结
2015/10/23 职场文书
《巨人的花园》教学反思
2016/02/19 职场文书
高中物理教学反思
2016/02/19 职场文书
MySql 8.0及对应驱动包匹配的注意点说明
2021/06/23 MySQL
python实现层次聚类的方法
2021/11/01 Python