Esempio n. 1
0
    def post(self, request):
        """
        对注册页面发送过来的form表单数据进行处理
        :return:
        """
        # 获取post请求参数
        username = request.POST.get('username')
        password = request.POST.get('password')
        password2 = request.POST.get('password2')
        uphone = request.POST.get('mobile')
        code = request.POST.get('code')
        email = request.POST.get('email')
        allow = request.POST.get('allow')  # 用户协议,勾选后得到:on
        print('手机 验证码', uphone, code, request.session.get('message_code'))
        # todo:检验参数合法性
        # 判断参数不能为空
        if not all([username, password, password2, email, uphone, code]):
            return render(request, 'register.html', {'errmsg': "注册信息不能为空"})
        # 判断两次输入的密码是否一致
        if password != password2:
            return render(request, 'register.html', {'errmsg': "两次密码不一致"})
        # 判断邮箱合法
        if not re.match('^[a-z0-9][\w.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$',
                        email):
            return render(request, 'register.html', {'errmsg': "邮箱不合法"})
        # 判断是否勾选用户协议
        if allow != 'on':
            return render(request, 'register.html', {'errmsg': "请勾选用户协议"})
        # 判断手机输入是否正确
        if not re.match('^1[345678]\d{9}$', uphone):
            return render(request, 'register.html', {'errmsg': "手机输入不合法"})
        # 判断验证码是否正确
        if code != request.session.get('message_code'):
            return render(request, 'register.html', {'errmsg': "验证码校验错误"})
        # 处理业务:保存用户到数据表中
        # django提供的方法,会对密码进行加密
        user = User()
        try:
            user = User.objects.create_user(username,
                                            email,
                                            password,
                                            uphone=uphone)  # type: User
            # 修改用户状态为未激活
            user.is_active = False
            user.save()
        except IntegrityError:
            # 判断用户是否存在
            return render(request, 'register.html', {'errmsg': "用户名已存在"})

        # todo:发送激活邮件
        token = user.generate_active_token()
        # 同步发送:会阻塞
        # RegisterView.send_active_email(username, email, token)
        # 使用celery异步发送:不会阻塞
        # 会保存方法名
        send_active_email.delay(username, email, token)

        return HttpResponse("注册成功!")