验证码的实现
在django中有一个专门实现验证码的扩展包---django-simple-captcha
1.安装:
pip install django-simple-captcha
2.配置:
在MXOnline/settings.py中注册该组件
3.在总urls.py下定义图片验证码的路由:
#图片验证码
url(r'^captcha/$',include('captcha.urls')),
也就是已经安装好的captcha中:
4.将该组件在mysql数据库中生成表(数据迁移)
python manage.py makemigrations
python manage.py migrate
数据库:
5.使用
在使用这个包时,要与form表单配合使用,因为当用户进行注册时,就需要图片验证码的显示,那么我们可以将它看作一个类似于email和password的一个字段来看。
在users/forms.py:
#注册表单验证
class UserRegisterForm(forms.Form):
#email
email = forms.EmailField(required=True)
#密码
password = forms.CharField(required=True,min_length=6,max_length=16,error_messages={
'required':'密码必须填写',
'min_length':'密码不少于6位',
'max_length':'密码不能超过16位'
})
# 验证码
captcha = CaptchaField()
添加验证码字段captcha
然后由于无论是get还是post请求,都需要刷新验证码,所以在这两个方法中都要获取表单实例,并返回到前端页面。
在users/views.py中
#get方式返回register.html
def get(self, request, *args, **kwargs):
#第一次请求时,也要访问验证码,只是显示验证码
user_register_form = UserRegisterForm()
return render(request,'register.html',{
'user_register_form':user_register_form
})
#post方式处理提交的数据
def post(self,request, *args, **kwargs):
# 实例化表单,注意参数request.POST
user_register_form = UserRegisterForm(request.POST)
....
....
在前端页面中展示验证码图片,找到验证码的form表单中的标签:
<div class="form-group marb20 blur" id="jsRefreshCode">
{{ user_register_form.captcha }}
</div>
完成。
运行:
输入正确的信息:
直接登录,并跳转到index页面。
输入错误信息时,会弹出相应的错误信息的提示
优化登录
那么在login中加入验证码登录是一样的步骤
在form表单中加入字段:
#验证码
captcha = CaptchaField()
在LoginView的get和post方法中都实例化表单并返回:
get:
login_form = LoginForm() #获取表单实例,为了展示验证码
post:
login_form = LoginForm(request.POST)
在前端由于css样式的问题,直接将register.html中的注册form复制到login.html中相应位置。
修改一些参数:
- active地址:login
- input标签中的name属性与后端获取的一致
- 验证码展示的表单对象为login_form.captcha
运行:
输入正确的信息:
登录成功
输入验证码错误时,不报错,我也不知道为啥
网友评论