用户注册时防止重复邮箱注册:
判断用户输入的邮箱和数据库中的是否存在,如果存在,就返回当前页面,并报错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文件(标红位置):
即可。