9、防止重复注册及找回密码

用户注册时防止重复邮箱注册:

判断用户输入的邮箱和数据库中的是否存在,如果存在,就返回当前页面,并报错msg:用户已存在,并且返回register_form,让html页面可以调用回填用户刚输入的信息;

记得,html页面要调用msg显示报错提示信息:

激活用户时,激活码存在激活用户,

如果不存在,就显示一个静态页面,提示链接失效:

新建一个简单html页面:active_fail.html

如果验证失败,就返回到该页面;

忘记密码:

配置忘记密码页面:

新建html页面;

然后配置urls.py文件:

然后配置view.py文件,定义忘记密码页面逻辑:

如果成功就跳转到新配置的send_success.html,说明您的验证已经发送,可以去邮箱查看了

class ForgetPwdView(View):
    def get(self,request):
        forgetpwd_form = ForgetpwdForm()
        return render(request,'forgetpwd.html',{'forgetpwd_form':forgetpwd_form})
    def post(self,request):
        forgetpwd_form = ForgetpwdForm(request.POST)
        if forgetpwd_form.is_valid():
            email = request.POST.get('email', '')
            if UserProfile.objects.get(email=email):
                send_register_email(email,'forget')

                return render(request,'send_success.html')
        else:
            return render(request,'forgetpwd.html',{'forgetpwd_form':forgetpwd_form})

然后,定义找回密码页的验证码类,在form.py文件:

然后,配置完善html的页面:

建立并配置处理更改密码的方法和url:

添加修改密码的html页面:passwprd_reset.html,用于提交新的密码

配置  验证邮箱验证码的正确性和对应的提交的用户  的方法:

class ResetView(View):
    def get(self, request, active_code):
        # 这里也可以用get方法来代替filter来查询,但是如果get不到数据或多出数据就会抛出异常,而filter查询不到数据,会返回一个空集
        # 且这里获取的是一个字典dict
        all_recode = EmailVerifyRecord.objects.filter(code=active_code)
        # 判断all_recode是否为空,不为空的话
        if all_recode:
            # 遍历获取到的code,存到recode
            for recode in all_recode:
                # 利用recode对应的接受邮箱,找到邮箱对应的用户,这里就可以使用get来获取了,娶不到用户就报错
                email = recode.email
                user = UserProfile.objects.get(email=email)
                # 当code正确,并且利用code也找到用户之后,就可以进行跳转了,这里跳转过去之后,把用户email也带过去,
                return render(request,'password_reset.html',{'email':email})
        else:
            return render(request, 'active_fail.html')
        return render(request, 'login.html', {})

然后配置对应的url:

#导入登录方法类
from users.views import LoginView,RegisterView,ActiveUserView,ForgetPwdView,ResetView

urlpatterns = [
    # path('xadmin/', xadmin.site.urls),
    # path('', TemplateView.as_view(template_name= 'index.html'),name = 'index'),
    # path('login/',LoginView.as_view(),name = 'login'),
    # path('register/',RegisterView.as_view(),name = 'register'),
    # path('captcha/', include('captcha.urls')),
    # path('active/<active_code>', ActiveUserView.as_view(), name = 'user_active'),
    # path('forget/',ForgetPwdView.as_view(),name="forget_pwd"),

    path('reset_pwd/<active_code>',ResetView.as_view(),name='reset_pwd')
]

然后设计密码修改页面的处理方法(view.py):

class ModifyPwdView(View):
    """
    修改用户密码
    """
    def post(self, request):
        # 使用form.py中的ModifyPwdForm类,验证用户提交的数据合法性
        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", "")
            #如果两次密码不一致,就跳转,并报错
            if pwd1 != pwd2:
                return render(request, "password_reset.html", {"email":email, "msg":"密码不一致"})
            # 否则就获取当前邮箱对应的用户,保存并加密新的密码
            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, "password_reset.html", {"email":email, "modify_form":modify_form})

并配置对应form.py的ModifyPwdForm来验证用户提交的数据表单的合法性:

class ModifyPwdForm(forms.Form):
    password1 = forms.CharField(required=True,min_length=5)

    password2 = forms.CharField(required=True,min_length=5)

然后再次配置对应的url:

#导入登录方法类
from users.views import LoginView,RegisterView,ActiveUserView,ForgetPwdView,ResetView,ModifyPwdView

urlpatterns = [
    # path('xadmin/', xadmin.site.urls),
    # path('', TemplateView.as_view(template_name= 'index.html'),name = 'index'),
    # path('login/',LoginView.as_view(),name = 'login'),
    # path('register/',RegisterView.as_view(),name = 'register'),
    # path('captcha/', include('captcha.urls')),
    # path('active/<active_code>', ActiveUserView.as_view(), name = 'user_active'),
    # path('forget/',ForgetPwdView.as_view(),name="forget_pwd"),
    # path('reset_pwd/<active_code>',ResetView.as_view(),name='reset_pwd'),
    path('modify_pwd/',ModifyPwdView.as_view(),name='modify_pwd')
]

最终配置对应的html文件(标红位置):

即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值