用戶登陸機制(找回密碼)

用戶登陸機制(找回密碼)

1、渲染過程

1.urls.py文件html

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url('^$',TemplateView.as_view(template_name="index.html"),name='index'),
    url(r'^login/$',views.User_login.as_view(),name='login' ),
    url(r'^reg/$',views.User_reg.as_view(),name='reg' ),
    url(r'^active/(?P<acctive_code>.*)/$',views.AciveUserView.as_view(),name='user_active'),
    url(r'^forget/$',views.ForgetPwdView.as_view(),name='forget_pwd'), #用戶忘記密碼url
]

2.forms.py文件前端

class ForgetForm(forms.Form):

    email = forms.EmailField(required=True)
    captcha = CaptchaField(error_messages={"invalid":"驗證碼錯誤"})  #直接引用

3.views.py文件dom

class ForgetPwdView(View):
    def get(self,request):
        forget_form = forms.ForgetForm()
        return  render(request,'forgetpwd.html',{"forget_form":forget_form})

4.前端渲染的效果如圖所示函數

2、重置過程

1.email_send.py文件post

def random_str(randomlength=8):
    str = ''
    chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz123456789'
    lengh = len(chars) - 1
    random = Random()
    for i in range(randomlength):
        str+=chars[random.randint(0,lengh)]
    return str
def send_register_email(email,send_type="register"):
    print("進去郵箱")
    email_record = EmailVerifyRecord()
    code =random_str(16)
    email_record.code = code
    email_record.email =email
    email_record.send_type = send_type
    email_record.save()

    ###發送郵件###
    email_title = "" #郵件的title
    email_body = "" #郵件的正文

    if send_type == "register":

        email_title = "蘋果官網註冊激活連接"
        email_body = "請點擊下面的連接激活你的帳號:http://127.0.0.1:8000/active/{0}".format(code)

        send_status = send_mail(email_title,email_body,EMAIL_FROM,[email])
        if send_status:
            pass
    elif send_type == "forget":  #用戶忘記密碼
        email_title = "蘋果官網重置密碼連接"
        email_body = "請點擊下面的連接重置你的密碼:http://127.0.0.1:8000/reset/{0}".format(code)
        send_status = send_mail(email_title,email_body,EMAIL_FROM,[email])
        if send_status:
            pass

2.views.py文件ui

class ForgetPwdView(View):
    def get(self,request):
        forget_form = forms.ForgetForm()
        return  render(request,'forgetpwd.html',{"forget_form":forget_form})
    def post(self,request):
        forget_form = forms.ForgetForm(request.POST)
        if forget_form.is_valid():
            email = request.POST.get("email",'')
            send_register_email(email,'forget')  #發送重置密碼郵件
            return render(request,'send_success.html') #該頁面用於提示用戶郵件發送成功
        else:
            return  render(request,'forgetpwd.html',{"forget_form":forget_form})

###用來驗證郵箱後處理的視圖函數####


class ResetView(View):
    def get(self,request,active_code):
        all_records = models.EmailVerifyRecord.objects.filter(code=active_code)
        if all_records:
            for record in all_records:
                email = record.email  #查找到驗證碼
                return render(request,'pasword_reset.html',{"email":email}) #傳email的能夠判斷是哪一個用戶重置密碼須要在前端渲染一個隱藏的input框

        return render(request,'login.html')

####post提交####

class ModifypwdView(View):
    def post(self,request):
        modify_form = forms.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 = models.Userinfo.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})

3.urls.py文件url

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url('^$',TemplateView.as_view(template_name="index.html"),name='index'),
    url(r'^login/$',views.User_login.as_view(),name='login' ),
    url(r'^reg/$',views.User_reg.as_view(),name='reg' ),
    url(r'^active/(?P<acctive_code>.*)/$',views.AciveUserView.as_view(),name='user_active'),
    url(r'^forget/$',views.ForgetPwdView.as_view(),name='forget_pwd'), #用戶忘記密碼url
    url(r'^reset/(?P<acctive_code>.*)/$',views.AciveUserView.as_view(),name='user_reset'), #用來處理郵箱驗證後的重置url
    url(r'^modify_pwd/$',views.ModifyPwdView.as_view(),name='modify_pwd')  #用來處理郵箱驗證中的POST提交的url
]

4.前端頁面code

前端頁面須要注意的urlorm

相關文章
相關標籤/搜索