使用Django实现商城验证码模块的方法


Posted in Python onJune 01, 2021

本文主要涉及图形验证码的相关功能,主要包括,图形验证码获取、验证码文字存储、验证码生成等。

图形验证码接口设计和定义

 验证码获取接口设计

使用Django实现商城验证码模块的方法

uuid作为路径参数,唯一标识验证码所属用户

新建应用

验证码的相关逻辑我们用一个单独的app处理,所以这里需要新建一个叫verifications的app,建好app后,打开views.py视图文件,编写一个验证码的视图类

class ImageCodeView(View):
    """图形验证码"""
    def get(self, request, uuid):
        """
        :param request: 请求对象
        :param uuid: 唯一标识图形验证码所属于的用户
        :return: image/jpg
        """
        pass

然后配置路由

项目路由配置:

path('', include('apps.verifications.urls')),配置app的路由

path('image_codes/``uuid:uuid``/', views.ImageCodeView.as_view()),

验证码处理相关准备工作

准备captcha扩展包

​ 把captcha扩展包放到verifications的lib目录下,然后需要安装Python的图片处理库,pip install Pillow

准备Redis数据库

redis用来存储图片验证码上的数字,后面会用来做校验

"verify_code": { # 验证码
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/2",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    },

图形验证码后端逻辑实现

class ImageCodeView(View):
    """图形验证码
    """

    def get(self, request, uuid):
        """
        实现图形验证码逻辑
        :param uuid: UUID
        :return: image/jpg
        """
        # 生成图形验证码
        text, image = captcha.generate_captcha()

        # 保存图形验证码
        # 使用配置的redis数据库的别名,创建连接到redis的对象
        redis_conn = get_redis_connection('verify_code')
        # 使用连接到redis的对象去操作数据存储到redis
        # redis_conn.set('key', 'value') # 因为没有有效期
        # 图形验证码必须要有有效期的:设计是300秒有效期
        # redis_conn.setex('key', '过期时间', 'value')
        redis_conn.setex('img_%s' % uuid, 300, text)

        # 响应图形验证码: image/jpg
        return http.HttpResponse(image, content_type='image/jpg')

图形验证码前端逻辑

Vue实现图形验证码展示

1.register.js

mounted(){
    // 生成图形验证码
    this.generate_image_code();
},
methods: {
    // 生成图形验证码
    generate_image_code(){
        // 生成UUID。generateUUID() : 封装在common.js文件中,需要提前引入
        this.uuid = generateUUID();
        // 拼接图形验证码请求地址
        this.image_code_url = "/image_codes/" + this.uuid + "/";
    },
    ......
}

2.register.html

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

3.图形验证码展示和存储效果

Vue实现图形验证码校验

1.register.html

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

2.register.js

check_image_code(){
    if(!this.image_code) {
        this.error_image_code_message = '请填写图片验证码';
        this.error_image_code = true;
    } else {
        this.error_image_code = false;
    }
},

3.图形验证码校验效果

使用Django实现商城验证码模块的方法

至此验证码部分就说完了

到此这篇关于使用Django实现商城验证码模块的方法的文章就介绍到这了,更多相关Django 商城验证码模块内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python使用pil生成缩略图的方法
Mar 26 Python
Python输出9*9乘法表的方法
May 25 Python
python 表达式和语句及for、while循环练习实例
Jul 07 Python
python如何实现内容写在图片上
Mar 23 Python
python 多线程重启方法
Feb 18 Python
python 实现将文件或文件夹用相对路径打包为 tar.gz 文件的方法
Jun 10 Python
Django如何实现网站注册用户邮箱验证功能
Aug 14 Python
python下载库的步骤方法
Oct 12 Python
在Django中实现添加user到group并查看
Nov 18 Python
Python数据可视化:顶级绘图库plotly详解
Dec 07 Python
python中return不返回值的问题解析
Jul 22 Python
python urllib库的使用详解
Apr 13 Python
pytorch通过训练结果的复现设置随机种子
Jun 01 #Python
matplotlib画混淆矩阵与正确率曲线的实例代码
Jun 01 #Python
详细介绍python类及类的用法
教你怎么用PyCharm为同一服务器配置多个python解释器
用python批量解压带密码的压缩包
May 31 #Python
变长双向rnn的正确使用姿势教学
如何在Python项目中引入日志
You might like
推荐几部必看的DC动画电影
2020/03/03 欧美动漫
通过PHP自带的服务器来查看正则匹配结果的方法
2015/12/24 PHP
Laravel中批量赋值Mass-Assignment的真正含义详解
2017/09/29 PHP
xtree.js 代码
2007/03/13 Javascript
javascript与asp.net(c#)互相调用方法
2009/12/13 Javascript
JavaScript 设计模式 富有表现力的Javascript(一)
2010/05/26 Javascript
Javascript合并表格中具有相同内容单元格示例
2013/08/11 Javascript
jquery iframe操作详细解析
2013/11/20 Javascript
jQuery实现跟随鼠标运动图层效果的方法
2015/02/02 Javascript
关于两个jQuery(js)特效冲突的bug的解决办法
2016/09/04 Javascript
jQuery实现的tab标签切换效果示例
2016/09/05 Javascript
JavaScript装饰器函数(Decorator)实例详解
2017/03/30 Javascript
使用bootstrap插件实现模态框效果
2017/05/10 Javascript
Angular使用Md5加密的解决方法
2017/09/16 Javascript
Javascript 严格模式use strict详解
2017/09/16 Javascript
手把手教你使用vue-cli脚手架(图文解析)
2017/11/08 Javascript
Vue中v-show添加表达式的问题(判断是否显示)
2018/03/26 Javascript
bootstrap自定义样式之bootstrap实现侧边导航栏功能
2018/09/10 Javascript
iView框架问题整理小结
2018/10/16 Javascript
在vue中使用防抖和节流,防止重复点击或重复上拉加载实例
2019/11/13 Javascript
JS 5种遍历对象的方式
2020/06/16 Javascript
[00:32]2018DOTA2亚洲邀请赛Secret出场
2018/04/03 DOTA
Python的print用法示例
2014/02/11 Python
Python编程之基于概率论的分类方法:朴素贝叶斯
2017/11/11 Python
对python3 Serial 串口助手的接收读取数据方法详解
2019/06/12 Python
英国第一蛋白粉品牌:Myprotein
2016/09/14 全球购物
Crocs美国官方网站:卡骆驰洞洞鞋
2017/08/04 全球购物
若干个Java基础面试题
2015/05/19 面试题
2014年高三毕业生自我评价
2014/01/11 职场文书
课前三分钟演讲稿
2014/04/24 职场文书
村长反四风问题个人对照检查材料
2014/09/21 职场文书
教师个人总结范文
2015/02/11 职场文书
感恩信:写给爸爸妈妈的一封感谢信
2019/09/12 职场文书
redis 解决库存并发问题实现数量控制
2022/04/08 Redis
德生2P3收音机开箱评测
2022/04/30 无线电
mysql 排序失效
2022/05/20 MySQL