【小白实战】利用django2.0,搭建属于自己的博客(22)


发布时间:2019-02-15 13:08    作者: Uncle Hui   已过去:1 年,3 月   阅读总量:294 已被赞:0


【忘记密码,通过邮件修改密码功能的实现】

1.发送邮件的email_send.py:添加发送模块

if send_type == "forget":
    email_title = "晖哥哥博客找回密码链接"
    email_body = "请点击下面的链接修改你密码(本链接30分钟内有效!): http://127.0.0.1:8000/user/reset/{0}".format(code)

    # 使用Django内置函数完成邮件发送。四个参数:主题,邮件内容,从哪里发,接受者list
    send_status = send_mail(email_title, email_body, EMAIL_FROM, [email])
    # 如果发送成功
    if send_status:
        pass

2.user/views.py 里新建申请修改密码的视图

创建申请找回密码的路由
#邮箱找回密码
def setpassword(request):
    # 如果是POST提交
    if request.method == 'POST':
        # 将需要的字段提取出来
        emails = request.POST['email']
        #验证注册表里是不是有这个邮箱
        user_email = User.objects.filter(email=emails).first()
        # 把邮箱写进表里,并启动发送邮箱验证码程序
        if user_email:
            send_register_eamil(emails, 'forget')
            context = {
                'message': "密码修改链接已经发送到%s请前往邮箱获取地址(24小时内有效)" % emails
                }
            return render(request, 'user/forget.html', context)
        else:
            context = {
                    'message': "你的邮箱%s有误或没有注册过,请直接前往注册" % emails
                }
            return render(request, 'user/forget.html', context)
    else:
        email_form = EmailForm()
        context = {
            'message': email_form.errors
        }
        return render(request, 'user/forget.html', context)

3.前端页面的建立

forget.html

4.路由:

path('forget_email/', setpassword, name='forget_email'),#通过这个发送邮件给用户

5.修改视图的建立

#找回密码的处理视图
def new_password(request,code):
    if request.method == 'POST':
        #交于表单验证
        new_paw = NewpasswordForm(request.POST)
        #验证通过,就获取出邮箱和密码
        if new_paw.is_valid():
            email = new_paw.cleaned_data['email']
            password = new_paw.cleaned_data['password']
        #找到这个用户
            try:
                user = User.objects.get(email=email)
                user.password = password
                #跳转,让用户去登录
                return redirect(reverse('login'))
            except:
                return HttpResponse('用户不存在,请核查')
        else:
            return HttpResponse('验证不通过!请按要求填入各项信息')

    else:
        #获取当前时间
        today = datetime.datetime.now()
        # 如果验证码距离今天的日期超过30分,就视为链接过期,要求其重新获取
        try:
            today_s = today - datetime.timedelta(minutes=30)
        # 查询验证码创建的时间
            code_time = EmailVerifyRecord.objects.get(code=code)
            if code_time.send_time >= today_s :
                reg_form = NewpasswordForm(initial={'email':code_time.email})
                return render(request, 'user/forget2.html', {'reg_form': reg_form})
        except:
            return render(request,'user/xiugai_guoqi.html')

6.修改页面的建立

forget2.html

7.过期页面的建立,这些都和注册时一样的代码

xiugai_guoqi.html

8.url.py

path('reset/<code>', new_password, name='forget_reset'),#通过这个展示修改密码页面

点赞

0




登陆后方可评论