Ejemplo n.º 1
0
def register_handle(request):
    """注册处理"""
    # 获取数据
    username = request.POST.get('user_name')
    password = request.POST.get('pwd')
    email = request.POST.get('email')
    # 进行数据校验,调用python的内置函数all()
    if not all([username, password, email]):
        # 若数据为空
        return render(request, 'df_user/register.html', {'errmsg': '参数不能为空!'})
    # 判断邮箱是否合法
    if not re.match(r'^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$',
                    email):
        # 邮箱不合法
        return render(request, 'df_user/register.html', {'errmsg': '邮箱不合法!'})

    # 注册
    passport = Passport.objects.add_one_passport(username, password, email)
    # 验证邮箱,send_mail是io阻塞,所以此处不采用,而使用异步神器celery
    # send_mail('天天生鲜邮箱验证','',settings.EMAIL_FROM,[email],html_message='<a href="http://www.baidu.com">百度</a>')
    # 生成token
    serializer = Serializer(settings.SECRET_KEY, 3600)
    token = serializer.dumps({'confirm': passport.id})
    token = token.decode()
    # 将任务发送到celery的broker那,
    send_active_email.delay(token, username, email)
    return redirect(reverse('goods:index'))
Ejemplo n.º 2
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("注册成功!")
Ejemplo n.º 3
0
    def post(self, request):
        # 1.接受数据
        username = request.POST.get('user_name')
        password = request.POST.get('pwd')
        email = request.POST.get('email')

        # 2.检验数据
        # 数据缺失
        if not all([username, password, email]):
            return render(request, 'register.html', {'errmsg': '数据不完整'})

        # 检验邮箱合法性
        if not re.match(r'^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$',
                        email):
            return render(request, 'register.html', {'errmsg': '请输入合法邮箱'})

        # 检验密码是否一致
        cpwd = request.POST.get('cpwd')
        if password != cpwd:
            return render(request, 'register.html', {'errmsg': '密码不一致'})

        # 是否同意协议
        is_allow = request.POST.get('allow')
        if is_allow != 'on':
            return render(request, 'register.html', {'errmsg': '请同意协议'})

        # 检查用户名是否存在
        try:
            user = User.objects.get(username=username)
        except:
            # 用户名不存在
            user = None

        if user:
            return render(request, 'register.html', {'errmsg': '用户名已存在'})

        # 3.业务处理
        user = User()
        user.username = username
        user.password = md5(password.encode('utf-8')).hexdigest()  # 存储密码的MD5值
        user.email = email
        user.is_active = 0  # 默认未激活
        user.save()

        # 发送激活邮件,设置激活链接(标识用户唯一性): /users/active/1/
        # 加密用户身份信息
        serializer = Serializer(settings.SECRET_KEY,
                                3600)  # 使用django提供的token, 1小时过期
        info = {'confirm': user.id}

        token = serializer.dumps(info).decode()

        # celery发送邮件
        send_active_email.delay(email, username, token)

        # 4.返回响应
        return redirect(reverse('goods:index'))
Ejemplo n.º 4
0
    def post(self, request):

        name = request.POST.get('user_name')
        pwd = request.POST.get('pwd')
        email = request.POST.get('email')
        allow = request.POST.get('allow')

        if not all([name, pwd, email, allow]):

            return redirect(reversed('users:register'))

        if re.match(r'/^[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': '请勾选用户协议'})

        try:

            # 新创建的用户名存到数据库 create-user就是专门用数据库新创建的

            user = User.objects.create_user(name, email, pwd)

        except db.IntegrityError:

            return render(request, 'register.html', {'errmsg': '用户名已经注册'})

        user.is_active = False

        user.save()

        token = user.generate_active_token()

        send_active_email.delay(email, name, token)

        # send_mail()
        # user 是通过models中的user类来创建的的对象,调用生成token的方法

        # # def send_active_email(email, name, token):
        # #     """封装发送邮件方法"""
        #
        #
        # from django.core.mail import send_mail
        # subject = "淘淘乐用户激活"  # 标题
        # body = ""  # 文本邮件体
        # sender = settings.EMAIL_FROM  # 发件人
        # receiver = [email]  # 接收人
        # html_body = '<h1>尊敬的用户 %s, 感谢您注册淘淘乐!</h1>' \
        #             '<br/><p>请点击此链接激活您的帐号<a href="http://127.0.0.1:8000/users/active/%s">' \
        #             'http://127.0.0.1:8000/users/active/%s</a></p>' % (name, token, token)
        # send_mail(subject, body, sender, receiver, html_message=html_body)

        # return HttpResponse('ceshi')
        return redirect(reverse('goods:index'))
