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 相关文章推荐
利用matplotlib+numpy绘制多种绘图的方法实例
May 03 Python
用生成器来改写直接返回列表的函数方法
May 25 Python
Python实现扩展内置类型的方法分析
Oct 16 Python
python操作xlsx文件的包openpyxl实例
May 03 Python
Python子类继承父类构造函数详解
Feb 19 Python
简单了解django索引的相关知识
Jul 17 Python
Python使用import导入本地脚本及导入模块的技巧总结
Aug 07 Python
解决tensorflow由于未初始化变量而导致的错误问题
Jan 06 Python
tensorflow实现训练变量checkpoint的保存与读取
Feb 10 Python
python操作微信自动发消息的实现(微信聊天机器人)
Jul 14 Python
Python csv文件记录流程代码解析
Jul 16 Python
Python字符串查找基本操作代码案例
Oct 27 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 stream_get_meta_data返回值
2013/09/29 PHP
js和php邮箱地址验证的实现方法
2014/01/09 PHP
smarty模板引擎之配置文件数据和保留数据
2015/03/30 PHP
PHP获取当前文件的父目录方法汇总
2016/07/21 PHP
PHP实现倒计时功能
2020/11/16 PHP
PHP如何防止用户重复提交表单
2020/12/09 PHP
Js 刷新框架页的代码
2010/04/13 Javascript
js 显示base64编码的二进制流网页图片
2014/04/04 Javascript
禁止iframe脚本弹出的窗口覆盖了父窗口的方法
2014/09/06 Javascript
jQuery实现ajax的叠加和停止(终止ajax请求)
2016/08/08 Javascript
angular实现图片懒加载实例代码
2017/06/08 Javascript
微信小程序之蓝牙的链接
2017/09/26 Javascript
form表单数据封装成json格式并提交给服务器的实现方法
2017/12/14 Javascript
原生js+cookie实现购物车功能的方法分析
2017/12/21 Javascript
基于mpvue搭建微信小程序项目框架的教程详解
2019/04/10 Javascript
JS实现动态星空背景效果
2019/11/01 Javascript
[10:34]DOTA2上海特级锦标赛全纪录
2016/03/25 DOTA
python编写暴力破解FTP密码小工具
2014/11/19 Python
Python中关于使用模块的基础知识
2015/05/24 Python
django站点管理详解
2017/12/12 Python
python 常见字符串与函数的用法详解
2018/11/23 Python
Python图像处理PIL各模块详细介绍(推荐)
2019/07/17 Python
分享一个pycharm专业版安装的永久使用方法
2019/09/24 Python
使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证方式
2020/01/08 Python
python中tab键是什么意思
2020/06/18 Python
python递归函数用法详解
2020/10/26 Python
Jupyter安装拓展nbextensions及解决官网下载慢的问题
2021/03/03 Python
香港艺人陈冠希创办的潮流品牌:JUICESTORE
2021/03/04 全球购物
Order by的几种用法
2013/06/16 面试题
介绍一下HDLC(High-Level Data Link Control)高层数据链路协议
2012/01/21 面试题
物流管理专业大学生自荐信
2013/10/04 职场文书
体育教师自荐信范文
2013/12/16 职场文书
培训协议书范本
2014/04/22 职场文书
工程售后服务方案
2014/06/08 职场文书
2014年单位工作总结范文
2014/11/27 职场文书
担保贷款承诺书
2015/04/30 职场文书