Django自带图形验证码 django-simple-captcha

简介: Django自带图形验证码 django-simple-captcha

 

一、安装captcha

pip install django-simple-captcha


二、注册captcha


在 settings.py 的 INATALLED_APPS 中注册captcha。

I

NSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'login',
    'captcha',
]


执行migrate命令,生成captcha数据库表,保存验证码。

python manage.py migrate


三、添加路由


在根目录的urls.py文件中添加captcha对应的url:

from django.contrib import admin
from django.urls import path
from django.urls import include
from login import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('captcha/', include('captcha.urls'))   # 增加这一行
    path('captcha/refresh/', include('captcha.urls'))   # 点击验证码,使用ajax刷新
]


四、修改forms.py文件

from django import forms
from captcha.fields import CaptchaField

class UserForm(forms.Form):
    username = forms.CharField(label="用户名", max_length=128, widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': "Username",'autofocus': ''}))
    password = forms.CharField(label="密码", max_length=256, widget=forms.PasswordInput(attrs={'class': 'form-control',  'placeholder': "Password"}))
    captcha = CaptchaField(label='验证码')


五、修改login.html


添加{{ form.captcha }}和ajax刷新验证码功能。

{% load static %}
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
    <title>登录</title>
    <link rel="stylesheet" type="text/css" href="https://cdn.staticfile.org/semantic-ui/2.4.1/semantic.min.css">
    <link rel="stylesheet" type="text/css" href="{% static 'css/semantic.custom.css' %}">
    <link rel="stylesheet" type="text/css" href="{% static 'css/style.css' %}">
    <script src="/static/js/md5.js"></script>
    <script src="/static/js/sha1.js"></script>
    <script src="/static/js/funcbase64.js"></script>
    <script src="/static/js/aes.js"></script>
    
</head>
<body id="v-account-body">
<div class="ui middle aligned center aligned grid">
    <div class="column v-account">
        <img src="{% static 'img/registerLogo.png' %}" class="image">
        <h2 class="ui teal image header">
        
        </h2>
        <form class="ui large form" novalidate method="post" action="{% url 'users:login' %}"
              enctype="multipart/form-data" onsubmit='return checkForm()'>
            {% csrf_token %}
            <div class="ui stacked segment">
                <div class="field">
                    <div class="ui left icon input">
                        <i class="user icon"></i>
                        {{form.username}}
                    </div>
                </div>
                <div class="field">
                    <div class="ui left icon input">
                        <i class="lock icon"></i>
                        {{form.password}}
                    </div>
                </div>
                <div class="field">
                
                    <div class="ui left icon input">
                        <i class="shield icon"></i>
                        {{form.captcha}}
                    </div>
                </div>
                <input type="hidden" name="next" value="{{ next }}"/>
                <button class="ui fluid large teal submit button" type="submit">登录</button>
            </div>
            
            {% include "base/form_errors.html" %}
            
        </form>
        
        <div class="ui message">
                还没有账号?<a href="{% url 'users:signup' %}">注册</a>
        </div>
    </div>
</div>
<script src="/static/js/jquery-1.11.3.min.js"></script>
<script src="/static/bootstrap-4.3.1-dist/js/bootstrap.min.js"></script>
<script type="text/javascript">

//验证码动态刷新实现
$('.captcha').click(function () {
    $.getJSON("/captcha/refresh/", function (result) {
        $('.captcha').attr('src', result['image_url']);
        $('#id_captcha_0').val(result['key'])
    });
});

</script>
</body>

</html>


注意在写动态刷新验证码之前,需要先引入jquery-1.11.3.min.js 和 bootstrap.min.js

 

这样写完之后会出现 验证码在左边,输入框在右边,不符合正常审美,So:


在settings.py中添加下面一句:

# 验证码样式
CAPTCHA_OUTPUT_FORMAT = u'%(text_field)s %(hidden_field)s %(image)s'



目录
相关文章
|
2月前
|
存储 监控 开发工具
Django 后端架构开发:手机与邮箱验证码接入、腾讯云短信SDK和网易邮箱
Django 后端架构开发:手机与邮箱验证码接入、腾讯云短信SDK和网易邮箱
50 0
|
4月前
|
存储 JavaScript 前端开发
Python Django下的实现注册验证码
摘要: 使用Python生成随机验证码图像,包括干扰线和噪点,保存到静态文件夹,并将验证码文本存储到数据库。数据库表包含ID、验证码图片路径和验证码文本。JavaScript函数`getRandomInt`生成1到300的随机数,用于请求对应数据库条目的验证码和图片。XMLHttpRequest发送POST请求到服务器,视图函数返回指定ID的验证码图片路径,实现验证码的动态刷新。
|
4月前
|
前端开发 Python
五. Django项目之电商购物商城 -- 短信验证码生成
五. Django项目之电商购物商城 -- 短信验证码生成
|
4月前
|
前端开发 JavaScript 数据库
四. Django项目之电商购物商城 -- 图片验证码生成
四. Django项目之电商购物商城 -- 图片验证码生成
|
5月前
|
存储 前端开发 JavaScript
Django教程第4章 | Web开发实战-三种验证码实现
手动生成验证码,自动生成验证码,滑动验证码。【2月更文挑战第24天】
87 0
Django教程第4章 | Web开发实战-三种验证码实现
|
11月前
|
Ubuntu Python
23 Django模板 - 验证码案例
23 Django模板 - 验证码案例
60 0
|
Ubuntu Python
Django 验证码4.4
Django 验证码4.4
129 0
Django 验证码4.4
|
机器人 数据库 Python
Django 学习:为窗体加上防机器人的验证机制(验证码功能)
  这里我们使用 django-simple-captcha 模块,官方介绍如下:https://github.com/mbi/django-simple-captcha 一键安装: pip install django-simple-captcha   在 setting.
1532 0
|
Python 数据安全/隐私保护