Ejemplo n.º 5
0
    def post(self, request):
        '''处理POST请求,返回do_register函数处理注册逻辑'''
        '''注册逻辑'''
        '''获取用户注册的参数'''
        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]):
            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(r'^[a-z0-9][\w.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$',
                        email):
            return render(request, 'register.html', {'message': '邮箱格式错误!!'})

        # 把用户输入的数据保存到数据库中,create_user:是django提供的方法,会对密码加密后保存到数据库

        try:
            user = User.objects.create_user(username, email, password)

        except IntegrityError:
            return render(request, 'register.html', {'message': '用户名已存在'})

        # 邮箱验证
        # 获取token
        serizar = TimedJSONWebSignatureSerializer(settings.SECRET_KEY, 3600)
        token = serizar.dumps({'confirm': user.id})
        token = token.decode()  # 转成字符串类型

        # self.send_active_email(username,email,token)

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

        # 邮件验证
        user.is_active = False
        user.save()

        # todo 发送激活邮件
        # 响应返回html页面,重定向到登陆界面,反向解析
        return redirect(reverse("users:login"))
Ejemplo n.º 6
0
    def post(self, request):
        """处理注册逻辑"""

        # 1.获取请求参数,注册数据
        user_name = request.POST.get('user_name')
        pwd = request.POST.get('pwd')
        email = request.POST.get('email')
        allow = request.POST.get('allow')

        # 2.校验请求参数
        # 判断请求参数是否齐全:all(可迭代对象),只要有一个为空,就返回空、假
        if not all([user_name, pwd, email]):
            # 具体如何处理用户参数不全,根据需求文档而定
            return redirect(reverse('users:register'))

        # 3.判断邮箱格式
        if not re.match(r'^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$', email):
            return render(request, 'register.html', {'errmsg':'邮箱格式错误'})

        # 4.判断是否勾选用户协议
        if allow != 'on':
            return render(request, 'register.html', {'errmsg': '请勾选用户协议'})

        # 5.保存用户注册数据到数据库:Django的用户认证系统,自动加密密码,重名的异常,不需要调用save()
        try:
            user = User.objects.create_user(user_name, email, pwd)
        except IntegrityError:
            # 重名异常
            return render(request, 'register.html', {'errmsg': '用户已存在'})

        # 6.重置激活状态(注意):默认为True
        user.is_active = False
        # 修改后自己保存
        user.save()

        # 7.生成token
        token = user.generate_active_token()

        # 8.Celery异步发送激活邮件
        send_active_email.delay(email, user_name, token)

        # 9.响应结果:实际开发根据需求文档,我在这里重定向到首页
        return redirect(reverse('goods:index'))


# def register(request):
#     """函数视图:注册"""
#
#     if request.method == 'GET':
#         # 提供注册页面
#         return render(request, 'register.html')
#
#     if request.method == 'POST':
#         # 处理注册逻辑
#         return HttpResponse('收到POST请求,需要处理注册逻辑')
Ejemplo n.º 7
0
    def post(self, request):
        # 接受用户注册参数
        user_name = request.POST.get('user_name')
        pwd = request.POST.get('pwd')
        email = request.POST.get('email')
        allow = request.POST.get('allow')

        # 校验用户注册参数
        # 只要有一个数据为空,就返回假,只有全部为真则为真
        if not all([user_name, pwd, email]):
            # 公司中,根据开发文档实现需求
            return redirect(reverse('users:register'))

        # 判断邮箱格式
        if not re.match(r'^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$',
                        email):
            return render(request, 'register.html', {'errmsg': '邮箱格式错误'})

        # 是否勾选了同意
        # on == 勾选
        if allow != 'on':
            return render(request, 'register.html', {'errmsg': '请勾选用户协议'})
        # 保存用户注册参数
        # 以下的代码不用调用save保存(只有使用,user.object.create()或者user.
        try:
            user = User.objects.create_user(user_name, email, pwd)
        #重名异常判断
        except db.IntegrityError:
            return render(request, 'register.html', {'errmsg': '用户已存在'})
        # 重置激活的状态
        user.is_active = False
        # 注意:重置之后需要重新保存一下,每次调用模型类改动时,都需要保存
        # 还可以使用creat(),但是都需要调用save保存
        user.save()

        # 发送激活邮件
        # 把激活状态变为TURE
        # 生成token
        token = user.generate_active_token()

        # 异步发送邮件,生成token 响应之前 发送邮件,激活
        # 在这里有个delay  就是用于触发异步任务的
        send_active_email.delay(email, user_name, token)

        return redirect(reverse('goods:index'))


