Django 图片验证码

  • python生成随机验证码
  • 验证码功能
    • 设置一个url,用于更新验证码图片
    • 图片地址
    • 中间件设置
    • 登录设置
    • Form设置

python生成随机验证码

# 导入random模块
import random# 导入Image,ImageDraw,ImageFont模块
from PIL import Image, ImageDraw, ImageFont, ImageFilterchr_list = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
ttf_list = ['ALGER.TTF', 'ARIALNI.TTF', 'BRADHITC.TTF', 'CHILLER.TTF']def rnd_chr(chr_list,chr_len):#生成随机字符return random.sample(chr_list, chr_len)def rnd_font(font_list = ttf_list):#生成随机字体return random.choice(font_list)def rnd_color():#生成随机色return (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))def check_code(width=120, height=30, chr_len=4, font_list=ttf_list, font_size=28):img = Image.new(mode='RGB', size=(width, height), color=(255, 255, 255))  # 创建一个画布draw = ImageDraw.Draw(img, mode='RGB')code = rnd_chr(chr_list, chr_len)#写文字for i in range(chr_len):h = random.randint(0, 4)draw.text([i * width / chr_len, h], code[i], font=ImageFont.truetype(rnd_font(), font_size), fill=rnd_color())# 写干扰点for i in range(40):draw.point([random.randint(0, width), random.randint(0, height)], fill=rnd_color())# 写干扰圆圈for i in range(40):draw.point([random.randint(0, width), random.randint(0, height)], fill=rnd_color())x = random.randint(0, width)y = random.randint(0, height)draw.arc((x, y, x + 4, y + 4), 0, 90, fill=rnd_color())# 画干扰线for i in range(5):x1 = random.randint(0, width)y1 = random.randint(0, height)x2 = random.randint(0, width)y2 = random.randint(0, height)draw.line((x1, y1, x2, y2), fill=rnd_color())img = img.filter(ImageFilter.EDGE_ENHANCE_MORE)return img, ''.join(code)if __name__ == '__main__':img, code = check_code()print(code)img.show()

效果:

验证码功能

设置一个url,用于更新验证码图片

将得到的验证码字符串存在request中的session中,方便后面效验。

from io import BytesIOdef image_code(request):''' 生成图片验证码 '''img, code_string = check_code()# 写入到自己的session中(以便后续获取验证码在进行校验)request.session['image_code'] = code_string# 给session设置60s超时request.session.set_expiry(60)# print(code_string)stream = BytesIO()img.save(stream, 'png')return HttpResponse(stream.getvalue())

验证码图片重定位,将验证码图片放在一个合适的位置。

图片地址

图片地址填写路由地址。

中间件设置

添加这个地址。

登录设置

一个来自于开始存入的session中,一个来自输入框。

Form设置

**Form与ModelForm相必,后者还同时连接了数据库。**这里添加了一个code.

class LoginForm(forms.Form):username = forms.CharField(label="用户名",widget=forms.TextInput,required=True  # 不能为空)password = forms.CharField(label='密码',widget=forms.PasswordInput(render_value=True),required=True)code = forms.CharField(label="验证码",widget=forms.TextInput,required=True)def clean_password(self):pwd = self.cleaned_data.get("password")return md5(pwd)

Django 图片验证码相关推荐

  1. Django使用图片验证码加邮箱或手机号登录

    实现页面效果 实现思路 使用form渲染数据 校验手机号(格式.是否注册).密码以及验证码 生成图片验证码 ''' pillow:是python处理图片的模块,很强大 ''' import rando ...

  2. Django 六——自定义标签、图片验证码、发送邮件、评论树、组合搜索

    1.自定义标签 2.图片验证码 3.生成邮箱验证码.发送邮件 4.评论树实现 5.组合搜索(Q) 1.自定义标签 配置: a.在app中新建文件夹  templatetags,里面新建  xx.py文 ...

  3. Django之头像实时展示到input框、图片验证码、简单发邮件

    一.以注册功能来看头像实时展示 首先先来写一个简单的页面: <div class="container-fluid"><div class="row&q ...

  4. django使用captcha完成图片验证码

    使用captcha 1:需要下载包: pip install django-simple-captcha 2: 然后在settings的INSTALLED_APPS添加: 'captcha' 3: 需 ...

  5. Django之验证码的实现,简单快捷的方法

    Django之验证码的实现,简单快捷的方法 实现验证码随网页变动即时刷新,实现有期限时间 请确保安装好pillow 直接show code: 0.路由urs.py from django.urls i ...

  6. drf实现图片验证码功能

    一.背景 在之前实现过django的图片验证码,有自己实现过的,也有基于django-simple-captcha的,都是基于form表单验证,若自己实现,可以获取相应的标签name便可以获取判断,若 ...

  7. 图片验证码、阿里云短信发送和验证的逻辑

    图片验证码的生成 1.django 缓存设置 1.1 安装Django缓存模块 pip install django-redis==4.12.1 1.2 syl/settings.py中配置缓存 # ...

  8. Django 之验证码实现

    1. django-simple-captcha 模块 安装 django-simple-captcha pip install django-simple-captcha pip install P ...

  9. 1. 爬虫之Beautifulsoup解析库在线解析图片验证码

    1. 解析库beautifulsoup 1.1 介绍 BeautifulSoup是一个可以从HTML或XML文件中提取数据的Python库. 官方文档: https://www.crummy.com/ ...

最新文章

  1. 第二阶段 铁大Facebook——十天冲刺(七)
  2. 怎么做圆一圈圈扩散效果_推广为什么没有效果,网络推广怎么做才有效果?
  3. (转)个例子让你了解Java反射机制
  4. # 20145220《信息安全系统设计基础》第1周学习总结
  5. 5款最适合新手的包管理器
  6. laravel常用响应操作
  7. SQLServer 2012重启服务后,自增1的标识列一次增长了1000左右
  8. rtklib 天线相位中心_发射天线的作用
  9. [Email] 收发邮件的协议 : IMAP and SMTP , POP3 and SMTP
  10. linux下的C语言开发(多线程编程)
  11. word排版案例报告_原来按下这个键,10秒EXCEL与Word格式就能互相转换,涨知识了...
  12. opencv之绘制多边形----cv2.polylines, cv2.fillPoly
  13. iPhone SDK开发基础之使用UITabBarController组织和管理UIView
  14. Mask_rcnn openpose realsense
  15. 图数据库——Nebula Graph安装部署(含示例)
  16. thinkpadE430c加装固态硬盘小记
  17. Altium Designer怎样秒敷铜?
  18. BUUCTF 世上无难事
  19. apollo学习之---planning理论到实践(5-3)---路径边界计算
  20. mysql 查询姓王_mysql常用数据操作之查

热门文章

  1. 30、 移动端常用开发框架
  2. MATLAB算法实战应用案例精讲-【智能优化算法】森林优化算法(FOA) (附MATLAB代码实现)
  3. c语言中不能将字符串赋值给字符数组
  4. 大数据课程00——[基础篇]大数据学习入门
  5. Promise学习笔记一
  6. 键盘常用符号的英文读法
  7. Visual FoxPro初学:建立数据库,创建表,向表中添加数据
  8. MFC中的UpdateData()函数
  9. Java实现一元函数遗传算法_遗传算法的基本概念和实现,附Java实现案例!
  10. [Java并发编程-6] Callable接口