Python實(shí)現(xiàn)網(wǎng)站注冊(cè)驗(yàn)證碼生成類
本文實(shí)例為大家分享了Python網(wǎng)站注冊(cè)驗(yàn)證碼生成類的具體代碼,供大家參考,具體內(nèi)容如下
# -*- coding:utf-8 -*-
'''
Created on 2017年4月7日
@author: Water
'''
import os
import random
import string
import sys
import math
from PIL import Image,ImageDraw,ImageFont,ImageFilter
from django.conf import settings
#字體的位置,不同版本的系統(tǒng)會(huì)有不同
font_path = os.path.join('/home/workspace/aofeiKart/static', 'fonts/monaco.ttf')#settings.STATIC_ROOT, 'fonts/MONACO.TTF')
font_path = os.path.join(settings.STATIC_ROOT, 'fonts/monaco.ttf')
# print font_path
#生成幾位數(shù)的驗(yàn)證碼
number = 4
#生成驗(yàn)證碼圖片的高度和寬度
size = (100,30)
#背景顏色,默認(rèn)為白色
bgcolor = (255,255,255)
#字體顏色,默認(rèn)為藍(lán)色
fontcolor = (0,0,255)
#干擾線顏色。默認(rèn)為紅色
linecolor = (255,0,0)
#是否要加入干擾線
draw_line = True
#加入干擾線條數(shù)的上下限
line_number = (1,5)
#用來隨機(jī)生成一個(gè)字符串
# source = list(string.ascii_lowercase+'1234567890')
source = list('1234567890')
def gene_text():
# return '6666'
return ''.join(random.sample(source,number))#number是生成驗(yàn)證碼的位數(shù)
#用來繪制干擾線
def gene_line(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 = linecolor)
#生成驗(yàn)證碼
def gene_code():
width,height = size #寬和高
image = Image.new('RGBA',(width,height),bgcolor) #創(chuàng)建圖片
font = ImageFont.truetype(font_path,25) #驗(yàn)證碼的字體
draw = ImageDraw.Draw(image) #創(chuàng)建畫筆
text = gene_text() #生成字符串
font_width, font_height = font.getsize(text)
draw.text(((width - font_width) / number, (height - font_height)/number),text,
font= font,fill=fontcolor) #填充字符串
if draw_line:
gene_line(draw,width,height)
image = image.transform((width+20,height+10), Image.AFFINE, (1,-0.3,0,-0.1,1,0), Image.BILINEAR) #創(chuàng)建扭曲
image = image.filter(ImageFilter.EDGE_ENHANCE_MORE) #濾鏡,邊界加強(qiáng)
image_file = text+'.png'
image_path = os.path.join(settings.STATIC_ROOT, 'images/%s'%image_file)
image.save(image_path) #保存驗(yàn)證碼圖片
return 'http://login.chaozu.net:8000/static/images/%s'%image_file, text
if __name__ == "__main__":
print gene_code()
實(shí)現(xiàn)過程很簡單,主要注意有2點(diǎn):
1.安裝PIL庫,設(shè)置好字體保存目錄
2.如果直接返回圖片的二進(jìn)制數(shù)據(jù)流的話,如下:
buf = io.BytesIO() #io.BytesIO() #io.StringIO() use it to fill str obj image.save(buf, 'png') request.session['captcha'] = text.lower() return HttpResponse(buf.getvalue(), 'image/png') # return the image data stream as image/jpeg format, browser will treat it as an image
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Python生成隨機(jī)驗(yàn)證碼的兩種方法
- Python隨機(jī)生成一個(gè)6位的驗(yàn)證碼代碼分享
- Python 隨機(jī)生成中文驗(yàn)證碼的實(shí)例代碼
- python生成驗(yàn)證碼圖片代碼分享
- python使用pil生成圖片驗(yàn)證碼的方法
- python PIL模塊與隨機(jī)生成中文驗(yàn)證碼
- python3 pillow生成簡單驗(yàn)證碼圖片的示例
- Python random模塊(獲取隨機(jī)數(shù))常用方法和使用例子
- Python中random模塊生成隨機(jī)數(shù)詳解
- python的random模塊及加權(quán)隨機(jī)算法的python實(shí)現(xiàn)方法
- Python隨機(jī)數(shù)用法實(shí)例詳解【基于random模塊】
- Python實(shí)現(xiàn)簡單生成驗(yàn)證碼功能【基于random模塊】
相關(guān)文章
python機(jī)器基礎(chǔ)邏輯回歸與非監(jiān)督學(xué)習(xí)
這篇文章主要為大家介紹了python機(jī)器基礎(chǔ)邏輯回歸與非監(jiān)督的學(xué)習(xí)講解u,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11
Python中等待5秒并暫停執(zhí)行的方法總結(jié)
Python 具有各種功能和庫來創(chuàng)建交互式應(yīng)用程序,用戶可以在其中提供輸入和響應(yīng), 我們可以創(chuàng)建需要暫停應(yīng)用程序執(zhí)行的情況,本文主要和大家分享三個(gè)Python 中等待 5 秒并暫停執(zhí)行的方法,有需要的可以參考下2023-10-10
Python實(shí)現(xiàn)自動(dòng)添加腳本頭信息的示例代碼
這篇文章給大家介紹的一段腳本是自動(dòng)添加注釋信息的腳本,添加的信息包括腳本名稱、作者和時(shí)間等之類的,對(duì)于團(tuán)隊(duì)形成統(tǒng)一的編碼規(guī)則很有幫助。有需要的可以參考借鑒。2016-09-09
淺談python中的實(shí)例方法、類方法和靜態(tài)方法
本文主要介紹了python 實(shí)例方法、類方法和靜態(tài)方法的相關(guān)知識(shí)。具有很好的參考價(jià)值,下面跟著小編一起來看下吧2017-02-02
Python并發(fā)編程隊(duì)列與多線程最快發(fā)送http請(qǐng)求方式
假如有一個(gè)文件,里面有10萬個(gè)url,需要對(duì)每個(gè)url發(fā)送http請(qǐng)求,并打印請(qǐng)求結(jié)果的狀態(tài)碼,如何編寫代碼盡可能快的完成這些任務(wù)呢2021-09-09
Django利用AJAX技術(shù)實(shí)現(xiàn)博文實(shí)時(shí)搜索
這篇文章主要介紹了Django如何利用AJAX技術(shù)實(shí)現(xiàn)博文實(shí)時(shí)搜索,幫助大家更好的理解和學(xué)習(xí)使用Django框架,感興趣的朋友可以了解下2021-05-05
Python numpy線性代數(shù)用法實(shí)例解析
這篇文章主要介紹了Python numpy線性代數(shù)用法實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
Python列表切片操作實(shí)例探究(提取復(fù)制反轉(zhuǎn))
在Python中,列表切片是處理列表數(shù)據(jù)非常強(qiáng)大且靈活的方法,本文將全面探討Python中列表切片的多種用法,包括提取子列表、復(fù)制列表、反轉(zhuǎn)列表等操作,結(jié)合豐富的示例代碼進(jìn)行詳細(xì)講解2024-01-01