# def register(request):
#     #注册,提供注册页面与逻辑
#     # 如果在一个视同中,实现多种请求逻辑,请求地址使用相同的地址,只是请求方法不同
#     if request.method == 'GET':
#         return render(request,'register.html')
#     if request.method =='POST':
#         return HttpResponse ('这里是请求逻辑')
Ejemplo n.º 8
0
    def post(self, request):
        # 1获取传过来的数据
        username = request.POST.get('user_name')  # 用户名
        psw = request.POST.get('pwd')  # 密码
        email = request.POST.get('email')  # 邮件
        allow = request.POST.get('allow')  # 同意协议

        # 2校验数据
        # 判断是否为空
        if not all([username, psw, email]):
            return redirect(reverse('users:register'))

        # 判断邮箱格式
        if not re.match(r'^[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': '没有同意协议'})


            # 3执行注册逻辑
            # 保存到数据库 insert
        # user = User()
        # user.username = username
        # user.password = psw
        # user.save() #insert
        # 密码加密  123456 + jfdsldsfjldsfjldsjk+当前时间  加盐值 混淆
        try:
            user = User.objects.create_user(username=username, email=email, password=psw)
        except db.IntegrityError:
            return render(request, 'register.html', {'errmsg': '用户已经注册'})
        # django默认是激活的 不符合需求 改为不激活
        user.is_active = False
        # 保存到数据库 insert
        user.save()

        # 生成token  包含user.id  生成token的过程 叫签名
        token = user.generate_active_token()

        # 给用户发送激活邮件

        # 接收邮件的人 可以有多个
        # recipient_list = [user.email] 应该发给user.email
        #  为了测试方便 就写固定了了
        recipient_list = ['*****@*****.**']  # user.email

        # 发送邮件的方法  发邮件是耗时的  处理图片 音视频 需要异步执行
        # 通过delay调用 通知work执行任务
        send_active_email.delay(recipient_list, user.username, token)

        # 5给浏览器响应
        return HttpResponse('注册成功,请去激活')
Ejemplo n.º 9
0
    def post(self, request):
        # 注册页面逻辑处理
        username = request.POST.get('user_name')
        password = request.POST.get('pwd')
        email = request.POST.get('email')
        allow = request.POST.get('allow')

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

        if not re.match(r'^[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': '请首先同意协议'})

        # 业务处理:用户注册,验证用户是否存在
        try:
            # 用户已经存在
            user = User.objects.get(username=username)
        except User.DoesNotExist:
            # 用户名不存在可以注册
            user = None

        if user:
            return render(request, 'register.html', {'errmsg': '用户已存在'})

        try:
            user = User.objects.create_user(username, email, password)
            user.is_active = 0
            user.save()
        except Exception as e:
            return render(request, 'register.html', {'errmsg': '用户注册失败,请重试'})

        # 设置激活链接/user/active/user_id
        serializer = Serializer(settings.SECRET_KEY, 3600)
        info = {'confirm': user.id}
        token = serializer.dumps(info).decode('utf8')

        # 发送邮件,delay放到队列中
        send_active_email.delay(email, username, token)

        # 返回结果, namespace=goods下面的name=index的视图函数
        return redirect(reverse('goods:index'))
Ejemplo n.º 10
0
    def post(self, request):
        """处理post请求,处理注册数据"""
        # 获取前端发送的数据/参数
        user_name = request.POST.get("user_name")
        password = request.POST.get("pwd")
        email = request.POST.get("email")
        allow = request.POST.get("allow")

        # 参数校验
        if not all([user_name, password, email]):
            # 如果参数不完整,从定向到注册页面
            return redirect(reverse("users:register"))

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

        if allow != "on":
            # 如果用户没有勾选协议
            return render(request, "register.html", {"errmsg": "请同意协议!"})

        # 进行业务逻辑处理
        # 将密码加密
        # 将用户数据保存到数据库中
        # user = User()
        # user.save()

        # 使用django的认证系统创建用户
        try:
            user = User.objects.create_user(user_name, email, password)
        except db.IntegrityError:
            # 如果抛出此异常,表示用户已经注册
            return render(request, "register.html", {"errmsg": "用户已注册!"})

        # 将用户的激活状态设置为假
        user.is_active = False
        user.save()

        # 生成激活token
        token = user.generate_active_token()

        # 使用celery发送邮件
        send_active_email.delay(email, user_name, token)

        # 返回给前端结果
        return redirect(reverse("goods:index"))
Ejemplo n.º 11
0
    def post(self, request):
        """处理注册表单逻辑"""

        # 接受注册请求参数
        user_name = request.POST.get('user_name')
        pwd = request.POST.get('pwd')
        email = request.POST.get('email')
        allow = request.POST.get('allow')

        # 校验注册请求参数
        # 判断是否缺少参数:只要有一个为空,就返回假
        if not all([user_name, pwd, email]):
            # 公司中,以开发文档为准
            return redirect(reverse('users:register'))

        # 判断邮箱格式
        if not re.match(r'^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$',
                        email):
            return render(request, 'register.html', {'error': '邮箱格式错误'})

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

        # 保存注册请求参数
        try:
            user = User.objects.create_user(user_name, email, pwd)
        except db.IntegrityError:
            return render(request, 'register.html', {'error': '用户已存在'})

        # 重置激活状态
        user.is_active = False
        user.save()

        # 生成token
        token = user.generate_active_token()

        # 异步发送激活邮件:不能够阻塞 return
        # send_active_email(email, user_name, token)   # 错误写法
        # delay : 触发异步任务
        send_active_email.delay(email, user_name, token)

        # 响应结果
        return redirect(reverse('users:login'))
