参考资料

Django 2.1.7 模板 - 图片验证码的实现 - 云+社区 - 腾讯云
https://cloud.tencent.com/developer/article/1455075

安装Pillow

pip install pillow

Pillow 5.4.1

验证码的使用

from django.shortcuts import render, redirect, HttpResponse# 验证码所需
# 验证码
from PIL import Image, ImageDraw, ImageFont
from django.utils.six import BytesIO
import osfrom dj2019 import settings # 引入项目配置,用于拼接字体的全路径def verifycode(request):# 引入随机函数模块import random# 定义变量,用于画面的背景色、宽、高bgcolor = (random.randrange(20, 100), random.randrange(20, 100), 255)width = 100height = 25# 创建画面对象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)# 定义验证码的备选值str1 = 'ABCD123EFGHIJK456LMNOPQRS789TUVWXYZ0'# 随机选取4个值作为验证码rand_str = ''for i in range(0, 4):rand_str += str1[random.randrange(0, len(str1))]# 构造字体对象FONT_PATH = os.path.join(settings.BASE_DIR, 'static/font/simhei.ttf')  # 字体文件路径font = ImageFont.truetype(FONT_PATH, 23)# 构造字体颜色fontcolor = (255, random.randrange(0, 255), random.randrange(0, 255))# 绘制4个字draw.text((5, 2), rand_str[0], font=font, fill=fontcolor)draw.text((25, 2), rand_str[1], font=font, fill=fontcolor)draw.text((50, 2), rand_str[2], font=font, fill=fontcolor)draw.text((75, 2), rand_str[3], font=font, fill=fontcolor)# 释放画笔del draw# 存入session,用于做进一步验证request.session['verifycode'] = rand_str# 内存文件操作buf = BytesIO()# 将图片保存在内存中,文件类型为pngim.save(buf, 'png')# 将内存中的图片数据返回给客户端,MIME类型为图片pngreturn HttpResponse(buf.getvalue(), 'image/png')
# # Create your views here.
# def identifying_code(request):
#
#     return render(request, "appone/identifying_code.html")

验证码的效果

应用到网站中

》写一个文本框,后面根验证码

》提交文本框的内容,比对验证码

》视图函数

def testcode(request):if request.GET:# 如果有参数,表示提交verifycode = request.GET.get("verifycode")sescode = request.session.get("verifycode")if verifycode.upper() == sescode.upper():return HttpResponse("{}验证成功".format(verifycode))else:return HttpResponse("{}验证失败".format(verifycode))else:# 没有参数,表示进入该页面return render(request, "testcode.html")

》模板页面

<!doctype html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title>
</head>
<body>
<form action=""><input type="text" name="verifycode"> <img src="{% url "one:verifycode" %}" alt="验证码"><br><input type="submit" value="提交">
</form>
</body>
</html>

》界面效果

作业

》实现验证码的视图

》输入数据,后端验证

》实现点击验证码,自动更新的效果

》注册功能,加上验证码

》登陆的功能,加上验证码

点击图片刷新验证码

》前端代码

