首页 > 其他分享 >使用Django-Simple-Captcha在Django项目加入验证码模块并自定义样式

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

时间:2024-03-23 13:12:03浏览次数:20  
标签:自定义 Captcha Simple 验证码 Django captcha django

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

image

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

步骤1:安装Django-Smple-Captcha

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

pip install django-simple-captcha

步骤2:添加到Django项目

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

INSTALLED_APPS = [
    ...
    'captcha',
]

步骤3:配置URLs

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

from django.urls import path, include

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

步骤4:在表单中使用CaptchaField

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

from django import forms
from captcha.fields import CaptchaField

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

迁移数据库:

python manage.py migrate

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

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

<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Submit</button>
</form>

自定义样式

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

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

CAPTCHA_IMAGE_SIZE = (150, 50)  # 宽度为150px,高度为50px

要改变验证码的字符集:

CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.random_char_challenge'
CAPTCHA_LETTER_ROTATION = (-30,30)
CAPTCHA_NOISE_FUNCTIONS = ('captcha.helpers.noise_arcs','captcha.helpers.noise_dots',)

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

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

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

#id_captcha_1 { /* 定位验证码输入框 */
    border: 2px solid #ddd;
}

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

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

Ajax刷新

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

<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 )。

image

标签:自定义,Captcha,Simple,验证码,Django,captcha,django
From: https://www.cnblogs.com/shiyanhe/p/18088909

相关文章

  • 深度解析webpack5以及打包实践攻略,看完这篇带你玩转高级自定义打包
    1.webpack5对比webpack4做了哪些优化Webpack5对比Webpack4存在一些重要的优化。Webpack5在性能、构建速度、TreeShaking等方面都有所改进:性能改进:Webpack5在构建速度和性能方面有所提升。这主要是通过改进缓存策略、优化构建算法以及增强的持久化缓存等方式......
  • Vue开发日志:自定义组件:通用开发流程
    自定义组件:通用开发流程通用流程一组概念:key,value,labelProps:required和default同时存在的必要性让我们简单梳理一下通用流程在Vue.js中开发自定义组件的通用流程如下:定义组件模板:创建一个.vue文件,里面包含模板、样式和脚本部分。例如:<!--MyCustomCompone......
  • django《大学计算机》课程思政资源共享平台(源码+mysql+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:在当今信息化社会,教育领域正逐渐实现数字化转型,其中课程资源的共享与利用成为提高教学效率和质量的关键。特别是对于《大学计算机》这类基础且重要的课程,构......
  • django+Mybatis的医生在线诊所平台(源码+mysql+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:随着互联网技术的迅猛发展和普及,越来越多的传统行业开始向数字化转型。医疗健康领域作为与人们生活密切相关的行业,其服务模式也正逐渐从传统的面对面诊疗转......
  • djangoJAVA汽车年审管理系统(源码+mysql+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:随着汽车产业的快速发展,汽车已经成为人们日常生活中不可或缺的交通工具。然而,随着汽车数量的增加,汽车安全问题也日益凸显。为了确保道路交通安全,各国政府都......
  • 【附源码】django计算机毕业设计web的房屋租赁系统的设计与实现(源码+mysql+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:随着经济的发展和社会的进步,人们对于居住环境的需求越来越高。房屋租赁市场作为房地产市场的重要组成部分,近年来呈现出快速发展的态势。然而,传统的房屋租赁......
  • python 教你如何创建一个自定义库 colorlib.py
    目录Colorlib生成代码模块代码导入测试测试一测试二应用测试颜色列表colorList随机颜色元组randcolorTuples随机颜色字串randcolorStringsColor类测试测试一测试二题外话Colorlib有没有碰到过这样的场景:写代码时想要用上丰富的色彩,但苦思冥想搜肠刮肚只记......
  • 自定义类型--结构体、联合体、枚举类型
    **Ladiesandgentlemen**,今天,我们将来进行对自定义类型的学习!目录1.结构的特殊声明2.结构体内存对齐2.1对齐规则2.1.12.1.22.1.32.1.42.2为什么存在内存对齐?1.平台原因(移植原因):2.性能原因:2.3修改默认对齐数3.结构体传参4.结构体实现位段4.1什么......
  • uni-app/小程序自定义导航栏下拉刷新loading图标看不到问题解决
    实际效果图 我们在page.json中开启了自定义导航栏属性和下拉刷新属性后//开启下拉刷新"enablePullDownRefresh":true//自定义导航栏"navigationStyle":"custom"此时,页面中的下拉刷新三个小圆点会被我们的导航栏遮盖住,导致用户下拉刷新看不到loading效果,如下图:......
  • ROS2自定义msg
    在ROS2中,您可以通过编写自己的自定义消息来扩展消息类型。以下是如何创建自定义消息的一般步骤:1.**创建消息文件夹**:在功能包下创建msg的文件夹2.**编写消息文件**:在`msg`文件夹内创建一个`xxx.msg`文件,命名为所需的消息类型,例如`MyCustomMsg.msg`。3.**定义消息结构**:在消......