前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Django-Simple-Captcha在Django项目加入验证码模块并自定义样式

使用Django-Simple-Captcha在Django项目加入验证码模块并自定义样式

作者头像
实验盒
发布2024-03-25 12:19:01
1580
发布2024-03-25 12:19:01
举报
文章被收录于专栏:实验盒实验盒

在 Django 项目中加入验证码功能,通常需要借助第三方库,比如 Django-Smple-CaptchDjango-reCAPTCHADEF-reCAPTCHAWagtail-Django-ReCaptchaDjango-Friendly-Captcha等。

其中,Django-Smple-Captcha 是一个流行的选择,它提供了一个简单而强大的Django应用,无需调用第三方 API,可直接生成图像验证码。以传统的 MVC 架构为例,以下是如何在你的 Django 项目中集成Django-Smple-Captcha 并自定义样式的步骤。

步骤1:安装Django-Smple-Captcha

首先,你需要通过pip安装Django-Smple-Captcha。在你的终端中运行:

代码语言:javascript
复制
pip install django-simple-captcha

步骤2:添加到Django项目

在你的settings.py文件的INSTALLED_APPS中添加'captcha'

代码语言:javascript
复制
INSTALLED_APPS = [
    ...
    'captcha',
]

步骤3:配置URLs

在你的项目的urls.py文件中包含captcha.urls。这允许django-simple-captcha处理生成和验证验证码的请求。

代码语言:javascript
复制
from django.urls import path, include

urlpatterns = [
    ...
    path('captcha/', include('captcha.urls')),
]

步骤4:在表单中使用CaptchaField

在需要验证码的表单中,导入并使用 CaptchaField

代码语言:javascript
复制
from django import forms
from captcha.fields import CaptchaField

class MyForm(forms.Form):
    # 你的其他表单字段
    captcha = CaptchaField()

迁移数据库:

代码语言:javascript
复制
python manage.py migrate

步骤5:在模板中渲染表单

确保在你的表单模板中包含了验证码字段。django-simple-captcha将自动渲染图像验证码以及一个输入框供用户输入验证码。

代码语言:javascript
复制
<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Submit</button>
</form>

自定义样式

要自定义验证码的样式,你可以通过CSS进行一些基本的样式设置,如调整验证码图像和输入框的位置。django-simple-captcha也提供了一些设置来调整验证码的外观,如图像大小、字符集和噪声等级等。这些设置可以在你的settings.py文件中进行配置。

例如,要更改验证码图像的大小,你可以添加以下设置:

代码语言:javascript
复制
CAPTCHA_IMAGE_SIZE = (150, 50)  # 宽度为150px,高度为50px

要改变验证码的字符集:

代码语言:javascript
复制
CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.random_char_challenge'
CAPTCHA_LETTER_ROTATION = (-30,30)
CAPTCHA_NOISE_FUNCTIONS = ('captcha.helpers.noise_arcs','captcha.helpers.noise_dots',)

注意,部分配置在较新版本中已经不再使用了,比如:

代码语言:javascript
复制
# 旧版本可以这样配置输入框、验证码图片、隐藏域的输出格式,但现在不再支持
CAPTCHA_OUTPUT_FORMAT = '%(text_field)s %(image)s %(hidden_field)s'

对于 CSS 样式的自定义,你可以直接在你的CSS文件中针对验证码相关的HTML元素进行样式设计。例如:

代码语言:javascript
复制
#id_captcha_1 { /* 定位验证码输入框 */
    border: 2px solid #ddd;
}

.captcha { /* 定位验证码图像 */
    margin-bottom: 10px;
}

请注意,具体的CSS选择器(例如 #id_captcha_1)可能需要根据你的实际表单字段ID进行调整。通过结合 django-simple-captcha 提供的设置和CSS样式调整,你可以在保持功能完整的同时,根据你的网站设计需求自定义验证码的外观。

Ajax刷新

模板中加入以下内容,即可实现点击验证码图片 Ajax 刷新验证码:

代码语言:javascript
复制
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script>
    $(function () {
        $('.captcha').css({
            'cursor': 'pointer'
        });
        $('.captcha').click(function () {
            console.log('click');
            $.get("/app/refresh/",
                function (result) {
                    $('.captcha').attr('str', result['image_url']);
                    $('#id_captcha_0').val(result['key'])
                });
        });
    })
</script>

参考

较新版本的 Django-Simple-Captcha 需要通过 Django 内置表单渲染来实现更多自定义样式内容,具体可以参考 Django-Simple-Captcha 文档( https://django-simple-captcha.readthedocs.io/en/latest/index.html )。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-03-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 实验盒 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 步骤1:安装Django-Smple-Captcha
  • 步骤2:添加到Django项目
  • 步骤3:配置URLs
  • 步骤4:在表单中使用CaptchaField
  • 步骤5:在模板中渲染表单
    • 自定义样式
      • Ajax刷新
      • 参考
      相关产品与服务
      验证码
      腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档