Beispiel #1
0
    def post(self, request):
        """用户提交注册数据"""
        username = request.POST.get('username')
        password = request.POST.get('password')
        password2 = request.POST.get('password2')
        email = request.POST.get('email')
        allow = request.POST.get('allow')

        # 判断用户名是否为空
        if not all([username, password, password2, email]):
            return render(request, 'users/register.html',
                          {'message': '用户名输入为空!'})

        # 判断两次密码是否输入正确
        if password != password2:
            return render(request, 'users/register.html',
                          {'message': '两次输入的密码不同!'})

        # 验证邮箱是否输入正确
        if not re.match(r'^[a-z0-9][\w.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$',
                        email):
            return render(request, 'users/register.html',
                          {'message': '邮箱格式不正确'})

        # 判断是否勾选了协议
        if allow != 'on':
            return render(request, 'users/register.html',
                          {'message': '请先同意用户协议'})

        # 保存用户到数据库中
        # create_user: 是django提供的方法, 会对密码进行加密后再保存到数据库
        try:
            user = User.objects.create_user(username=username,
                                            password=password,
                                            email=email)
            User.objects.filter(id=user.id).update(is_active=False)
        except IntegrityError:
            return render(request, 'users/register.html',
                          {'message': '用户名已存在'})

        # todo: 发送邮件
        token = user.generate_active_token()
        # send_active_email(username, email, token)
        # celery异步发送邮件
        send_active_mail.delay(username, email, token)

        # return HttpResponse('请登录首页')
        return redirect(reverse("users:login"))
Beispiel #2
0
 def post(self, request):
     # 获取请求参数
     # 用户名, 密码, 确认密码, 邮箱, 勾选用户协议
     username = request.POST.get('username')
     password = request.POST.get('password')
     password2 = request.POST.get('password2')
     email = request.POST.get('email')
     allow = request.POST.get('allow')
     # 校验参数合法性
     # 逻辑判断 0 0.0 '' None [] () {}  -> False
     # all: 所有的变量都为True, all函数才返回True, 否则返回False
     if not all([username, password, password2, email, allow]):
         context = {'text': '参数不完整'}
         # return redirect('/users/register', context)
         return render(request, 'register.html', context)
     # 判断两次输入的密码是否正确
     if password != password2:
         context = {'text': '两次输入不一致'}
         return render(request, 'register.html', context)
     # 判断是否勾选了用户协议
     if allow != 'on':
         context = {'text': '请先同意用户协议'}
         return render(request, 'register.html', context)
     # 判断邮箱格式是否正确
     if not re.match('^[a-z0-9][\w.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$',
                     email):
         context = {'text': '邮箱格式不正确'}
         return render(request, 'register.html', context)
     # 业务处理
     # 保存用户到数据库中
     # create_user: 是django提供的方法, 会对密码进行加密后再保存到数据库
     try:
         user = User.objects.create_user(username=username,
                                         password=password,
                                         email=email)  # type: User
         user.is_active = False
         user.save()
     except IntegrityError:
         context = {'text': '用户已经存在'}
         return render(request, 'register.html', context)
     token = user.generate_active_token()
     # RegisterView.send_active_mail(username, email, token)
     send_active_mail.delay(username, email, token)
     request.session['username'] = username
     request.session['password'] = password
     return render(request, 'login.html')
Beispiel #3
0
    def post(self, request):
        # 获取post请求参数
        username = request.POST.get('username')
        password = request.POST.get('password')
        password2 = request.POST.get('password2')
        email = request.POST.get('email')
        allow = request.POST.get('allow')

        # todo:校验参数合法性
        # 判断参数不能为空
        if not all([username, password, password2, email]):
            return HttpResponse('参数不能为空')
        # 判断两次密码是否一致
        if password != password2:
            return HttpResponse('两次密码不一致')
        # 判断邮箱合法性
        if not re.match(r'^[a-z0-9][\w.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$',
                        email):
            return HttpResponse('邮箱格式不正确')
        # 判断是否勾选协议,勾选为‘on’
        if allow != 'on':
            return HttpResponse('请勾选用户协议')

        # 处理业务:保存用户到数据库表中
        # django提供的方法,会对密码进行加密
        user = None
        try:
            user = User.objects.create_user(username, email,
                                            password)  # type: User
            # 修改用户状态为未激活
            user.is_active = False
            user.save()
        except IntegrityError:
            # 判断用户是否存在
            return HttpResponse('用户已存在')

        # todo: 发送激活邮件
        token = user.generate_active_token()
        # 同步发送会阻塞
        # self.send_active_mail(username, email, token)
        # celery异步发送
        send_active_mail.delay(username, email, token)

        return HttpResponse("注册成功,进入登陆页面")
