四. Django项目之电商购物商城 -- 图片验证码生成

embedded/2025/1/15 21:05:42/

Django项目之电商购物商城 – 图片验证码生成

需要开发文档和前端资料的可私聊

一. 图片验证码的生成

1. 创建应用用于生成图片验证码 , 以及短信验证码

python manage.py startapp verfications

2.配置radis数据库

"var_code":{# 配置数据库指定引擎"BACKEND" : "django_redis.cache.RedisCache",# 配置使用 Redis 的数据库名称"LOCATION" : "redis://127.0.0.1:6379/2","OPTIONS":{"CLIENT_CLASS" : "django_redis.client.DefaultClient"}},

3.认证应用 , 分发路由 , 创建路由

认证app

'verfications.apps.VerficationsConfig',

分发路由

path('', include('verfications.urls')),

创建验证码路由

re_path('^image_code/(?P<uuid>[\w-]+)/$' , views.ImageCodeView.as_view())

4. 生成图片验证码

from random import randint , choice
from PIL import Image , ImageDraw , ImageFont
import io , os# 制作随机验证码:数字,大小写字母
def get_random_code():# 随机数字number = str(randint(0,9))# 随机大写字母upper = chr(randint(65 , 90))# 随机小写字母lower = chr(randint(97, 122))# 再大小写字母和数字中再随机获取一个code = choice([number , upper , lower])return code# 获取随机颜色
def get_color():return (randint(0,255),randint(0,255),randint(0,255))# 制作图片
def create_img():# 创建图片对象img = Image.new(mode='RGB' , size=(90 , 30),color=get_color())# 创建画笔工具draw = ImageDraw.Draw(img)# 制作图片噪点# 噪点for i in range(60):# point([xy:图片的坐标] , fill颜色)draw.point([randint(0,150) , randint(0,30)] , fill=get_color())# 噪线for i in range(8):# line([xy:图片的坐标] , fill颜色)draw.line([randint(0,150) , randint(0,30),randint(0,150) , randint(0,30)] , fill=get_color())# 圆,弧线x = randint(0, 150)y = randint(0,15)for i in range(5):draw.arc([ x,y ,x*2 , y*2] ,0, 90 ,fill=get_color() )# 设置字体 , 导入字体文件 , 设置字体大小dir = os.path.join(os.path.dirname(__file__) , 'fonts','Arial.ttf')font = ImageFont.truetype(dir,24)# 拼接生成的验证码text = ''# 生成验证码for i in range(4):c = get_random_code()# 将获取到的验证码字符写入到图片中draw.text((10+20*i , 2) , text=c , fill=get_color() , font=font)text += c# 将图片保存到内存中out = io.BytesIO()# 保证验证码的图片img.save(out , format='png')return out.getvalue() , textif __name__ == '__main__':img , text = create_img()print(text)

4. 创建相应视图

在登录的js代码中会生成uuid作为图片验证码的url , 从而避免在多人注册的情况下生成的验证码被覆盖

from django.shortcuts import render , HttpResponse
from django.views import View
from verfications.PictureCode import CodeImg
from django_redis import get_redis_connection
# Create your views here.class ImageCodeView(View):# 获得uuid的参数def get(self , request , uuid):# 获得验证码 以及图片image , code = CodeImg.create_img()# 将数据保存到redis数据库redis_conn = get_redis_connection('var_code')redis_conn.setex(f'image_{uuid}' , 60 , code)return HttpResponse(image , content_type='image/png')

修改前端代码 , 绑定相关方法

<li><label>图形验证码:</label><input type="text" name="image_code" id="pic_code" class="msg_input"v-model="image_code" @blur="check_image_code"><img v-bind:src="image_code_url" alt="图形验证码" class="pic_code"@click="generate_image_code"><span class="error_tip" v-show="error_image_code">请填写图形验证码</span>
</li>

http://www.ppmy.cn/embedded/29772.html

相关文章

Ubuntu中常用的解/压缩命令

Ubuntu中常用的解/压缩命令 一、tar文件tar.tgz文件tar.gz文件tar.bz文件tar.bz2文件tar.Z文件 二、zip文件三、rar文件四、gz文件五、bz文件bz2文件 六、Z文件七、tgz文件八、lha文件 一、tar文件 解压&#xff1a;tar xvf FileName.tar 压缩&#xff1a;tar cvf FileName.ta…

JAVA面试专题-微服务篇

Spring cloud Spring Cloud 5大组件有哪些 注册中心/配置中心&#xff1a;nacos 负载均衡&#xff1a;Ribbon 服务远程调用&#xff1a;Feign 服务保护&#xff1a;sentinel 服务网关&#xff1a;Gateway 微服务注册和发现 nacos和eureka的区别 负载均衡 微服务向Ribbon发送…

基于php+mysql+html超市商品管理系统(含论文)

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、Php、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…

搜维尔科技:TechViz中的手指跟踪:触摸3D模型并与之交互

TechViz中的手指跟踪&#xff1a;触摸3D模型并与之交互 搜维尔科技&#xff1a;TechViz中的手指跟踪&#xff1a;触摸3D模型并与之交互

如何解决Go中uint类型溢出问题

如何解决Go中uint类型溢出问题 Golong的uint类型溢出问题通常会发生在大量的运算中&#xff0c;特别是涉及到大量循环和大数运算中。当uint类型的值超过其最大值时&#xff0c;会发生溢出&#xff0c;从最小值开始循环&#xff0c;一般有如下几种解决办法&#xff1a; 1. 使用…

指纹浏览器:网络安全与隐私的新工具

在互联网时代&#xff0c;隐私和网络安全成为人们越来越关注的话题。随着数字化的发展&#xff0c;个人信息的泄露和在线追踪的问题愈发严峻。在这个背景下&#xff0c;"指纹浏览器"作为一种新型工具&#xff0c;开始受到关注。撸空投需要了解指纹浏览器。本文将深入…

逻辑漏洞:水平越权、垂直越权靶场练习

目录 1、身份认证失效漏洞实战 2、YXCMS检测数据比对弱&#xff08;水平越权&#xff09; 3、MINICMS权限操作无验证&#xff08;垂直越权&#xff09; 1、身份认证失效漏洞实战 上一篇学习了水平越权和垂直越权的相关基本知识&#xff0c;在本篇还是继续学习&#xff0c;这…

38-4 Web应用防火墙 - WAF的使用及规则

准备:38-3 Web应用防火墙 - 安装配置WAF-CSDN博客 WAF的使用 启动 Nginx /usr/local/nginx/sbin/nginx 为了测试未启动 ModSecurity 时的访问效果,我们可以模拟攻击。要查看当前虚拟机的 IP 地址,可以使用命令 ifconfig 浏览器中访问ip,如果要在真实机中访问就需要关闭…