django-simple-captcha的使用

罗奇文
2023-12-01

django-simple-captcha是一个非常简单,但高度可定制的Django framework,可以向任何Django表单添加验证码图像

安装

pip3 install django-simple-captcha

快速开始

settings.py中添加如下配置:

INSTALLED_APPS = [
    ...
    'captcha',
    ...
]

运行如下命令,生成验证码表:

python manage.py migrate

验证码表结构如下:

字段类型描述
idint自增ID
hashkeystr哈希键
challengestr验证码内容
responsestr验证码结果
expirationdatetime过期时间

视图代码如下:

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_challengecaptcha.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_challengecaptcha.helpers.huge_words_and_punctuation_challenge时需要。默认为0

CAPTCHA_DICTIONARY_MAX_LENGTH

控制从CAPTCHA_WORDS_DICTIONARY目录中随机抽取的单词的最大长度,只有当设置为captcha.helpers.word_challengecaptcha.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

 类似资料: