zoukankan      html  css  js  c++  java
  • 图片验证码

    项目文件:

      

    views.py 

     1 from django.shortcuts import render, HttpResponse
     2  
     3 # Create your views here.
     4  
     5 def index(request):
     6     return render(request, 'index.html')
     7  
     8 #随机验证码
     9 def get_cverification_code(request):
    10     import os
    11     from imgecodetest import settings#字体路径拼接用,可以直接使用相对路径
    12     import random
    13     def get_random_color():
    14         '''
    15         随机颜色
    16         :return: rgb颜色
    17         '''
    18         return (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
    19  
    20     from PIL import Image, ImageDraw, ImageFont#要先安装pillow模块:pip install pillow
    21     img_obj = Image.new('RGB', (120, 40), get_random_color())#实例化图片对象,设置大小和背景颜色
    22     draw_obj = ImageDraw.Draw(img_obj)#创建图片
    23  
    24     font_path = os.path.join(settings.BASE_DIR, r'static_filesfontsBRUX.otf')#字体路径(字体自己下载)
    25     print('>>>>', font_path)
    26     # font_obj = ImageFont.truetype(font_path, 26)#路径拼接注意不能有中文,否则报错
    27     font_obj = ImageFont.truetype(r'static_files/fonts/BRUX.otf', 26) #相对路径r'static_files/fonts/BRUX.otf'
    28     # font_obj = ImageFont.load_default().font#系统默认字体
    29     sum_str = ''
    30     for i in range(6):#生成随机的字母数字组合
    31         a = random.choice([str(random.randint(0, 9)), chr(random.randint(97, 122)),
    32                            chr(random.randint(65, 90))])  # 4  a  5  D  6  S
    33         sum_str += a
    34     print(sum_str)
    35     draw_obj.text((12, 2), sum_str, fill=get_random_color(), font=font_obj)
    36  
    37     width = 120
    38     height = 40
    39     # 添加噪线
    40     for i in range(5):#循环一次就是一条线:两点确定一条
    41         x1 = random.randint(0, width)
    42         x2 = random.randint(0, width)
    43         y1 = random.randint(0, height)
    44         y2 = random.randint(0, height)
    45         draw_obj.line((x1, y1, x2, y2), fill=get_random_color())
    46     # # 添加噪点
    47     for i in range(10):
    48         # 这是添加点,50个点
    49         draw_obj.point([random.randint(0, width), random.randint(0, height)], fill=get_random_color())
    50         # 下面是添加很小的弧线,看上去类似于一个点,50个小弧线
    51         x = random.randint(0, width)
    52         y = random.randint(0, height)
    53         draw_obj.arc((x, y, x + 4, y + 4), 0, 90, fill=get_random_color())
    54  
    55     from io import BytesIO#生成的图片格式指定和存在位置(缓存)
    56     f = BytesIO()
    57     img_obj.save(f, 'png')
    58     data = f.getvalue()
    59  
    60     # 验证码对应的数据保存到session里面
    61     request.session['valid_str'] = sum_str
    62  
    63     return HttpResponse(data)
    views.py

    urls.py

     1 from django.conf.urls import url
     2 from django.contrib import admin
     3 from app01 import views
     4  
     5 urlpatterns = [
     6     url(r'^admin/', admin.site.urls),
     7     url(r'^index/', views.index, name='index'),
     8     url(r'^get_cverification_code/', views.get_cverification_code, name='get_cverification_code'),
     9  
    10 ]
    urls.py

    templates

    index.html

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>随机验证码</title>
     6 </head>
     7 <body>
     8 <img src="{% url 'get_cverification_code' %}"  id="cverification_code" title="点击刷新">
     9 </body>
    10 <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
    11 <script>
    12     //点击图片刷新验证码
    13     $(function () {
    14         $('#cverification_code').on('click',function () {
    15             
    16             var src='{% url "get_cverification_code" %}?temp='+Math.random();
    17             console.log(src);
    18             $('#cverification_code').attr('src',src);
    19         });
    20     })
    21 </script>
    22 </html>
    index.html

     

  • 相关阅读:
    NOJ 1116 哈罗哈的大披萨 【淡蓝】 [状压dp+各种优化]
    Codeforces Round #278 (Div. 2) B. Candy Boxes [brute force+constructive algorithms]
    noj 2069 赵信的往事 [yy题 无限gcd]
    noj 2068 爱魔法的露露 [线性扫一遍]
    Codeforces Round #275 (Div. 2) B. Friends and Presents 二分+数学
    Word2007文档中怎么输入上标下标
    Linux下查找命令
    矩阵求逆
    LRC算法在人脸识别中应用
    java从txt文档读写数据
  • 原文地址:https://www.cnblogs.com/open-yang/p/11223333.html
Copyright © 2011-2022 走看看