Django captcha验证码应用【亲测可用】

1、安装插件

(国内镜像地址)pip3 install pillow -i Simple Index

或 pip install pillo

(国内镜像地址)pip3 install django-simple-captcha==0.5.15 -i Simple Index

或 pip install django-simple-captcha

2、在settings里的apps里加入'captcha'

3、生成迁移文件:python3 manage.py makemigrations

4、迁移文件生成表:python3 manage.py migrate

5、在主路由里增加:path('captcha/', include('captcha.urls')),

6、在settings里最底下加入如下代码

#字母验证码

CAPTCHA_IMAGE_SIZE = (80, 30) # 设置 captcha 图片大小

CAPTCHA_LENGTH = 4 # 字符个数

CAPTCHA_TIMEOUT = 1 # 超时(minutes)

#加减乘除验证码

# CAPTCHA_OUTPUT_FORMAT = '%(image)s %(text_field)s %(hidden_field)s '

# CAPTCHA_NOISE_FUNCTIONS = ('captcha.helpers.noise_null',

# 'captcha.helpers.noise_arcs', # 线

# 'captcha.helpers.noise_dots', # 点

# )

# CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.random_char_challenge'

# CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.math_challenge'

# CAPTCHA_TIMEOUT = 1

7、View.py里代码如下

class LoginForm(forms.Form):

	'''
    属性:
    CharField:
    max_length:该字段值的最大长度;
	min-length:该字段值的最小长度;
	required:这个字段是否为必须的,默认为必须的;
	error_messages:某个条件验证失败时,给出的错误信息
	EmailField:
	error_messages的键:required、invaild
	FloatField:
	max_value:指定最大值
	min_value:指定最小值
	IntegerField:
	max_value:指定最大值
	min_value:指定最小值
	error_messages的键:required、invalid、max_value、min_value
	DateField
	接收年月日
	URLField
	error_messages的键:required、invalid
	常用验证器:
	MaxValueValidator:验证最大值
    MinValueValidator:验证最小值
    MinLengthValidator:验证最小长度
    MaxLengthValidator:验证最大长度
    EmailValidator:验证是否为邮箱格式
    URLValidator:验证是否为URL格式
    RegexValidator:验证是否匹配所指定的正则表达式,用来实现更复杂的验证
	举个例子:
	URLField = forms.CharFiedld(validators=[validators.URLValidator(message="请输入格式正确的地址")]
	'''

    
    s_name = forms.CharField(min_length=2, label="用户账号", help_text="请输入用户账号" , error_messages={"required":"用户账号不能为空", "min_length":"用户账号长度不能小于2位"})
    s_pass = forms.CharField(min_length=4, label="用户密码", help_text="请输入用户密码" , error_messages={"required":"用户密码不能为空", "min_length":"用户密码长度不能小于4位"}, widget=forms.PasswordInput)
    captcha = CaptchaField(label="验证码", help_text="按右侧验证码图片进行填写" , error_messages={"required":"验证码不能为空"})
    
    class Meta:
        model = models.SceneUser_Manager
        fields = ["s_name", "s_pass", "captcha"]
    # 批量增加文本框或组件样式
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        for s_name, field in self.fields.items():
            field.widget.attrs = {"class":"form-control ,width", "placeholder": field.help_text}

def user_login(request):
    if request.method == "GET":
        form = LoginForm()
        return render(request, 'login.html', {"form": form})
    elif request.method == "POST":
        form = LoginForm(request.POST)
        if form.is_valid():
            _captcha = request.POST.get("captcha", None)
            _captcha_check = request.POST.get("hashkey", None)
            if _captcha, _captcha_check:
                print("Login ok")
            else:
                return render(request, 'login.html', {"form": form})

8、login.html里的代码如下

<div class="mb-3 col-sm-6">
    <label for="checknumber" class="form-label"><span class="bi bi-patch-check"></span> {{ form.captcha.field.label }}</label>
    {{ form.captcha }}
    <span style="color: red;">{{ form.captcha.errors.0 }}</span>
</div>


<script src="{% static 'js/jquery-3.6.1.min.js' %}"></script>
<script>
    $('.captcha').click(function () {
        $.getJSON("/captcha/refresh/", function (result) {
            $('.captcha').attr('src', result['image_url']);
            $('#id_captcha_0').val(result['key'])
        });
    });
</script>

9、效果

10、以下是配置属性可以在setting.py当中进行全局配置,也可以在单个模块里进行局部配置

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:用于显示验证码内容与结果的可调用对象。

CAPTCHA_MATH_CHALLENGE_OPERATOR:在使用math_challenge时,允许您选择乘法运算符。例如采用"x"代替。默认为*

CAPTCHA_NOISE_FUNCTIONS:图像过滤器。可调用对象的字符串列表,以PIL Image对象作为参数输入,修改并返回它。

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

11、最新版的django-simple-captcha不是CaptchaField(),而是CaptchaFieldClass()

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值