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

news/2024/9/22 14:40:16/

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/news/1448715.html

相关文章

[LitCTF 2023]Ping、[SWPUCTF 2021 新生赛]error、[NSSCTF 2022 Spring Recruit]babyphp

[LitCTF 2023]Ping 尝试ping一下127.0.0.1成功了&#xff0c;但要查看根目录时提示只能输入IP 查看源代码&#xff0c;这段JavaScript代码定义了一个名为check_ip的函数&#xff0c;用于验证输入是否为有效的IPv4地址。并且使用正则表达式re来匹配IPv4地址的格式。 对于这种写…

进迭时空宣布开源RISC-V芯片的AI核心技术

仟江水商业电讯&#xff08;4月29日 北京 委托发布&#xff09;4月29日&#xff0c;在“创芯生生不息——进迭时空2024年度产品发布会”上&#xff0c;进迭时空CEO、创始人&#xff0c;陈志坚博士宣布将开源进迭时空在自研RISC-V AI CPU上的核心技术&#xff0c;包括AI扩展指令…

显示和隐藏两个不同表格在同一个位置,列的宽度错乱。

当切换按钮&#xff0c;显示和隐藏两个不同表格在同一个位置的时候。列的宽度又是不固定的&#xff0c;会出现列宽度错乱的问题 刚开始我是用的el-table自带的doLayout()&#xff0c;并不适合用。反正我这边是不起作用的&#xff0c;不知道是不是我用错了。 1&#xff0c; 在…

快速了解Django:核心概念解析与实践指南

title: 快速了解Django&#xff1a;核心概念解析与实践指南 date: 2024/5/1 20:31:41 updated: 2024/5/1 20:31:41 categories: 后端开发 tags: Django核心路由系统视图系统ORM管理中间件Web框架登录装饰器 第一章&#xff1a;Django简介 背景和发展历程&#xff1a; Djan…

爬虫学习--2.urllib 库

urllib了解 urllib 库 是 Python 内置的 HTTP 请求库。urllib 模块提供的上层接口,使访问 www 和 ftp 上的数据就像访问本地文件一样。 有以下几种模块: urllib.request 请求模块 urllib.error 异常处理模块 urllib.parse url解析模块 urllib.robotparser robots.txt 解析模…

react完整项目搭建的思路

react完整项目搭建的思路 react完整项目搭建的思路1.使用creacte-react-app初始化项目2.安装所需插件:路由、网络、样式、组件库3.reactjs目录结构组织4. 配置路径别名4.配置路由5.网络配置,对axios进行封装》获取当前环境变量 6.配置代理解决跨域7.配置使用iconfont8.状态管理…

MySQL连表查询

MySQL简介&#xff0c;我们为什么要学习各种join MySQL是SQL的一种&#xff0c;SQL意为结构化查询语言(Structure Query Language)&#xff0c;MySQL可以应用于现实世界的各种结构化数据。 SQL&#xff08;结构化查询语言&#xff09;&#xff0c;处理结构化数据的查询语言&a…

2024最新UI发卡盗U/支持多语言/更新UI界面/支持多个主流钱包

2024最新UI发卡盗U/支持多语言/更新UI界面/支持多个主流钱包 自行检查后门&#xff0c;最好是部署智能合约后用合约地址来授权 包含转账支付页面盗U授权源码 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/89122428 更多资源下载&#xff1a;关注我。…