Django验证码的使用

Django的功能非常强大,源码中已经有登陆,退出,重设密码等相关的视图函数,在下面这个 app 中

django.contrib.auth

 但毕竟功能少了点,因此我使用了django-users2和django-simple-captcha,这两个都可以通过pip来下载

django-users2相当于django.contrib.auth的改进版,django-simple-captcha是一个Django的验证码包,十分好用

为了方便修改,我将django-users2的users文件夹直接复制到项目目录下,当作app使用

 

从这张图我们可以看到,django-users2从Django那里继承了关于登录、注销、密码修改和重置等方面的模块,自己也写了注册、激活等方面的内容,

下面我简单说一下加入验证码的功能。

1、使用django-simple-captcha

  django-simple-captcha是django的验证码包,非常简单实用,配合django-users2甚至只需要两行代码就能实现验证码功能,使用方法如下;

  

  (1)安装 

pip install django-simple-captcha 

  

  (2)将captcha 加入 settings.py 的 INSTALLED_APPS

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

  

  (3)运行

python manager.py migrations 
python manage.py migrate

  

  (4)url路由加入urls.py的urlpatterns

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^captcha/', include('captcha.urls')),
]

  (5)在forms.py中引入,以注册模块为例:

 

  

2、注册模块还好说,毕竟只需要在users文件夹下添加就可以了,但登录模块就不一样了,login模块的forms.py文件在django.contrib.auth文件夹里,总不能跑到Django里面再把他修改了吧,当然这种方法是可行的,但缺点是只能在自己的电脑里运行才可以。因能力有限,我想了个笨法子。

 

 

从这张图以及第一张图可以看出,登录是调用的Django自己的login模块,但是把template_name给覆写了,因此我就想把login的form也给覆写了,所以我找到 login 的源码

 

 

可以看出 login 的表单继承的是 AuthenticationForm, 因此我把 AuthenticationForm类 以及相关的类复制到users文件夹的forms.py文件里,加入验证码代码,然后进行覆写,结果就是这样

 

 

 

现在就说这么多吧,如果发现更好的方法,在以后的文章里应该会提到,再见!!!!!

 

posted on 2018-03-17 01:48  Alex-zs  阅读(303)  评论(0编辑  收藏  举报

导航