仅需三步,为Django admin增加登录验证码功能

boyanx3个月前技术教程15

首先,需要安装一个验证码的第三方库-django-simple-captcha,这是一个极其简单但可高度定制的 Django 第三方应用程序,用于将验证码图像添加到任何 Django 表单。

安装django-simple-captcha

  1. 通过pip安装django-simple-captcha
 pip install django-simple-captcha
  1. 添加captcha到settings.py的INSTALLED_APPS中
 INSTALLED_APPS = [
     ...
     'captcha'
 ]
  1. 生成数据,命令行运行python manage.py migrate
  2. 添加url到项目的urls.py文件中
 urlpatterns = [
     path('captcha/', include('captcha.urls')),
 ]

创建一个dadmin的APP

  • 创建一个dadmin的APP,并将其添加到settings.pyINSTALLED_APPS
 python manage.py startapp dadmin
  • dadmin中创建一个forms.py的文件,我们继承django自带的登录表单AuthenticationForm,并对其进行扩展!
 # dadmin/forms.py
 
 from django.contrib.auth.forms import AuthenticationForm
 from captcha.fields import CaptchaField
 
 class DadminAuthenticationForm(AuthenticationForm):
     captcha = CaptchaField()
  • 在dadmin的同级创建一个templates的文件夹,并在其内部创建一个dadmin的文件夹,将django默认的登录模板中的代码全部拷贝过来,并在密码框下添加验证码的输入框!
 <div class="form-row">
     {{ form.captcha.errors }}
     {{ form.captcha.label_tag }} {{ form.captcha }}
     <input type="hidden" name="next" value="{{ next }}">
   </div>
  • 在dadmin中的admin.py中添加如下代码,这里我们子类化了AdminSite类,这样我们就可以随意修改和覆盖django 默认admin的任何模板,并且不会影响默认admin的任何东西,还可以继承admin的所有功能及模板!
 from django.contrib import admin
 
 # Register your models here.
 from .forms import DadminAuthenticationForm
 
 
 class DadminSite(admin.AdminSite):
     login_form = DadminAuthenticationForm
     login_template = "dadmin/login.html"
 
 admin_site = DadminSite(name='dadmin')
 

在项目的urls.py中注册刚才子类化的站点地址

 from dadmin.admin import admin_site
 
 urlpatterns = [
     path('admin/', admin.site.urls),
     path('myadmin/', admin_site.urls),
     path('captcha/', include('captcha.urls')),
 ]

终端启动站点

 python3 manage.py runserver

浏览器打开站点可以看到验证码已经添加成功了,但似乎样式不美观,这个就留给大家自己去研究吧,给个思路可以拷贝captcha默认的验证码模板,样式重写即可!

实现点击更换验证码功能

将如下代码加入到login.html模板的底部即可,别忘了引入Jquery.js哦!

<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script>
   <script>
     $('img.captcha').attr("title", "点击更换验证码");
     $('img.captcha').click(function() {
         $.getJSON('/captcha/refresh/',function(json) {
             // This should update your captcha image src and captcha hidden input
             console.log(json);
             $("img.captcha").attr("src",json.image_url);
             $("#id_captcha_0").val(json.key);
         });
         return false;
     });
   </script>

到此大功告成,很简单的验证码功能就完成了!

如果你也在自学Python或Django,那就请关注我吧,会不断更新关于django及python的技术干货,以及小案例!

下篇预告:django实现前后端分离登录功能,并加入验证码功能!

相关文章

前端框架 Vue 不要一开始就用脚手架~Axios 中的GET、POST请求

作为后端攻城狮,写前端代码是一种什么体验?相信不少人和 @Python大星 一样,有写过前端代码的经历。记录一下,Vue 框架开发中“啼笑皆非”的故事,非专业前端人员,该案例无 css 美化,引起不适...

基于野狗实时数据库搭建网页弹幕(下)

我们已经了解了野狗数据库的基本的数据操作,接下来我们来了解下我们另一个组Jquery.barrager.js!Jquery.barrager.js 是一款优雅的网页弹幕插件,支持显示图片,文字以及超链...

jQuery入门看这一篇就够了!超详细!(二)

“这里是云端源想IT,帮你轻松学IT”嗨~ 今天的你过得还好吗?先变成自己喜欢的模样,再去遇见无需取悦的人。- 2023.06.12 -上期给大家讲解了jQuery的基础概念和核心函数中选择器的使用,...

编程技巧:Jquery实时验证,小数位补0,指定长度的「正小数」

在只能输入【正小数】的输入框获取到焦点时,移除千位分隔符,在输入数据时,实时校验输入内容是否正确,失去焦点后,添加千位分隔符格式化数字。同时小数位未满时末尾补0。HTML代码<input typ...

Katalon 所有关键字及其含义

以下为katalon所有关键字及其含义,具体可参考官方文档:序号关键字含义1Accept Alert接受当前弹窗(如确认对话框)。2Authenticate处理 HTTP 基础认证(输入用户名和密码)...

教你把百度的关键字搜索偷过来用用。

话不多说,先上效果图。怎么样,是不是和在用百度一下时,关键字搜索补全一样一样的。今天下午没什么事,打开百度首页的Newwork看了一下,发现我每次输入内容后,它都会把我们输入的内容发送到后台,后台返回...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。