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 相关文章推荐
Python3中常用的处理时间和实现定时任务的方法的介绍
Apr 07 Python
改进Django中的表单的简单方法
Jul 17 Python
CentOS7下python3.7.0安装教程
Jul 30 Python
一篇文章搞懂Python的类与对象名称空间
Dec 10 Python
对django xadmin自定义菜单的实例详解
Jan 03 Python
python读取文件名并改名字的实例
Jan 07 Python
Python 实现数据结构-循环队列的操作方法
Jul 17 Python
python用win32gui遍历窗口并设置窗口位置的方法
Jul 26 Python
python中的&amp;&amp;及||的实现示例
Aug 07 Python
Python3简单爬虫抓取网页图片代码实例
Aug 26 Python
Python爬虫分析微博热搜关键词的实现代码
Feb 22 Python
Python3使用Qt5来实现简易的五子棋小游戏
May 02 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
php分页函数完整实例代码
2014/09/22 PHP
PHP处理postfix邮件内容的方法
2015/06/16 PHP
利用PHP如何实现Socket服务器
2015/09/23 PHP
php简单生成一组与多组随机字符串的方法
2017/05/09 PHP
PDO操作MySQL的基础教程(推荐)
2017/08/18 PHP
Laravel实现短信注册的示例代码
2018/05/29 PHP
Extjs学习笔记之四 工具栏和菜单
2010/01/07 Javascript
javaScript checkbox 全选/反选及批量删除
2010/04/28 Javascript
jquery基础教程之deferred对象使用方法
2014/01/22 Javascript
js检测网络是否具体连接功能的代码
2014/05/23 Javascript
JavaScript如何获取数组最大值和最小值
2015/11/18 Javascript
初步使用bootstrap快速创建页面
2016/03/03 Javascript
移动端jQuery修正Web页面滑动时div问题的两则实例
2016/05/30 Javascript
JS仿hao123导航页面图片轮播效果
2016/09/01 Javascript
学习vue.js中class与style绑定
2016/12/03 Javascript
微信小程序开发之实现自定义Toast弹框
2017/06/08 Javascript
深入掌握 react的 setState的工作机制
2017/09/27 Javascript
Vuejs2 + Webpack框架里,模拟下载的实例讲解
2018/09/05 Javascript
vue中实现Monaco Editor自定义提示功能
2019/07/05 Javascript
js+HTML5 canvas 实现简单的加载条(进度条)功能示例
2019/07/16 Javascript
echarts.js 动态生成多个图表 使用vue封装组件操作
2020/07/19 Javascript
解决vue-router路由拦截造成死循环问题
2020/08/05 Javascript
Angular处理未可知异常错误的方法详解
2021/01/17 Javascript
python http基本验证方法
2018/12/26 Python
Python中print和return的作用及区别解析
2019/05/05 Python
django中media媒体路径设置的步骤
2019/11/15 Python
Python如何使用BeautifulSoup爬取网页信息
2019/11/26 Python
Pandas中DataFrame交换列顺序的方法实现
2020/12/14 Python
canvas里面如何基于随机点绘制一个多边形的方法
2018/06/13 HTML / CSS
个性化皮包、小袋、生活配件:Mon Purse
2019/03/26 全球购物
《小鹰学飞》教学反思
2014/04/23 职场文书
演讲稿的格式及范文
2014/08/22 职场文书
党员群众路线教育实践活动学习笔记
2014/11/05 职场文书
督导岗位职责范本
2015/04/10 职场文书
详解JS WebSocket断开原因和心跳机制
2021/05/07 Javascript
docker-compose部署Yapi的方法
2022/04/08 Servers