首页 > 其他 > 详细

图片验证码

时间:2019-07-22 10:46:03      阅读:59      评论:0      收藏:0      [点我收藏+]

项目文件:

  技术分享图片

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, rstatic_files\fonts\BRUX.otf)#字体路径(字体自己下载)
25     print(>>>>, font_path)
26     # font_obj = ImageFont.truetype(font_path, 26)#路径拼接注意不能有中文,否则报错
27     font_obj = ImageFont.truetype(rstatic_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

 

图片验证码

原文:https://www.cnblogs.com/open-yang/p/11223333.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!