Ejemplo n.º 12
0
    def post(self, request):
        """处理注册逻辑,存储注册信息"""

        # 接受用户注册参数
        user_name = request.POST.get('user_name')
        pwd = request.POST.get('pwd')
        email = request.POST.get('email')
        allow = request.POST.get('allow')

        # 校验用户注册参数: 只要有一个数据为空,那么久返回假,只有全部为真,才返回真
        if not all([user_name, pwd, email]):
            # 公司中,根据开发文档实现需求
            return redirect(reverse('users:register'))

        # 判断邮箱格式
        if not re.match(r'^[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': '请勾选用户协议'})

        # 保存用户注册参数
        try:
            user = User.objects.create_user(user_name, email, pwd)
        except db.IntegrityError:  # 重名异常判断
            return render(request, 'register.html', {'errmsg': '用户已存在'})

        # 重置激活状态 : 需要使用邮件激活
        user.is_active = False
        # 注意: 需要重新保存一下
        user.save()

        # 生成token
        token = user.generate_active_token()

        # 异步发送激活邮件:不能阻塞HttpResponse
        # send_active_email(email, user_name, token) # 这是错误写法,不会触发异步的send_active_email
        # 正确的写法  delay()触发异步任务
        send_active_email.delay(email, user_name, token)

        # return HttpResponse('这里是处理注册逻辑')
        return redirect(reverse('goods:index'))
Ejemplo n.º 13
0
    def post(self, request):
        # 获取传入的数据
        username = request.POST.get("user_name")
        psw = request.POST.get("pwd")
        allow = request.POST.get("allow")
        email = request.POST.get("email")
        # 检验数据
        # 判断是否为空
        if not all([username, psw, email]):
            return redirect(reverse('users:register'))
        if not re.match(r'^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$',
                        email):
            return render(request, 'register.html', {'error': '邮箱格式错误 '})
        if allow != 'on':
            return render(request, 'register.html', {'err': '请勾选协议'})
        # 密码加密
        try:

            user = User.objects.create_user(username=username,
                                            email=email,
                                            password=psw)
        except db.IntegrityError:
            return render(request, 'register.html', {'error': '用户已存在 '})
        user.is_active = False
        user.save()
        # 给用户发邮件

        # 生成token  包含user.id  生成token的过程 叫签名:
        token = user.generate_active_token()

        # 给用户发送激活邮件

        # 接收邮件的人 可以有多个
        # recipient_list = [user.email] 应该发给user.email
        #  为了测试方便 就写固定了了
        recipient_list = ['*****@*****.**']  # user.email

        # 发送邮件的方法  发邮件是耗时的  处理图片 音视频 需要异步执行
        # 通过delay调用 通知work执行任务
        send_active_email.delay(recipient_list, user.username, token)

        # 5给浏览器响应
        # return render(request, 'index.html')
        return redirect('/goods/index')
Ejemplo n.º 14
0
 def post(self, request):
     """处理用户注册"""
     uname = request.POST.get("user_name")
     passwd = request.POST.get("pwd")
     email = request.POST.get("email")
     allow = request.POST.get("allow")
     if not all([uname, passwd, email, allow]) or allow != "on" \
             or not re.match(r"^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$", email):
         return render(request, "register.html")
     try:
         user = User.objects.create_user(uname, email, passwd)
     except db.IntegrityError:
         return render(request, "register.html", {"errmsg": "用户名已注册"})
     user.is_active = False
     user.save()
     # 生成激活令牌
     token = user.generate_active_token()
     send_active_email.delay(uname, email, token)
     return redirect(reverse("goods:index"))
Ejemplo n.º 15
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')

        # 判断参数不能为空
        if not all([username, password, password2, email, allow]):
            return render(request, 'register.html', {'ERRORMSG': '参数不能为空'})
        # 判断输入两次密码一致
        if password != password2:
            return render(request, 'register.html', {'ERRORMSG': '输入两次密码不一致'})

        # 判断邮箱合法性
        if not re.match('^[a-z0-9][\w.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$',
                        email):
            return render(request, 'register.html', {'ERRORMSG': '输入邮箱不合法'})

        # 判断是否勾选用户协议
        if allow != 'on':
            return render(request, 'register.html', {'ERRORMSG': '未勾选用户协议'})

        try:
            # 处理业务:保存用户到数据库表中
            user = User.objects.create_user(username, email, password)
            # 修改用户状态为未激活
            user.is_active = False
            user.save()
            # 判断用户是否存在
        except IntegrityError:
            return render(request, 'register.html', {'ERRORMSG': '用户已存在'})

        # todo:发送激活邮件
        token = user.generate_active_token()
        # 同步发送会阻塞
        # RegisterView.send_active_email(username,email,token)

        # 异步调用delay方法
        send_active_email.delay(username, email, token)
        return HttpResponse('注册成功,进入登陆界面')
