zoukankan      html  css  js  c++  java
  • 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<token>.*)/$',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={})
    
  • 相关阅读:
    如何防止表单重复提交
    二、编程题
    Java 基础测试题
    常见异常
    Hibernate工作原理及为什么要用?
    简述拦截器的工作原理以及你在项目中使用过哪些自定义拦截器。
    拦截器和过滤器的区别
    浏览器默认样式
    数组去重
    数组排序
  • 原文地址:https://www.cnblogs.com/venvive/p/12014392.html
Copyright © 2011-2022 走看看