1.注册,注册处理,生成,注册激活用户token

1、注册和注册处理

注册和注册处理使用了类视图去处理,使用itsdangerous去生成用户token,:

#user/urls
  url(r'^register/$',RegisterView.as_view(),name='register'),#注册
#user/views.py
class RegisterView(View):
    '''注册'''
    def get(self,request):
        '''显示注册页面'''
        return render(request, 'register.html')
    def post(self,request):
        '''注册处理'''
        # 获取请求数据
        username = request.POST.get('user_name')
        print("username:", username)
        password = request.POST.get('pwd')
        pw_sure = request.POST.get('cpwd')
        email = request.POST.get('email')
        allow = request.POST.get('allow')
        # 验证数据
        # 1、用户,密码,邮箱都不能为空
        if not all((username, password, email)):
            return render(request, 'register.html', context={
                'errormg': '用户名、密码、邮箱不能为空',
            })
        # 2、密码和确认密码需一致
        if password != pw_sure:
            return render(request, 'register.html', context={
                'errormg': '密码和确认密码不一致',
            })
        # 3、校验邮箱
        if not re.match('^[a-z0-9][\w.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$', email):
            return render(request, 'register.html', context={
                'errormg': '邮箱格式不正确',
            })
        # 4、校验同意协议
        if allow != 'on':
            return render(request, 'register.html', context={
                'errormg': '请同意协议',
            })
        # 5、校验用户名重复不能创建
        try:
            user = User.objects.get(username=username)
        except User.DoesNotExist:  # 用户不存在
            user = None

        if user:
            return render(request, 'register.html', context={
                'errormg': '用户名已存在',
            })
        user = User.objects.create_user(username, email, password)
        user.is_active = 0  # 没有激活
        user.save()

        # 发送激活邮件,包含激活链接:http://127.0.0.1:8000/user/active/user_id
        # 激活链接中需要包含用户的身份信息,并且要把身份信息进行加密

        #加密用户的身份信息,生成激活token
        serializer = Serializer(settings.SECRET_KEY,3600)
        info = {"confirm":user.id}
        token = serializer.dumps(info)

        #发送邮件

        #返回应答,跳转到首页
        return redirect(reverse('goods:index'))

2、注册激活用户

用户激活成功,返回到登陆页面,如果激活链接过期,重新又生成链接时激活(之后更新写)

#user/urls.py
    url(r'^active/(?P.*)/$',ActionView.as_view(),name='action') ,#用户激活
    path('login',LoginView.as_view(),name='login'),#登陆页面
#user/view.py
class ActionView(View):
    '''用户激活'''
    def get(self,request,token):
        '''进行用户激活'''
        try:
            serializer = Serializer(settings.SECRET_KEY, 3600)
            info = serializer.loads(token)
            user_id = info['confirm']
            user = User.objects.get(id=user_id)
            user.is_active=1
            user.save()
        except SignatureExpired as e:
            #链接过期,重新生成激活的链接
            return HttpResponse('激活链接已过期')

        #成功激活返回登陆页
        return redirect(reverse('user:login'))

class LoginView(View):
    '''登陆页面'''
    def get(self,request):
        return render(request,'login.html',context={})

你可能感兴趣的:(1.注册,注册处理,生成,注册激活用户token)