Ejemplo n.º 16
0
    def post(self, request):
        """对应post请求方式,接收处理用户的注册数据"""
        # 接收传入的参数
        user_name = request.POST.get("user_name")
        password = request.POST.get("pwd")
        email = request.POST.get("email")
        allow = request.POST.get("allow")

        # 检验参数的正确性
        if not all([user_name, password, email]):
            # 重定向到注册页面
            return redirect(reverse("users:register"))

        if not re.match(r"^[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": "请接收注册协议!"})

        # 进行业务逻辑处理,将数据保存到数据库
        # 注意用户的密码要加密,
        try:
            # django的AbstractUser基类提供的创建用户的方法
            user = User.objects.create_user(user_name, email, password)
        except db.IntegrityError:
            # 如果用户名已存在,则抛出此异常信息
            return render(request, "register.html", {"errmsg": "用户名已存在!"})

        # 将用户的激活状态设置为假
        user.is_active = False
        user.save()

        # 为用户生成激活口令
        token = user.generate_active_token()

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

        # 将结果返回给前端
        return redirect(reverse("goods:index"))
Ejemplo n.º 17
0
    def post(self, request):
        # 接收数据
        username = request.POST.get('user_name')
        password = request.POST.get('pwd')
        email = request.POST.get('email')
        allow = request.POST.get('allow')

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

        if not re.match(r'^[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': '请仔细阅读协议并同意'})

        try:
            user = User.objects.get(username=username)
        except User.DoesNotExist:
            user = None
        else:
            # 此处简写,应该判断user是否为None更严谨
            return render(request, 'register.html', {'errmsg': '用户已存在'})

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

        # 生成邮件token
        serializer = Serializer(settings.SECRET_KEY, 3600)
        info = {'confirm': user.id}
        token = serializer.dumps(info)
        token = token.decode()

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

        # 返回应答
        return redirect(reverse('goods:index'))
Ejemplo n.º 18
0
    def post(self, request):
        """用于处理post逻辑"""

        # 1.接收用户注册信息、参数
        user_name = request.POST.get('user_name')
        password = request.POST.get('pwd')
        email = request.POST.get('email')
        allow = request.POST.get('allow')

        # 2.参数校验
        # 2.1 判断参数是否都传入:all(),只有校验的对象都为真,返回True
        if not all([user_name, password, email]):
            # 重新刷新注册页面:具体如何实现,根据公司需求而定
            return redirect(reverse('users:register'))

        # 2.2 校验邮箱地址格式
        if not re.match(r'^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$', email):
            return render(request, 'register.html', {'errmsg':'邮箱地址格式错误'})

        # 2.3 判断是否勾选用户协议
        if allow != 'on':
            return render(request, 'register.html', {'errmsg':'请勾选用户协议'})

        # 3.保存注册数据:使用django自带的用户认证系统,默认对密码加密在保存,自动保存的
        try:
            # 3.1 判断用户是否存在
            user = User.objects.create_user(user_name, email, password)
        except IntegrityError:
            return render(request, 'register.html', {'errmsg':'用户已存在'})

        # 4.重置激活状态:因为django认证系统默认把用户的激活状态置为True
        user.is_active = False
        user.save()

        # 5.生成激活的token
        token = user.generate_active_token()

        # 6.异步发送激活邮件
        send_active_email.delay(email, user_name, token)

        # 7.响应结果给用户:根据产品需求而定
        return redirect(reverse('goods:index'))
Ejemplo n.º 19
0
    def post(self, request):
        """处理注册逻辑"""
        # 1. 接收用户注册请求数据
        user_name = request.POST.get('user_name')
        pwd = request.POST.get('pwd')
        cpwd = request.POST.get('cpwd')
        email = request.POST.get('email')
        allow = request.POST.get('allow')
        # 2. 校验数据是否为空
        if not all([user_name, pwd, cpwd, email]):
            return redirect(reverse('users:register'))
        # 3. 校验数据是否有效
        if not re.match(r"^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$",
                        email):
            return render(request, 'register.html', {'errmsg': '您输入的邮箱格式不正确'})
        # 4. 校验是否已勾选用户协议
        if allow != 'on':
            return render(request, 'register.html', {'errmsg': '请勾选用户协议'})
        # 5. 保存数据
        try:
            user = User.objects.create_user(user_name, email, pwd)
        except db.IntegrityError:
            return render(request, 'register.html', {'errmsg': '该用户名已注册'})
        # 6. 将用户初始化为未激活状态
        user.is_active = False
        user.save()
        # 生产token
        token = user.generate_active_token()
        # 7. 发送激活邮件
        send_active_email.delay(email, user_name, token)
        return redirect(reverse('goods:index'))


