• django之验证码


    前期准备:python版本:3.6.3

        pycharm专业版

        django:1.11.16版本

        操作系统:Windows

    开始工作:

    1. 安装Pillow版本4.0.0    命令行:pip install Pillow==4.0.0
    2. 定义一个路由用来返回验证码的视图函数: url(r'^verifycode$', Index.verifycode, name='myadmin_verifycode')
    3. 定义视图函数
    4. def verifycode(request):
          #引入绘图模块
          from PIL import Image, ImageDraw, ImageFont
          #引入随机函数模块
          import random
          #定义变量,用于画面的背景色、宽、高
          bgcolor = (random.randrange(20, 100), random.randrange(20, 100), 255)
          width = 100
          height = 30
          #创建画面对象
          im = Image.new('RGB', (width, height), bgcolor)
          #创建画笔对象
          draw = ImageDraw.Draw(im)
          #调用画笔的point()函数绘制噪点
          for i in range(0, 100):
              xy = (random.randrange(0, width), random.randrange(0, height))
              fill = (random.randrange(0, 255), 255, random.randrange(0, 255))
              draw.point(xy, fill=fill)
          #定义验证码的备选值
          # str1 = 'ABCD123EFGHIJK456LMNOPQRS789TUVWXYZ0'
          str1 = '123456789'
          #随机选取4个值作为验证码
          rand_str = ''
          for i in range(0, 4):
              rand_str += str1[random.randrange(0, len(str1))]
          #构造字体对象,注意此处为windows内置字体
          font = ImageFont.truetype('ebrima.ttf', 23)
          #构造字体颜色
          fontcolor = (255, random.randrange(0, 255), random.randrange(0, 255))
          #绘制4个字
          draw.text((5, 2), rand_str[0], font=font, fill=fontcolor)
          draw.text((25, 2), rand_str[1], font=font, fill=fontcolor)
          draw.text((50, 2), rand_str[2], font=font, fill=fontcolor)
          draw.text((75, 2), rand_str[3], font=font, fill=fontcolor)
          #释放画笔
          del draw
          #存入session,用于做进一步验证
          request.session['verifycode'] = rand_str
          #内存文件操作
          import io
          buf = io.BytesIO()
          #将图片保存在内存中,文件类型为png
          im.save(buf, 'png')
          #将内存中的图片数据返回给客户端,MIME类型为图片png
          return HttpResponse(buf.getvalue(), 'image/png')

    5. 模板中使用:

        <img src="{% url 'myadmin_verifycode' %}" onclick="this.src='{% url 'myadmin_verifycode' %}?'+Math.random()+''" >

  • 相关阅读:
    2017ecjtu-summer training #4 CodeForces 731C
    HDU 1232 并查集
    2017ecjtu-summer training #3 POJ3264
    2017ecjtu-summer training #4 UESTC 30
    斑羚飞渡 贪心
    Codeforces Round #565 (Div. 3) D. Recover it!
    P3398 仓鼠找sugar lca
    P3146 [USACO16OPEN]248 dp
    P1955 [NOI2015]程序自动分析 离散化
    P2949 [USACO09OPEN]工作调度Work Scheduling 贪心
  • 原文地址:https://www.cnblogs.com/cage0515/p/9989126.html
Copyright © 2020-2023  润新知