一、單獨封裝一個工具類用來產生圖片驗證碼
import random # 隨機數import string # 字元的# 引入繪圖的包from PIL import Image,ImageDraw,ImageFont,ImageFile# 引入緩衝的包from django.core.cache import cache# 定義驗證碼的類class Captcha(object): # 選用的字型的路徑 font_path = 'verdana.ttf' # 產生幾位元的驗證碼 number = 4 # 產生驗證碼圖片的寬度與高度 size = (100,30) # 背景顏色,預設是白色 bgcolor = (255,255,255) # 字型顏色,預設為藍色 fontcolor = (random.randint(0, 100), random.randint(0, 100), random.randint(0, 100)) # 驗證碼字型大小 fontsize = 25 # 幹擾線的顏色,預設是紅色 linecolor = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)) # 是否要加入幹擾線 draw_line = True # 是否繪製幹擾點 draw_point = True # 加入幹擾線的條數 line_number = 2 # 定義一個類方法 # 用來隨機產生一個字串(包括英文和數字) @classmethod def __gene_text(cls): source = list(string.letters) for index in range(0,10): source.append(str(index)) # 隨機擷取幾位元字拼接 return ''.join(random.sample(source,cls.number)) # 定義一個類方法繪製幹擾線 @classmethod def __gene_line(cls,draw,width,height): # 開始位置 begin = (random.randint(0,width),random.randint(0,height)) # 結束位置 end = (random.randint(0,width),random.randint(0,height)) draw.line([begin, end], fill=cls.linecolor) # 定義一個類方法繪製幹擾點 @classmethod def __gene_points(cls,draw,point_chance,width,height): chance = min(100, max(0, int(point_chance))) # 大小限制在[0, 100] for w in xrange(width): for h in xrange(height): tmp = random.randint(0, 100) if tmp > 100 - chance: draw.point((w, h), fill=(0, 0, 0)) # 產生驗證碼 @classmethod def gene_code(cls): width, height = cls.size # 寬和高 image = Image.new('RGBA', (width, height), cls.bgcolor) # 建立圖片 font = ImageFont.truetype(cls.font_path, cls.fontsize) # 驗證碼的字型 draw = ImageDraw.Draw(image) # 建立畫筆 text = cls.__gene_text() # 產生字串 font_width, font_height = font.getsize(text) draw.text(((width - font_width) / 2, (height - font_height) / 2), text, font=font, fill=cls.fontcolor) # 填充字串 # 如果需要繪製幹擾線 if cls.draw_line: # 遍曆line_number次,就是畫line_number根線條 for x in xrange(0, cls.line_number): cls.__gene_line(draw, width, height) # 如果需要繪製噪點 if cls.draw_point: cls.__gene_points(draw, 10, width, height) # 儲存到緩衝中,到期時間為2分鐘 cache.set(text.lower(), text.lower(), 120) return (text, image) # 驗證驗證碼 @classmethod def check_captcha(cls, captcha): captcha_cache = cache.get(captcha) if captcha_cache and captcha_cache == captcha: # 刪除緩衝 cache.delete(captcha) return True else: return False二、在settings.py中配置使用的緩衝
# 配置本機快取CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': [ '127.0.0.1:11211', ] }}三、開啟本地的memcached緩衝
1、如果沒安裝的
memcached -d install
2、啟動
memcached -d start