# def register(request):
#     """函数视图"""
#
#     if request.method == 'GET':
#         """提供注册页面"""
#         return render(request, 'register.html')
#     if request.method == 'POST':
#         """处理注册逻辑,保存注册信息"""
#         return HttpResponse("注册逻辑处理")
Ejemplo n.º 20
0
    def post(self, request):
        username = request.POST.get('user_name')
        password = request.POST.get('pwd')
        email = request.POST.get('email')
        allow = request.POST.get('allow')
        # return render(request, 'register.html', {'errmsg': '数据不完整'})

        #print(username, password, email, allow)

        if not all([username, password, email]):
            #print('<' * 10)
            return render(request, 'register.html', {'errmsg': '数据不完整'})

        if not re.match(r'^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$',
                        email):
            return render(request, 'register.html', {'errmsg': '邮箱地址不对'})

        if allow != 'on':
            # print('<' * 10)
            return render(request, 'register.html', {'errmsg': '请同意协议'})

        try:
            user = User.objects.get(username=username)
        except User.DoesNotExist:
            user = None

        if user:
            return render(request, 'register.html', {'errmsg': '用户已存在'})

        user = User.objects.create_user(username, email, password)
        user.is_active = 0
        user.save()

        serializer = Serializer(settings.SECRET_KEY, 3600)
        info = {'confirm': user.id}
        token = serializer.dumps(info)  #dumps 注意s
        token = token.decode('utf8')

        send_active_email.delay(email, username, token)

        return redirect(reverse('goods:index'))
Ejemplo n.º 21
0
    def post(self, request):
        """对应post请求方式,接收处理用户的注册数据"""
        # 接收传入的参数
        user_name = request.POST.get("user_name")
        password = request.POST.get("pwd")
        email = request.POST.get("email")
        allow = request.POST.get("allow")

        # 检验参数的正确性
        if not all([user_name, password, email]):
            # 重定向到注册页面
            return redirect(reverse("users:register"))

        if not re.match(r"^[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": "请接收注册协议!"})

        # 进行业务逻辑处理,将数据保存到数据库
        # 注意用户的密码要加密,
        try:
            # django的AbstractUser基类提供的创建用户的方法
            user = User.objects.create_user(user_name, email, password)
        except db.IntegrityError:
            # 如果用户名已存在,则抛出此异常信息
            return render(request, "register.html", {"errmsg": "用户名已存在!"})

        # 将用户的激活状态设置为假
        user.is_active = False
        user.save()

        # 为用户生成激活口令
        token = user.generate_active_token()

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

        # 将结果返回给前端
        return redirect(reverse("goods:index"))
Ejemplo n.º 22
0
 def post(self, request):
     user_name = request.POST.get('user_name')
     password = request.POST.get('pwd')
     email = request.POST.get('email')
     allow = request.POST.get('allow')
     if not all([user_name, password, email, allow]):
         return redirect(reversed('users:register'))
     if not re.match(r"^[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': '没有勾选用户协议'})
     try:
         user = User.objects.create_user(user_name, email, password)
     except:
         return render(request, 'register.html', {'errmsg': '用户已认证'})
     user.is_active = False
     user.save()
     token = user.generate_active_token()
     send_active_email.delay(email, user_name, token)
     return redirect(reverse('users:login'))
Ejemplo n.º 23
0
def register_handles(request):
    '''进行用户注册数据处理'''
    # 接收数据
    username = request.POST.get('user_name')
    password = request.POST.get('pwd')
    # cpassword = request.POST.get('cpwd')
    email = request.POST.get('email')
    # # 判断是否为空
    # if not all([username, password, cpassword, email]):
    #     return render(request, 'df_user/register.html', {'errodata': '参数不能为空'})
    # # 判断邮箱是否合理
    # if not re.match(r'/^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$/')

    # 数据库保存注册用户(方法1:用save保存)
    # p = Passport()
    # p.username = username
    # p.password = password
    # p.email = email
    # p.save()
    # 数据库保存注册用户(方法2:)
    # passport = Passport(username=username, password=password, email=email)
    # passport.save()
    # Passport.objects.create(username=username, password=password, email=email)
    # 数据库保存注册用户(方法3:函数封装)
    passport = Passport.objects.add_one_passport(username=username,
                                                 password=password,
                                                 email=email)

    # 生成激活的token
    serializer = Serializer(settings.SECRET_KEY, 3600)  # 设置链接失效时间为3600秒
    token = serializer.dumps({'confirm': passport.id})  # dumps将id加密,返回的是byte类型
    token = token.decode()

    # 给用户的邮箱发送激活邮件
    # send_mail('天天生鲜用户激活', '', settings.EMAIL_FROM, [email], html_message='<a href="www.baidu.com">百度</a>')
    # send_mail('天天生鲜用户激活', '激活请点击', settings.EMAIL_FROM, [email], )

    send_active_email.delay(token, username,
                            email)  # delay延时,是设置异步执行,邮箱发送和页面跳转同时进行
    return redirect('/user/login/')
Ejemplo n.º 24
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')

        # 'message'用来返回提示信息到注册界面
        if not all([username, password, password2, email, allow]):
            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提供的方法, 会对密码进行加密后再保存到数据库
        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, 'register.html', {'message': '用户名已存在'})

        # 发送激活邮件
        token = user.generate_active_token()
        send_active_email.delay(username, email, token)

        return redirect(reverse("users:login"))
