7月2日 Django 生成验证码、

html页面里

{#  验证码   #}
 <div class="form-group " id="v-code-wrapper">
      <label for="v_code_input">验证码</label>
      <input type="text" class="form-control" id="v_code_input" name="v_code_input">
      <img src="/get_v_code/" class="" id="v_code">
 </div>

js里

{#当图片的src改变时,浏览器会自动访问该地址,所以此处点击验证码图片,触发事件改变src地址内容,用以改变验证码图片#}
$(‘#v_code‘).click(function () {
   if (this.src == ‘/get_v_code/‘) {
       this.src += ‘?‘;
   } else {
       this.src = ‘/get_v_code/‘;
   }
});

views.py文件里

# 因为页面控制每次点击图片在连接后加? 或减去?,url一直都是这两个,Django会自动将这两个url的执行加入缓存,所以每次会获得一样的验证图片
# 该语法糖 告诉系统不要对该方法进行缓存操作
@never_cache
def get_v_code(request):
    from PIL import Image, ImageDraw, ImageFont
    import random

    # 定义生成一个随机颜色代码的内部函数
    def get_color():
        return random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)

    # 生成一个图片对象
    img_obj = Image.new(
        ‘RGB‘,  # 图片格式
        (166, 37),  # 图片大小
        color=get_color()
    )

    # 在图片中加文字

    # 生成一个画笔对象
    draw_obj = ImageDraw.Draw(img_obj)

    # 加载字体文件
    font_obj = ImageFont.truetype(‘static/font/kumo.ttf‘, size=28)

    # 循环5次,每次往图片上写入一个随机字符
    tmp_list = []
    for i in range(5):
        n = str(random.randint(0, 9))
        l = chr(random.randint(97, 122))
        u = chr(random.randint(65, 90))

        r = random.choice([n, l, u])
        tmp_list.append(r)
        draw_obj.text(
            (i * 30 + 10, 0),  # 位置
            r,  # 内容
            get_color(),  # 颜色
            font=font_obj,
        )
    # 得到随机验证码
    v_code = ‘‘.join(tmp_list)

    request.session[‘v_code‘] = v_code.upper()

    # 第一种,将图片保存到文件(硬盘),然后再返回到页面
    # with open(‘vv.png‘, ‘wb‘)as f:
    #     img_obj.save(f, ‘png‘)
    # with open(‘vv.png‘, ‘rb‘)as f:
    #     return HttpResponse(f.read(), content_type=‘imge/png‘)

    # 第二种,直接将图片放在内存中,返回回去
    from io import BytesIO
    tmp = BytesIO()  # 生成一个IO对象
    img_obj.save(tmp, ‘png‘)

    data = tmp.getvalue()
    return HttpResponse(data, content_type=‘imge/png‘)

原文地址:https://www.cnblogs.com/95lyj/p/9265825.html

时间: 2024-11-01 16:35:22

7月2日 Django 生成验证码、的相关文章

Django 生成验证码或二维码 pillow模块

一.安装PIL PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了.PIL功能非常强大,API也非常简单易用. ? PIL模块只支持到Python 2.7,许久没更新了,在python 3.* 版本上使用Pillow模块 ? 安装Pillow ? pip install pillow 二.pillow 基本使用 图像缩放 from PIL import Image # 当前路径打开一个jpg图像文件 img = Image.open('test.

django生成验证码

验证码生成依赖于PIL库. 生成验证码的代码如下: def captcha(request): width = 100 height = 40 bg_color = (255, 255, 255) image = Image.new('RGB', (width, height), bg_color) font = ImageFont.truetype('Arial.ttf', 30) font_color = (0, 0, 0) draw = ImageDraw.Draw(image) capt

6月28日 Django form表单

Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入,输入的长度和格式等正不正确.如果用户输入的内容有错误就需要在页面上相应的位置显示对应的错误信息.. Django form组件就实现了上面所述的功能. 总结一下,其实form组件的主要功能如下: 生成页面可用的HTML标签 对用户提交的数据进行校验 保留上次输入内容 普通的登录 views.p

6月26日 Django 中间件

 前戏 我们在前面的课程中已经学会了给视图函数加装饰器来判断是用户是否登录,把没有登录的用户请求跳转到登录页面.我们通过给几个特定视图函数加装饰器实现了这个需求.但是以后添加的视图函数可能也需要加上装饰器,这样是不是稍微有点繁琐. 学完今天的内容之后呢,我们就可以用更适宜的方式来实现类似给所有请求都做相同操作的功能了 中间件 中间件介绍 什么是中间件? 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围内改变Django的输入

7月2日 Django注册页面的form组件

forms.py里注册页面的form组件 # Create your views here. class RegForm(forms.Form): username = forms.CharField( min_length=3, label="用户名", help_text='', error_messages={ "required": "不能为空", "invalid": "格式错误", "

python+Django自己生成验证码

1.views.pyfrom django.shortcuts import render, HttpResponsefrom django.http import JsonResponse from django.contrib import authfrom PIL import Image, ImageDraw, ImageFontimport randomfrom io import BytesIO # Create your views here. # 自己生成验证码的登录 def l

6月19 使用tp框架生成验证码及文件上传

ThinkPHP中自带能生成验证码的类:ThinkPHP/Library/Think/Verify.class.php 默认情况下,验证码的字体是随机使用 ThinkPHP/Library/Think/Verify/ttfs/目录下面的字体文件,我们可以指定验证码的字体 汉字的验证码:ThinkPHP/Library/Think/Verify/zhttfs/添加中文的字体格式 更改字体:ttf格式 关于验证码的一些知识点: 1.例题:通过验证码实现用户的登录,并利用jquery实现点击图片验证码

SpringMvc项目中使用GoogleKaptcha 生成验证码

SpringMvc项目中使用GoogleKaptcha 生成验证码 前言:google captcha 是google生成验证码的一个工具类,其原理是将随机生成字符串保存到session中,同时以图片的形式返回给页面,之后前台页面提交到后台进行对比. 1.jar包准备 官方提供的pom应该是 <dependency> <groupId>com.google.code.kaptcha</groupId> <artifactId>kaptcha</arti

类型--2014年10月19日

// //Console.WriteLine(); // //int s = int.Parse(Console.ReadLine()); // double d = double.Parse(Console.ReadLine()); // //d=Math.Sqrt(d);//平方根,即25时,输出为5,,,输入4,0时输出2 // // d=Math.PI;//圆周率 // //d = Math.Ceiling(d);//取上线.即2.1为3.....1.0为1 // //d = Math.