<!doctype html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title><script src="/static/js/jquery-1.12.4.min.js"></script><script>$(main);function main() {{#拿到图片标签#}$("#verify_img").click(function () {{#让图标标签重橷加载一次#}{#方法二种#}{#1,简单的,给图片标签的src属性,重新赋值#}var src = $("#verify_img").attr("src");{#alert(src);#}var new_src = src+'?'+Math.random()alert(new_src)$("#verify_img").attr("src", new_src);{#2,麻烦的,发起ajax请求,请求验证码的视图函数,返回值给src#}});}</script>
</head>
<body>
<form action=""><input type="text" name="verifycode"> <img id="verify_img" src="{% url "one:verifycode" %}" alt="验证码"><br><input type="submit" value="提交">
</form>
</body>
</html>

django-验证码相关推荐

  1. Django 验证码4.4

    验证码 在用户注册.登录页面,为了防止暴力请求,可以加入验证码功能,如果验证码错误,则不需要继续处理,可以减轻一些服务器的压力 使用验证码也是一种有效的防止crsf的方法 验证码效果如下图: 验证码视 ...

  2. django验证码模块使用

    1.下载模块 pip install django-simple-captcha 2.在一级urls内配置URL url(r'^captcha/', include('captcha.urls')), ...

  3. Django验证码*短信验证码之2-容联云通讯短信平台(联云通讯短信平台介绍、容联云通讯Python SDK、封装发送短信单例类)

    容联云通讯短信平台介绍 容联云通讯网址:https://www.yuntongxun.com/ 容联云管理控制台 容联云创建应用 容联云通讯Python SDK https://doc.yuntong ...

  4. django图形验证码和邮件

    设计知识点: django验证码插件的使用 django发送邮件 form表单数据过滤,前端渲染,包括错误信息 一.图形验证码 1.准备工作 pip install django-simple-cap ...

  5. python官方网站地址-一些python牛人地址分享

    http://www.bootcdn.cn/bootstrap/ bootstrap cdn在线地址 1. http://www.cnblogs.com/linhaifeng/articles/653 ...

  6. 老男孩老师的博客地址 - 转自devops1992

    害怕他那天不让人看了,所以我就复制一份到我自己的博客里. http://www.bootcdn.cn/bootstrap/  bootstrap cdn在线地址 http://www.cnblogs. ...

  7. 老男孩老师的博客地址

    http://www.bootcdn.cn/bootstrap/  bootstrap cdn在线地址 http://www.cnblogs.com/vamei/archive/2012/09/13/ ...

  8. Celery 实现异步任务-one

    celery异步任务: 环境准备 安装celery ,django-celery. 就是一个专注于实时处理和任务调度的分布式队列. 可以异步执行的任务交给后台处理,以防网络阻塞,减小响应时间 cele ...

  9. 为 Django admin 登录页添加验证码

    为什么80%的码农都做不了架构师?>>>    历史原因,使用上古版本 django 1.6.5,但新版本应该大同小异 首先添加自定义后台模块app, 如adm,并添加到 INSTA ...

  10. Django博客系统(短信验证码)

    1. 容联云短信平台操作 1.容联云官网 容联云通讯网址:容联云通讯_短信平台.手机验证码.语音验证码.IM即时通讯.云呼叫系统等互联网通信服务 注册并登陆 2.容联云管理控制台 3.添加容联云测试手 ...

最新文章

  1. 成为人工智能视觉应用工程师需要多久?我用了45天!
  2. [PHP打野] 对pear-FSM的研究(一)基本了解
  3. C++类型转换: static_cast const_cast reinterpret_cast dynamic_cast
  4. MVP模式在Android中的应用(附UML高清大图,使用RecyclerView举例)
  5. MyBatis复习(三):MyBatis核心对象SqlSessionFactory和SqlSession
  6. linux命令收集录
  7. python toimage函数 -baijiahao_财码Python管理会计小实验成本性态分析So Easy
  8. angularjs -- 页面模板清除
  9. Smart3D模型合并
  10. UML之用例图转类图
  11. python数据分析社区_python之数据分析
  12. Python爬取拉勾网数据分析职位
  13. LSD_SLAM编译运行
  14. [转载]【苹果千层派】轻松玩转酥皮_万金油_新浪博客
  15. ubuntu 下创建加密文件夹
  16. 淘宝首页链接跳转,非taobao.com域名下的链接处理
  17. 无盘工作站给服务器ip地址协议,如何给无盘工作站安装TCP IP协议
  18. 用数组输出26个小写字母
  19. 133、初沸点的概念
  20. 计算机无法连接富士网络打印机,网络打印机无法连接的解决方法是什么

热门文章

  1. vuejs路由插件:vue-router的工作原理
  2. MongoDB可视化界面工具Studio3T的安装 - 讲解篇
  3. 动态壁纸小程序(带流量主)源码
  4. 【WP主题】仿下载吧全开源无加密wordpress主题模板内含newzhan2.60无授权版本
  5. 百分百储值卡回收网站源码+手机模板
  6. 二开微信表情包小程序魔改版源码
  7. Zblog极致·APP下载单页主题
  8. linux 上plsql命令_在 Linux 上压缩文件:zip 命令的各种变体及用法 | Linux 中国
  9. 网页聊天室win10界面源码
  10. zblog二开WAP网址轻导航网站源码