Beispiel #4
0
    def post(self, request):
        # 1.获取请求参数
        username = request.POST.get('username')
        password = request.POST.get('password')
        password2 = request.POST.get('password2')
        email = request.POST.get('email')
        allow = request.POST.get('allow')
        # 2.校验输入合法性

        if not all([username, password, password2, email]):
            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': '请同意用户协议'})

        # 3.保存倒数据库,不能重复添加用户
        try:
            user = User.objects.create_user(username, email, password)
        except IntegrityError:  # 数据完整性错误  数据已存在
            return render(request, 'register.html', {'errmsg': '用户名已存在'})

        # todo:给用户发送邮件
        s = TimedJSONWebSignatureSerializer(settings.SECRET_KEY, 60 * 60)
        token = s.dumps({'confirm': user.id})  # btys
        token = token.decode()  # 转换成字符串

        # self.send_active_mail(username, email, token)

        # 使用celery异步发送邮件
        send_active_mail.delay(username, email, token)

        # 修改用户状态为未激活(默认为激活状态)
        user.is_active = False
        user.save()

        return HttpResponse('进入登录界面')
Beispiel #5
0
    def post(self, request):

        username = request.POST.get('username')
        password = request.POST.get('password')
        password2 = request.POST.get('password2')
        email = request.POST.get('email')
        allow = request.POST.get('allow')  # 是否勾选用户协议

        # 校验参数完整性
        if not all([username, password, password2, email]):
            return render(request, 'register.html', {'message': '参数不完整'})

        if password != password2:
            return render(request, 'register.html', {'message': '两次输入密码不一样'})

        if allow != 'on':
            return render(request, 'register.html', {'message': '请先同意用户协议'})

        if not re.match('^[a-z0-9][\w.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$',
                        email):
            return render(request, 'register.html', {'message': '邮箱格式不正确'})

        # 业务处理:保存注册用户到数据库表
        # create_user 是django提供的方法,
        # 注意:参数先后顺序,会自动对密码进行加密处理
        user = None
        try:
            user = User.objects.create_user(username, email, password)
            # 修改用户的激活状态为未激活
            user.is_active = False
            user.save()
        except IntegrityError:  # 数据完整性错误
            # 判断注册用户是否已经存在
            return render(request, 'register.html', {'errmsg': '用户已存在'})

        # 发送激活邮件
        token = user.generate_active_token()
        # RegisterView.send_active_email(username,email,token)
        # 使用celery调用delay方法异步发送邮件
        send_active_mail.delay(username, email, token)
        # 响应请求
        return HttpResponse("进入登陆界面")
Beispiel #6
0
    def post(self, request):
        '''注册处理'''
        # 接受数据
        username = request.POST.get('user_name')
        pwd = request.POST.get('pwd')
        email = request.POST.get('email')
        allow = request.POST.get('allow')
        # 校验数据
        if not all([username, pwd, email]):
            return render(request, 'register.html', {'msg': '数据不完整'})

        if allow != 'on':
            return render(request, 'register.html', {'msg': '请同意协议'})

        # 校验用户名是否iu重复
        try:
            user = User.objects.get(username=username)
        except User.DoesNotExist:
            user = None
        if user:
            # 用户名存在
            return render(request, 'register.html', {'msg': '用户名已存在'})

        # 进行业务处理
        user = User.objects.create_user(username, email, pwd)
        user.is_active = 0
        user.save()

        #发送激活邮件

        #加密
        serializer = Serializer('sjkyvhsjn993nvks', 3600)
        info = {'confirm': user.id}
        token = serializer.dumps(info)  #bytes
        token = token.decode('utf8')

        # 发邮件
        send_active_mail.delay(email, username, token)

        # 返回应答,跳转到首页
        return redirect(reverse('goods:index'))
Beispiel #7
0
    def post(self, request):
        """
        1.获取请求参数
        2.校验数据合法性
        3.利用Django自带的方法把用户保存到数据库,并对用户密码加密
        4.发送激活邮件
        5.响应请求,返回html页面
        """

        #获取请求参数
        username = request.POST.get('username')
        password = request.POST.get('password')
        password2 = request.POST.get('password2')
        email = request.POST.get('email')
        allow = request.POST.get('allow')

        # 校验数据合法性
        # 所有的参数都不为空时,all方法才会返回True
        if not all([username, password, password2, email]):
            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': '请输入正确的邮箱格式'})

        #checkbox勾选中会返回on
        if allow != 'on':
            return render(request, 'register.html', {'errmsg': '请同意协议'})

        # 业务处理
        # 保存用户到数据库中
        # create_user: 是django提供的方法, 会对密码进行加密后再保存到数据库
        try:
            user = User.objects.create_user(username=username,
                                            email=email,
                                            password=password)
        except IntegrityError:
            return render(request, 'register.html', {'errmsg': '用户已存在'})

        #发送激活邮件
        #1.给用户id加密
        #2.定义一个发送邮件的方法,给用户发送激活连接
        #3.把用户的激活状态改为Flase未激活

        #1.给用户id加密
        # 参数1: 密钥(可以随便写东西,但是为了安全,使用Django自动生成的密钥)
        # 参数2: 过期时间,1小时
        s = TimedJSONWebSignatureSerializer(settings.SECRET_KEY, 3600)
        token = s.dumps({'confirm': user.id})  #是字节类型(要转为字符串类型)
        token = token.decode()  #字节转为字符串

        # 2.给用户发送激活连接
        #第一种发送邮件方法
        # self.send_active_mail(username,email,token)
        #第二种:用异步发送邮件方法
        send_active_mail.delay(username, email, token)
        #3.把用户的激活状态改为Flase未激活
        user.is_active = False
        user.save()

        # 响应请求,返回html页面
        return HttpResponse("进入登录界面")