Django 图片验证码
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 图片验证码相关推荐
- Django使用图片验证码加邮箱或手机号登录
实现页面效果 实现思路 使用form渲染数据 校验手机号(格式.是否注册).密码以及验证码 生成图片验证码 ''' pillow:是python处理图片的模块,很强大 ''' import rando ...
- Django 六——自定义标签、图片验证码、发送邮件、评论树、组合搜索
1.自定义标签 2.图片验证码 3.生成邮箱验证码.发送邮件 4.评论树实现 5.组合搜索(Q) 1.自定义标签 配置: a.在app中新建文件夹 templatetags,里面新建 xx.py文 ...
- Django之头像实时展示到input框、图片验证码、简单发邮件
一.以注册功能来看头像实时展示 首先先来写一个简单的页面: <div class="container-fluid"><div class="row&q ...
- django使用captcha完成图片验证码
使用captcha 1:需要下载包: pip install django-simple-captcha 2: 然后在settings的INSTALLED_APPS添加: 'captcha' 3: 需 ...
- Django之验证码的实现,简单快捷的方法
Django之验证码的实现,简单快捷的方法 实现验证码随网页变动即时刷新,实现有期限时间 请确保安装好pillow 直接show code: 0.路由urs.py from django.urls i ...
- drf实现图片验证码功能
一.背景 在之前实现过django的图片验证码,有自己实现过的,也有基于django-simple-captcha的,都是基于form表单验证,若自己实现,可以获取相应的标签name便可以获取判断,若 ...
- 图片验证码、阿里云短信发送和验证的逻辑
图片验证码的生成 1.django 缓存设置 1.1 安装Django缓存模块 pip install django-redis==4.12.1 1.2 syl/settings.py中配置缓存 # ...
- Django 之验证码实现
1. django-simple-captcha 模块 安装 django-simple-captcha pip install django-simple-captcha pip install P ...
- 1. 爬虫之Beautifulsoup解析库在线解析图片验证码
1. 解析库beautifulsoup 1.1 介绍 BeautifulSoup是一个可以从HTML或XML文件中提取数据的Python库. 官方文档: https://www.crummy.com/ ...
最新文章
- 第二阶段 铁大Facebook——十天冲刺(七)
- 怎么做圆一圈圈扩散效果_推广为什么没有效果,网络推广怎么做才有效果?
- (转)个例子让你了解Java反射机制
- # 20145220《信息安全系统设计基础》第1周学习总结
- 5款最适合新手的包管理器
- laravel常用响应操作
- SQLServer 2012重启服务后,自增1的标识列一次增长了1000左右
- rtklib 天线相位中心_发射天线的作用
- [Email] 收发邮件的协议 : IMAP and SMTP , POP3 and SMTP
- linux下的C语言开发(多线程编程)
- word排版案例报告_原来按下这个键,10秒EXCEL与Word格式就能互相转换,涨知识了...
- opencv之绘制多边形----cv2.polylines, cv2.fillPoly
- iPhone SDK开发基础之使用UITabBarController组织和管理UIView
- Mask_rcnn openpose realsense
- 图数据库——Nebula Graph安装部署(含示例)
- thinkpadE430c加装固态硬盘小记
- Altium Designer怎样秒敷铜?
- BUUCTF 世上无难事
- apollo学习之---planning理论到实践(5-3)---路径边界计算
- mysql 查询姓王_mysql常用数据操作之查