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文件里,加入验证码代码,然后进行覆写,结果就是这样
现在就说这么多吧,如果发现更好的方法,在以后的文章里应该会提到,再见!!!!!