django2实现邮箱找回密码

一。前端页面
在这里插入图片描述
(1)点击忘记密码会跳到
在这里插入图片描述
(2)点击发送邮件后会收到重置密码的邮箱链接
在这里插入图片描述

(3)访问该链接重置密码,修改成功后会重定向到login页面
在这里插入图片描述
(4)form表单

class   ForgetForm(forms.Form):
    email = forms.EmailField(required=True, label='邮箱', widget=forms.TextInput(
        attrs={"class": "form-control", "placeholder": "请输入邮箱账号", "value": ""}),
                             max_length=100, error_messages={"required": "邮箱不能为空", "invalid": ""})
    newpwd = forms.CharField(required=True, label='新密码', widget=forms.PasswordInput(
        attrs={"placeholder": "请输入新密码"}
    ))
    repwd = forms.CharField(required=True, label='新密码', widget=forms.PasswordInput(
        attrs={"placeholder": "请输入新密码"}

(5)前端代码
邮件发送页面:

                   <form   action="{{ forgetemail }}" method="post">
                            {% csrf_token %}

						    {{ form.email }}
                            <button type="submit">发送邮箱验证</button>
                    </form>

密码重置页面:

                   <form   action="{{ repasswd }}" method="post">
                            {% csrf_token %}

						    {{ form.newpwd }}
                            {{ form.repwd  }}
                            <button type="submit">重置密码</button>
                    </form>

二。后端views+sendemail

sendmail.py

def code_RQ(codelength=8):
    code=''
    str='AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789'
    str_len=len(str)-1
    for i  in  range(codelength):
        code+=str[random.randint(0,str_len)]
    return code
# print(code())

##发送邮件

    def send_register_email(email,send_type):
        # 实例化models的邮箱验证模块
        email_record=EmailRecord()
        ##将给用户发送的信息保存到数据库中
        ##实例化验证码模块
        code=code_RQ()
        email_record.code=code
        email_record.email=email
        email_record.send_type=send_type
        email_record.save()
        ##邮件内容
        ##判断发送邮件的类型
        if  send_type ==  'register':
            title='注册链接'
            body='请点击下面链接激活账号:http://127.0.0.1:8000/active/%s' %code
            ##发送邮件
            """
            subject, message, from_email, recipient_list,
                  fail_silently=False, auth_user=None, auth_password=None,
                  connection=None, html_message=None
            主题 ,信息,发件人,收件人列表
            """
            send_status=send_mail(title,body,EMAIL_FROM,[email])
            if send_status:
                print('注册邮件发送成功')
                ##返回验证码
                # return code
        else:
            title='邮箱验证链接'
            body='请点击下面链接重置密码:http://127.0.0.1:8000/repasswd/%s' %code
            send_status=send_mail(title,body,EMAIL_FROM,[email])
            if send_status:
                print('邮箱验证码发送成功')

views

##忘记密码
from index.send import send_register_email
##发送邮箱验证码
@login_required(login_url='login/')
def pwdforget(request):
    form=ForgetForm(request.POST)
    if  request.method =='POST':
        form = ForgetForm(request.POST)
        email = request.POST.get('email')
        print(email)
        user_email = User.objects.filter(email=email)
        print(user_email)
        if  user_email:
            send_register_email(email,"forget")

    return render(request,'forgetpwd.html',locals())
##重置密码
@login_required(login_url='login/')
def repasswd(request,repwd_code):
    if  request.method=='POST':
        form = ForgetForm(request.POST)
        newpwd = request.POST.get('newpwd')
        repwd = request.POST.get('repwd')
        all_record = EmailRecord.objects.filter(code=repwd_code)
        if all_record:
            for cord in all_record:
                ##通过这个邮箱验证码找到EmailRecord的email
                email = cord.email
                if newpwd == repwd:
                    ##获取该email所有字段信息
                    change_pwd = User.objects.get(email=email)
                    ##修改新的密码(passwd字段)
                    change_pwd.passwd = make_password(newpwd)
                    change_pwd.save()
                    messages.success(request, '密码修改成功')
                    #修改成功的重定向到login
                    return redirect(reverse('login'))  ##locals()显示当前函数所有局部变量
                else:
                    messages.warning(request, '两次密码不一致')
    else:
        form = ForgetForm()
        return render(request,'repasswd.html',locals())

三。urls

##发送邮件
path('pwdforget/',views.pwdforget,name='pwdforget'),
##重置密码(接受邮件中url的参数)
path('repasswd/<str:repwd_code>',views.repasswd,name='repasswd')
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值