Django实现图片验证码

Django中图片验证码的实现

效果图:

实现思路:

注册页面提供验证码输入标签:

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

name="pic_code"用来在视图函数中接收,如:

pic_code = request.POST.get('pic_code')

v-model="image_code"用来在vue中获取双向绑定的值,如:

data:{image_code:''}

@blur="check_image_code"用来调用vue中的校验方法,如:

methods:{//校验图形验证码
        check_image_code: function () {
            // 校验非空
            if (this.image_code == "") {
                this.error_image_code_message = "图形验证码不能为空";
                this.error_image_code = false;
            }
        }}

:src="image_code_url"是vue中绑定src属性的简写,完整形式为:v-bind:src="image_code_url",要注意不能写成这样:src="{{ image_code_url }}"/.

绑定这个属性是因为验证码图片是动态生成的,每一个新的图片路径均不同,所以src需要动态赋值.

于是vue中的data中要声明这个字段:

data:{
    image_code_url: ''
}

@click="generate_image_code">是一个鼠标点击事件,作用是"换图片",其对应的js方法如下:

methods:{
    generateUUID: function () {
            var d = new Date().getTime();
            if (window.performance && typeof window.performance.now === "function") {
                d += performance.now(); //use high-precision timer if available
            }
            var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
                var r = (d + Math.random() * 16) % 16 | 0;
                d = Math.floor(d / 16);
                return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16);
            });
            return uuid;
        },
        // 生成一个图片验证码的编号,并设置页面中图片验证码img标签的src属性
        generate_image_code: function () {
            // 生成一个编号 : 严格一点的使用uuid保证编号唯一, 不是很严谨的情况下,也可以使用时间戳
            this.image_code_id = this.generateUUID();
            // 设置页面中图片验证码img标签的src属性
            this.image_code_url = this.host + "/image_codes/" + this.image_code_id + "/";
            console.log(this.image_code_url);
        }
}

当页面加载时,请求验证码图片的方法应该被默认加载(即generate_image_code方法),实现方式为:

mounted: function () {
        // 向服务器获取图片验证码
        this.generate_image_code();
}

generate_image_code方法执行完毕,会返回一个url,其内容为:主机名+/image_code/+图片唯一uuid,当src标签有了url就会自动加载,即向服务器请求图片.

后台应提供t生成图片验证码的视图函数,将其命名为ImageCodeView,内容如下:

class ImagecodeView(View):
    def get(self, request, uuid):
        # 生成图形验证码数据:字符code,图片image,得到验证码字符以及图片
        text, code, image = captcha.generate_captcha()
        # 获取redis连接对象
        redis_cli = get_redis_connection('verify_code')
        # 向redis中写数据
        redis_cli.setex(uuid, constants.IMAGE_CODE_EXPIRES, code)

        return http.HttpResponse(image, content_type='image/png')

Captcha是一个生成图形验证码图片的工具

生成验证码后,将需要的字段放在redis中,之后将图片返回给浏览器,页面得以显示图片验证码.

源码

原文地址:https://www.cnblogs.com/lulujunsir/p/verifypic.html

时间: 2024-09-27 01:44:55

Django实现图片验证码的相关文章

django项目登录中使用图片验证码

应用下创建untils文件夹放置封装图片验证码的函数 创建validCode.py文件定义验证码规则 import random def get_random_color(): return (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)) def get_valid_code_img(request): # 方式: from PIL import Image, ImageDraw, ImageFon

django图片验证码和滑动验证

1. django-simple-captcha 模块 安装 django-simple-captcha pip install django-simple-captcha pip install Pillow 注册 和注册 app 一样,captcha 也需要注册到 settings 中.同时它也会创建自己的数据表,因此还需要数据同步. # settings.py INSTALLED_APPS = [ ... 'captcha', ] # 执行命令进行数据迁徙,会发现数据库中多了一个 capt

day20 project+查看新闻列表 + 点赞 + 图片验证码 + 评论和多级评论 + 后台管理 + webSocket + kindEditor

Day20回顾: 1. 请求生命周期 2. 中间件 md = [ "file_path.classname" ] process_request[可有可无] process_response[必须有] process_request process_response process_request process_response process_request process_response process_request process_response 路由->函数 3.

插拔式自定义图片验证码(开源)

1:第一种自定义验证码(推荐) 1 前端: <img id ="img" src="/路由/"> <span {{ dict.error }}</span> 2 前端js刷新验证码: 3 <script> 4 img =document.getElementById("img"); 5 img.onclick = function () { 6 img.src = img.src + "?&qu

水印、图片验证码

(貌似这个验证码不能获取,假设设置一个隐藏的label来记录又失去了他的意义) 一.水印 1.画布 System.Drawing.Image img = System.Drawing.Image.FromStream(FileUpload1.FileContent); 2.创建绘制对象,告诉它往哪张图片上绘制 Graphics g = Graphics.FromImage(img); 3.绘制的内容 string s = "www.itnba.com"; 4.绘制的字体 Font f

水印,图片验证码

加水印: 1.画布 2.笔.颜色.从那开始画.画的内容 获取新的路径 保存新的图片 设置新图片为背景 图片验证码: 例如画一个abcd 100*5o大小.黑体30像素.红色的 为了防止被抓去,跳转到另一个页面执行,需要把照片用流输出回去 完整验证码 验证:

图片验证码

1.首先创建一个web窗体,只使用后台部分,生成验证码,并输出图片流跟图片验证码的字符,在使用验证码的窗体中图片控件直接指向这个窗体 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Drawing; public partial class Y

java web中图片验证码功能实现

用户在注册网站信息的时候基本上都要数据验证码验证.那么图片验证码功能该如何实现呢? 大概步骤是: 1.在内存中创建缓存图片 2.设置背景色 3.画边框 4.写字母 5.绘制干扰信息 6.图片输出 废话不多说,直接上代码 package com.lsgjzhuwei.servlet.response; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.Buffer

基于spring mvc的图片验证码实现

基于spring mvc的图片验证码实现 标签: springmvcspring mvc验证码验证码验证 2016-01-28 10:49 8015人阅读 评论(4) 收藏 举报  分类: 表单处理 版权声明:本文为博主原创文章,未经博主允许不得转载. 本文实现基于spring mvc的图片验证码,分后台代码和前端页面的展现以及验证码的验证. 首看后台实现代码: @RequestMapping({"authCode"}) public void getAuthCode(HttpServ