在开发设计用户注册功能前,先了解另一款Django的开发库,专门用于做Django验证码的:
Django - simple - captcha(图形验证码)
地址:http://django-simple-captcha.readthedocs.io/en/latest/usage.html
建议安装0.4.6版本
安装过程参考上述网址。。。
安装完成后migration,生成数据表
安装完成;
定义form.py文件的字段验证类:
# -*- coding: utf-8 -*-
__author__ = 'oldlee'
__date__ = '2019-04-19 15:03'
from django import forms
#导入captcha类
from captcha.fields import CaptchaField
# 设计注册表单验证类
class RegisterForm(forms.Form):
# email字段为必填
email = forms.EmailField(required=True)
# 密码字段为必填,且约定长度
password = forms.CharField(required=True,min_length=5)
# 实例化captcha,并指定错误信息
captcha = CaptchaField(error_messages={'invalid':u'验证码错误'})
在view.py文件中定义注册表单验证类:
并对用户提交的数据进行数据库表填充,保存
# 导入对密码加密的类库
from django.contrib.auth.hashers import make_password
#导入RegisterForm来对用户输入的字段做验证
from .forms import LoginForm,RegisterForm
class RegisterView(View):
def get(self,request):
#实例化RegisterForm类
register_form = RegisterForm()
#对register.html页面返回register_form
return render(request,'register.html',{'register_form':register_form})
def post(self,request):
register_form = RegisterForm(request.POST)
# 判断用户post的数据的合法性,判断条件是form.py文件的RegisterForm类里定义的
if register_form.is_valid():
email = request.POST.get('email','')
password = request.POST.get('password','')
# 实例化model里的用户表类
userprofile = UserProfile()
# 并将上面post到的用户提交的数据进行向表字段填充
userprofile.username = email
userprofile.email = email
# 对用户输入的密码加密,调用django的hashers的make_password进行加密操作(需导入)
userprofile.password = make_password(password)
# 最后保存
userprofile.save()
return render(request,'index.html',{'register_form':register_form})
最后在html文件中调用
{# 使用register_form来获取captcha#}
{{ register_form.captcha }}
这里需要注意,html文件中的字段的name名称必须要和图一中验证类中的变量名称保持一致
然后在html文件中,配置错误信息的提示:
箭头处为,用户提交数据的保留,避免用户每次都要重新输入