国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Django自定義插件實現網站登錄驗證碼功能

Django自定義插件實現網站登錄驗證碼功能

2020-09-30 13:14M.Ocean Python

這篇文章主要為大家詳細介紹了Django自定義插件實現網站登錄驗證碼功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下

前言

網站登錄的時候我們常常會看到隨機的驗證碼需要輸入后臺驗證,如圖:

Django自定義插件實現網站登錄驗證碼功能

現在我們來實現在Django中通過自定制插件來實現隨機驗證

check_code.py

基于PIL生成一個帶驗證碼的圖片和驗證碼,生成驗證碼圖片需要Monaco.ttf字體(重要),可按自己要求更改check_code中的字體和字體文件位置

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#!/usr/bin/env python
# -*- coding:utf-8 -*-
 
import random
from PIL import Image, ImageDraw, ImageFont, ImageFilter
 
_letter_cases = "abcdefghjkmnpqrstuvwxy" # 小寫字母,去除可能干擾的i,l,o,z
_upper_cases = _letter_cases.upper() # 大寫字母
_numbers = ''.join(map(str, range(3, 10))) # 數字
init_chars = ''.join((_letter_cases, _upper_cases, _numbers))
 
 
def create_validate_code(size=(120, 30),
             chars=init_chars,
             img_type="GIF",
             mode="RGB",
             bg_color=(255, 255, 255),
             fg_color=(0, 0, 255),
             font_size=18,
             font_type="Monaco.ttf",
             length=4,
             draw_lines=True,
             n_line=(1, 2),
             draw_points=True,
             point_chance=2):
  """
  @todo: 生成驗證碼圖片
  @param size: 圖片的大小,格式(寬,高),默認為(120, 30)
  @param chars: 允許的字符集合,格式字符串
  @param img_type: 圖片保存的格式,默認為GIF,可選的為GIF,JPEG,TIFF,PNG
  @param mode: 圖片模式,默認為RGB
  @param bg_color: 背景顏色,默認為白色
  @param fg_color: 前景色,驗證碼字符顏色,默認為藍色#0000FF
  @param font_size: 驗證碼字體大小
  @param font_type: 驗證碼字體,默認為 ae_AlArabiya.ttf
  @param length: 驗證碼字符個數
  @param draw_lines: 是否劃干擾線
  @param n_lines: 干擾線的條數范圍,格式元組,默認為(1, 2),只有draw_lines為True時有效
  @param draw_points: 是否畫干擾點
  @param point_chance: 干擾點出現的概率,大小范圍[0, 100]
  @return: [0]: PIL Image實例
  @return: [1]: 驗證碼圖片中的字符串
  """
 
  width, height = size # 寬高
  # 創建圖形
  img = Image.new(mode, size, bg_color)
  draw = ImageDraw.Draw(img) # 創建畫筆
 
  def get_chars():
    """生成給定長度的字符串,返回列表格式"""
    return random.sample(chars, length)
 
  def create_lines():
    """繪制干擾線"""
    line_num = random.randint(*n_line) # 干擾線條數
 
    for i in range(line_num):
      # 起始點
      begin = (random.randint(0, size[0]), random.randint(0, size[1]))
      # 結束點
      end = (random.randint(0, size[0]), random.randint(0, size[1]))
      draw.line([begin, end], fill=(0, 0, 0))
 
  def create_points():
    """繪制干擾點"""
    chance = min(100, max(0, int(point_chance))) # 大小限制在[0, 100]
 
    for w in range(width):
      for h in range(height):
        tmp = random.randint(0, 100)
        if tmp > 100 - chance:
          draw.point((w, h), fill=(0, 0, 0))
 
  def create_strs():
    """繪制驗證碼字符"""
    c_chars = get_chars()
    strs = ' %s ' % ' '.join(c_chars) # 每個字符前后以空格隔開
 
    font = ImageFont.truetype(font_type, font_size)
    font_width, font_height = font.getsize(strs)
 
    draw.text(((width - font_width) / 3, (height - font_height) / 3),
         strs, font=font, fill=fg_color)
 
    return ''.join(c_chars)
 
  if draw_lines:
    create_lines()
  if draw_points:
    create_points()
  strs = create_strs()
 
  # 圖形扭曲參數
  params = [1 - float(random.randint(1, 2)) / 100,
       0,
       0,
       0,
       1 - float(random.randint(1, 10)) / 100,
       float(random.randint(1, 2)) / 500,
       0.001,
       float(random.randint(1, 2)) / 500
       ]
  img = img.transform(size, Image.PERSPECTIVE, params) # 創建扭曲
 
  img = img.filter(ImageFilter.EDGE_ENHANCE_MORE) # 濾鏡,邊界加強(閾值更大)
 
  return img, strs

創建urls和views

views.py:

?
1
2
3
4
5
6
7
8
9
10
# 將check_code包放在合適的位置,導入即可,我是放在utils下面
from utils import check_code
 
def create_code_img(request):
  f = BytesIO() #直接在內存開辟一點空間存放臨時生成的圖片
 
  img, code = check_code.create_validate_code() #調用check_code生成照片和驗證碼
  request.session['check_code'] = code #將驗證碼存在服務器的session中,用于校驗
  img.save(f,'PNG') #生成的圖片放置于開辟的內存中
  return HttpResponse(f.getvalue()) #將內存的數據讀取出來,并以HttpResponse返回

urls我的設置:url(r'^create_code_img/', views.create_code_img) 

前端應用驗證碼和點擊自動刷新

html:

?
1
2
3
4
5
6
7
8
<div class="row">
  <div class="col-xs-7">
    <input type="text" class="form-control" name="check_code" id="check_code" placeholder="請輸入驗證碼">
  </div>
  <div class="col-xs-5">
   <img id="check_code_img" src="/create_code_img/" onclick="refresh_check_code(this)">
{# src是url路徑,可得到驗證碼圖片,點擊時調用refresh_check_code#}
  </div><br></div>

javascript:

?
1
2
3
4
5
6
<script>
   function refresh_check_code(ths) {
      ths.src += '?';
{# src后面加問好會自動刷新驗證碼img的src#}
     }
</script>

login的Views

login的Views進行數據驗證,然后做相應的處理

?
1
2
3
4
post_check_code = request.POST.get('check_code')
session_check_code = request.session['check_code']
if post_check_code.lower() == session_check_code.lower() :
  pass

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 日本不卡一二三区 | 91精品国产综合久久婷婷香蕉 | 精品成人免费一区二区在线播放 | 国产精品久久久久久久久久久久冷 | 亚洲免费人成在线视频观看 | 国产亚洲精品久久久久久久久 | 国产黄色免费网站 | 亚洲午夜电影 | 日日夜夜狠狠干 | 国产一区二区av | 欧美在线 | 国产精品久久免费观看spa | 国内精品一区二区三区视频 | 国精品一区 | 日韩在线观看三区 | 99精品欧美一区二区蜜桃免费 | 久久久久中文字幕 | 伊人久久国产 | |级毛片 | 久操资源 | 在线日韩一区 | 一级性色 | 亚洲精品一区二区三区蜜桃久 | 91久久精品一区二区二区 | 久久先锋 | 天堂资源 | 国产综合精品一区二区三区 | 黄色午夜 | 成人在线播放 | 欧美一区二区三区在线观看视频 | 日韩欧美中文字幕在线视频 | 国产免费性 | 一区二区三区www. | 97色在线视频 | 精品成人免费一区二区在线播放 | av在线免费播 | 毛片免费在线视频 | 中文字幕日产乱码六区小草 | 日本在线视频观看 | 国产黄 | 欧美日韩国产精品一区二区 |