django-web開發使用圖片驗證碼__web

來源:互聯網
上載者:User
一、單獨封裝一個工具類用來產生圖片驗證碼
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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.