6、用户注册功能的设计

准备工作:

在开发设计用户注册功能前,先了解另一款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名称必须要和图一中验证类中的变量名称保持一致

登录验证功能:

6、用户注册功能的设计_第1张图片

然后在html文件中,配置错误信息的提示:

箭头处为,用户提交数据的保留,避免用户每次都要重新输入

 

你可能感兴趣的:(python实战)