django-simple-captcha
是一个非常简单,但高度可定制的Django framework,可以向任何Django表单添加验证码图像
pip3 install django-simple-captcha
在settings.py
中添加如下配置:
INSTALLED_APPS = [
...
'captcha',
...
]
运行如下命令,生成验证码表:
python manage.py migrate
验证码表结构如下:
字段 | 类型 | 描述 |
---|---|---|
id | int | 自增ID |
hashkey | str | 哈希键 |
challenge | str | 验证码内容 |
response | str | 验证码结果 |
expiration | datetime | 过期时间 |
视图代码如下:
from captcha.views import CaptchaStore, captcha_image
from rest_framework.views import APIView
class CaptchaApiView(APIView):
def get(self, request):
hashkey = CaptchaStore.generate_key() # 生成验证码记录,往验证码表中插入一条记录
img = captcha_image(request, hashkey) # 生成image response
return img
CAPTCHA_FONT_PATH
用于呈现文本的字体文件的完整路径,文件可以是.TTF
、.OTF
格式。默认是fonts/Vera.ttf
CAPTCHA_FONT_SIZE
字体的像素大小,默认为22
CAPTCHA_IMAGE_SIZE
以生成的验证码像素为单位的图像大小,指定为元组(宽度,高度)。默认为None
CAPTCHA_LITTER_ROTATION
在此区间内的随机旋转文本中的字符。默认为(-35, 35)
CAPTCHA_BACKGROUND_COLOR
验证码背景颜色,可以表示为html风格的#rrggbb
, rgb(red,green,blue)
,又或者常见的html名字,例如red
。默认为#ffffff
CAPTCHA_FOREGROUND_COLOR
验证码前景色,默认为#001100
CAPTCHA_CHALLENGE_FUNCT
用于显示验证码内容与结果的可调用对象。例如:
def custom_challenge():
return "1 + 2", "3" # 验证码内容为1 + 2, 结果为3
CAPTCHA_CHALLENGE_FUNCT = "xxx.xxx.custom_challenge"
默认是captcha.helpers.random_char_challenge
。系统自带的有:
captcha.helpers.random_char_challenge
: 字母验证码captcha.helpers.math_challenge
: 加减乘除验证码captcha.helpers.unicode_challenge
: unicode验证码captcha.helpers.word_challenge
: 从CAPTCHA_WORDS_DICTIONARY
中指定的文件中读取,并随机某一行为验证码内容captcha.helpers.huge_words_and_punctuation_challenge
: 从CAPTCHA_WORDS_DICTIONARY
中指定的文件中读取, 并随机某一行为验证码内容,每行的内容使用""_"',.;:-""
相关标点符号进行隔开CAPTCHA_MATH_CHALLENGE_OPERATOR
在使用math_challenge
时,允许您选择乘法运算符。例如采用"x"代替。默认为*
CAPTCHA_NOISE_FUNCTIONS
用于绘制噪点噪线的方法列表。默认为('captcha.helpers.noise_arcs','captcha.helpers.noise_dots',)
,无噪点噪线可以设置为captcha.helpers.noise_null
CAPTCHA_FILTER_FUNCTIONS
图像过滤器。可调用对象的字符串列表,以PIL Image对象作为参数输入,修改并返回它。例如:
from PIL import ImageFilter
def custom_filter(image):
return image.filter(ImageFilter.SHARPEN)
CAPTCHA_FILTER_FUNCTIONS = ("xxx.xxx.custom_filter", )
默认为:('captcha.helpers.post_smooth',)
CAPTCHA_WORDS_DICTIONARY
包含单词列表的文件目录。只有当CAPTCHA_CHALLENGE_FUNCT
设置为captcha.helpers.word_challenge
或captcha.helpers.huge_words_and_punctuation_challenge
时需要。默认为/usr/share/dict/words
CAPTCHA_FLITE_PATH
音频读取器所在目录。定义时,将自动读取验证码。默认为None
CAPTCHA_TIMEOUT
验证码的有效期,单位为分钟。默认为5
CAPTCHA_LENGTH
用于设置生成的验证码的长度,只有当CAPTCHA_CHALLENGE_FUNCT
设置为captcha.helpers.random_char_challenge
时需要。默认为4
CAPTCHA_DICTIONARY_MIN_LENGTH
控制从CAPTCHA_WORDS_DICTIONARY
目录中随机抽取的单词的最小长度,只有当设置为captcha.helpers.word_challenge
或captcha.helpers.huge_words_and_punctuation_challenge
时需要。默认为0
CAPTCHA_DICTIONARY_MAX_LENGTH
控制从CAPTCHA_WORDS_DICTIONARY
目录中随机抽取的单词的最大长度,只有当设置为captcha.helpers.word_challenge
或captcha.helpers.huge_words_and_punctuation_challenge
时需要。默认为99
CAPTCHA_TEST_MODE
当设置为True时,字符串PASSED
在任何情况下将被接受为对任何验证码的有效响应。用于测试目的。默认为False
更多关于django-simple-captcha
的操作,请看https://django-simple-captcha.readthedocs.io/en/latest/usage.html