1. 程式人生 > >[py][mx]django通過郵箱找回密碼

[py][mx]django通過郵箱找回密碼

代碼 地址 技術 make .html pass word bubuko 重置

忘記密碼處理流程

技術分享圖片

直接上代碼

class ActiveView(View):  # 主要功能是修改user_profile裏的is_active字段為1
    def get(self, request, active_code):
        all_reocrds = EmailVerifyRecord.objects.filter(code=active_code)
        if all_reocrds:
            for record in all_reocrds:
                email = record.email
                user = UserProfile.objects.get(email=email)
                user.is_active = True
                user.save()
        else:  # 如果激活鏈接不存在,則返回激活失敗
            return render(request, "active_faild.html")
        return render(request, 'login.html')


class ForgetPwdView(View):
    def get(self, request):
        forget_form = ForgetPwdForm()  # 返回驗證碼form
        return render(request, 'forget_pwd.html', {'forget_form': forget_form})

    def post(self, request):
        forget_form = ForgetPwdForm(request.POST)
        if forget_form.is_valid():  # 驗證email是否有效
            email = request.POST.get('email', '')
            if UserProfile.objects.get(email=email):  # 判斷用戶是否存在,然後發郵件
                send_register_email(email, "forget")
                return HttpResponse("重置密碼鏈接已發送到您的郵箱,請查收後點擊重置.")
            else:
                return render(request, 'forget_pwd.html', {'msg': '用戶不存在', 'forget_form': forget_form})


class ResetPwdView(View):
    def get(self, request, active_code):
        all_reocrds = EmailVerifyRecord.objects.filter(code=active_code)
        if all_reocrds:  # 如果鏈接有效
            for record in all_reocrds:
                email = record.email  # 得到email, emailsendrecord表中有對應的
                return render(request, 'reset_password.html', {'email': email})  # 將email帶回, post到這個view: modify_pwd
        else:
            return HttpResponse("鏈接已失效...")

# ResetPwdView的post獨立到ModifyPwdView裏, 因為ResetPwdView post地址不好獲取code
class ModifyPwdView(View):
    def post(self, request):
        modify_form = ModifyPwdForm(request.POST)
        if modify_form.is_valid():
            pwd1 = request.POST.get('password1', '')
            pwd2 = request.POST.get('password2', '')
            email = request.POST.get('email', '')#取出email,定位哪個用戶
            if pwd1 != pwd2:  # 如果密碼不一致, 則返回
                return render(request, 'reset_password.html', {'msg': '密碼不一致', 'email': email})
            user = UserProfile.objects.get(email=email)
            user.password = make_password(pwd2)
            user.save()
            return render(request, 'login.html')
        else:
            email = request.POST.get('email', '')
            return render(request, 'reset_password.html', {'email': email, 'modify_form': modify_form})

處理邏輯

技術分享圖片

技術分享圖片

[py][mx]django通過郵箱找回密碼