Ejemplo n.º 25
0
 def post(self, request):
     '''处理用户注册数据'''
     username = request.POST.get('user_name')
     password = request.POST.get('pwd')
     email = request.POST.get('email')
     allow = request.POST.get('allow')
     if not all([username, password, email]):
         return render(request, 'register.html', {'error_msg': '数据不完整'})
     if not re.match(r"^[a-z0-9][\w.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$",
                     email):
         return render(request, 'register.html', {"error_msg": "邮箱格式不正确"})
     if allow != "on":
         return render(request, "register.html", {"error_msg": "请勾选同意"})
     try:
         user = User.objects.get(username=username)
     except User.DoesNotExist:
         user = None
     if user:
         return render(request, "register.html", {"error_msg": "用户名已存在"})
     user = User.objects.create_user(username, email, password)
     user.is_active = 0
     user.save()
     serializer = Serializer(settings.SECRET_KEY, 3600)  # 有效期1小时
     info = {"confirm": user.id}
     token = serializer.dumps(info)
     token_ = token.decode('utf-8')
     send_active_email.delay(email, username, token_)
     #         subject = "海马生鲜欢迎你"  # 邮件标题
     #         message = "how are you"  # 邮件正文
     #         sender = settings.EMAIL_FROM  # 发件人
     #         receiver = [email] # 收件人
     #         html_message='''
     #      <h1>%s 恭喜您成为海马生鲜注册会员</h1><br/><h3>请您在1小时内点击以下链接进行账户激
     #             活</h3><a
     #             href="http://127.0.0.1:8000/active/%s">http://127.0.0.1:8000/active/%s</a>
     #             ''' % (username, token_, token_)
     #         send_mail(subject, message, sender, receiver,html_message=html_message)
     return redirect(reverse("index"))
Ejemplo n.º 26
0
    def post(self, request):

        #获取注册请求参数
        user_name = request.POST.get('user_name')
        password = request.POST.get('pwd')
        email = request.POST.get('email')
        allow = request.POST.get('allow')
        ##校验注册请求参数 --- 注册逻辑不涉及查重
        # 判断是否缺少参数:只要有一个为空,就返回假---返回注册页面
        if not all([user_name, password, email]):
            return redirect(reverse('users:register'))
        # 判断邮箱格式是否正确 --- 取反
        if not re.match(r"^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$",
                        email):
            return render(request, 'register.html', {'errormsg': '邮箱格式不正确'})

    #判断是否勾选用户协议
        if allow != 'on':
            return render(request, 'register.html', {'errormsg': '没有勾选用户协议'})

    #保存注册请求参数 到数据库 --- 属于隐私信息需要加密--可以使用django的用户认证系统
        try:
            user = User.objects.create_user(user_name, email, password)
        except db.IntegrityError:
            return render(request, 'register.html', {'errormsg': '用户名已存在'})
        # 保存的用户默认是激活状态,需要手动设置成未激活状态
        user.is_active = False
        #保存这个用户的信息到数据库
        user.save()
        # 生成token --- 调用模型类中定义的生成token的方法。
        token = user.generate_active_token()
        # send_active_email(email, user_name, token)   # 错误写法
        # delay : 触发异步任务 --- 不然celery不认识
        send_active_email.delay(email, user_name, token)

        return redirect(reverse('goods:index'))
Ejemplo n.º 27
0
    def post(self, request):
        """注册信息处理"""
        # 1. 接受数据
        username = request.POST.get('user_name')
        password = request.POST.get('pwd')
        email = request.POST.get('email')
        allow = request.POST.get('allow')

        # 2. 对数据进行校验

        # 是否接收到数据
        # all 方法,判断参数是否为可迭代对象,
        if not all([username, password, email]):
            return render(request, 'register.html', {'errorMsg': '数据不完整'})

        # 校验邮箱
        if not re.match(r"^[a-z0-9][\w.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$",
                        email):
            return render(request, 'register.html', {'errorMsg': '邮箱格式错误'})

        # 校验是否同意协议
        if allow != 'on':
            return render(request, 'reigister.html', {'errorMsg': '请同意协议'})

        # 3. 进行业务处理,如用户注册

        # 将注册用户信息放置在数据库中
        # user = User()  # 创建一个 user 对象,通过操作对象的属性或方法,来对数据库进行操作,ORM操作
        # user.username = username
        # user.password = password
        # user.email = email

        # 更新数据库
        # user.save()

        # 校验用户名是否重复
        try:
            user = User.objects.get(username=username)
        except User.DoesNotExist as e:
            # 用户名不存在
            user = None

        if user:
            return render(request, 'register.html', {'errorMsg': '用户名已存在'})

        # 使用 django 自带的认证系统
        user = User.objects.create_user(username, email, password)
        # 新用户应该是未激活的状态
        user.is_active = 0  # 设置新用户账号未激活
        user.save()

        # 4. 向用户发送激活邮件
        # 5. 使用 itsdangerous 将用户信息加密,防止用户信息泄露
        serializer = Serializer(settings.SECRET_KEY,
                                3600)  # 选择 django 自带的秘钥生成一个对象,生效时间为 3600s
        info = {'confirm': user.id}
        token = serializer.dumps(info)  # 加密时,加密对象是字典,解密时生成的对象也是字典
        token = token.decode()  # 解密出来的默认为字节形式,解码为 uft-8 格式

        # 发邮件
        send_active_email.delay(email, username,
                                token)  # delay 是任务函数经过装饰后,所拥有的方法
        # 4. 返回应答
        return redirect(reverse('goods:index'))  # reverse 反向解析
Ejemplo n.º 28
0
    def post(self, request):
        """处理注册逻辑,存储注册信息"""
        # 接收用户注册的参数
        user_name = request.POST.get('user_name')
        pwd = request.POST.get('pwd')
        email = request.POST.get('email')
        allow = request.POST.get('allow')

        # 校验用户注册的参数: all()只要有一个数据为空,那么就返回假,只有全部为真,才返回真
        if not all([user_name, pwd, email]):
            # 公司中,根据开发文档实现需求
            return redirect(reverse('users:register'))
        # 判断邮箱格式
        if not re.match(r'^[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': '请勾选用户协议'})

        # 保存用户注册的参数
        try:
            user = User.objects.create_user(user_name, email, pwd)
        except db.IntegrityError:
            return render(request, 'register.html', {'errmsg': '用户已存在'})

        # 重置激活状态:需要使用邮件激活
        user.is_active = False

        # 注意:需要重新保存以下
        user.save()

        # 生成token
        token = user.generate_active_token()

        # 发送激活邮件,不能够阻塞HttpResponse -->异步发送
        # send_active_email(email, user_name, token) # 错误写法,不会粗放异步的send_active_email
        # 正确的写法
        send_active_email.delay(email, user_name, token)

        # from django.core.mail import send_mail
        #
        # subject = "天天生鲜用户激活"  # 标题
        # body = ""   # 文本邮件框
        # sender = settings.EMAIL_FORM   # 发件人
        # receive = [email]   # 收件人
        # html_body = '<h1>尊敬的用户 %s ,感谢您注册天天生鲜!</h1>'\
        #             '<br/><p>请点击此链接激活您的账号<a href="http://127.0.0.1:8000/users/active/%s">'\
        #             'http://127.0.0.1:8000/users/active/%s</a></p>' % (user_name, token, token)
        # send_mail(subject, body, sender, receive, html_message=html_body)

        return redirect(reverse('goods:index'))


# 函数视图
# def register(request):
#     """注册"""
#     if request.method == 'GET':
#         """提供注册页面"""
#         return render(request, 'register.html')
#
#     if request.method == 'POST':
#         """处理注册逻辑,存储注册信息"""
#         return HttpResponse('这里是处理注册的逻辑')
Ejemplo n.º 29
0
    def post(self, request):
        """用户注册校验"""
        register_form = RegisterForm(request.POST)

        if register_form.is_valid():
            # 获取前端数据
            username = register_form.cleaned_data['user_name']
            pwd = register_form.cleaned_data['pwd']
            cpwd = register_form.cleaned_data['cpwd']
            email = register_form.cleaned_data['email']
            allow = request.POST.get('allow')
            # 校验参数是否完整
            if not all([username, pwd, cpwd, email]):

                return render(request,
                              'register.html',
                              context={
                                  'errmsg': '请填写全部',
                                  'register_form': register_form
                              })
            # 校验用户是否存在
            try:
                use = User.objects.get(username=username)
            except Exception as e:
                use = None
            if use:
                return render(request,
                              'register.html',
                              context={
                                  'errmsg': '用户名已存在',
                                  'register_form': register_form
                              })
            # 校验密码是否正确
            if pwd != cpwd:
                return render(request,
                              'register.html',
                              context={
                                  'errmsg': '两次密码不一致',
                                  'register_form': register_form
                              })
            # 校验协议是否勾选
            if allow != 'on':
                return render(request,
                              'register.html',
                              context={
                                  'errmsg': '请勾选协议',
                                  'register_form': register_form
                              })
            # 检查邮箱不能重复
            try:
                user = User.objects.get(email=email)

            except Exception as e:
                user = None
            if user:
                return render(request,
                              'register.html',
                              context={
                                  'errmsg': '邮箱已经被注册',
                                  'register_form': register_form
                              })

            # 创建用户
            user = User.objects.create_user(username=username,
                                            password=pwd,
                                            email=email)
            # 上边的方法会自动将 is_active 改为1 也就是邮箱激活状态, 所以下边需要修改一下
            user.is_active = 0
            user.save()

            # 加密用户信息生成激活token
            serializer = Serializer(SECRET_KEY, 3600)
            info = {'confirm': user.id}
            token = serializer.dumps(info)
            # 获取到的数据是bytes类型的,需要解码
            token = token.decode()

            # 发送邮件
            send_active_email.delay(email, token, user.username)
            return redirect(reverse('user:login'))
        else:
            return render(request,
                          'register.html',
                          context={'register_form': register_form})