1. 程式人生 > >最新Django2.0.1線上教育零基礎到上線教程(六)-11-12

最新Django2.0.1線上教育零基礎到上線教程(六)-11-12

這個6-8對應對應6-11,6-12

拷入forgetpassword頁面

書寫處理忘記密碼的view

users/views.py

# 使用者忘記密碼的處理view
class ForgetPwdView(View):
    # get方法直接返回頁面
    def get(self, request):
        return render(request, "forgetpwd.html", { })

django2.0.1 urls中配置:

    # 忘記密碼
    path('forget/', ForgetPwdView.as_view(), name= "forget_pwd"
)
,

Django1.9.8 urls中配置:

    # 忘記密碼
    url('forget/$', ForgetPwdView.as_view(), name="forget_pwd"),

login html中忘記密碼

mark

配置忘記密碼頁面中靜態檔案。

load static
修改static的目錄
修改其中的url

定義一個給forget的form

users/forms.py:

# 註冊驗證碼實現
class ForgetForm(forms.Form):
    # 此處email與前端name需保持一致。
    email = forms.EmailField(required=True
) # 應用驗證碼 自定義錯誤輸出key必須與異常一樣 captcha = CaptchaField(error_messages={"invalid": u"驗證碼錯誤"})

新增驗證碼

# 使用者忘記密碼的處理view
class ForgetPwdView(View):
    # get方法直接返回頁面
    def get(self, request):
        forget_from = ForgetForm()
        return render(request, "forgetpwd.html", {"forget_from":forget_from })

html中加上驗證碼

mark

post中邏輯

    # post方法實現
    def post(self, request):
        forget_form = ForgetForm(request.POST)
        # form驗證合法情況下取出email
        if forget_form.is_valid():
            email = request.POST.get("email","")
            # 傳送找回密碼郵件
            send_register_eamil(email, "forget")
            # 傳送完畢返回登入頁面並顯示傳送郵件成功。
            return render(request, "login.html", {"msg":"重置密碼郵件已傳送,請注意查收"})
        # 如果表單驗證失敗也就是他驗證碼輸錯等。
        else:
            return render(request, "forgetpwd.html", {"forget_from": forget_form })

郵箱重置密碼郵件傳送

 elif send_type == "forget":
        email_title = "mtianyan慕課小站 找回密碼連結"
        email_body = loader.render_to_string(
            "email_forget.html",  # 需要渲染的html模板
            {
                "active_code": code  # 引數
            }
        )
        msg = EmailMessage(email_title, email_body, EMAIL_FROM, [email])
        msg.content_subtype = "html"
        send_status = msg.send()

mark

前端頁面新增錯誤資訊

已經重複很多遍這個操作了。

mark

mark

mark

上述三圖進行改正,不一一列舉

書寫重置密碼view

# 重置密碼的view
class ResetView(View):
    def get(self, request, active_code):
        # 查詢郵箱驗證記錄是否存在
        all_record = EmailVerifyRecord.objects.filter(code=active_code)
        # 如果不為空也就是有使用者
        active_form = ActiveForm(request.GET)
        if all_record:
            for record in all_record:
                # 獲取到對應的郵箱
                email = record.email
                # 將email傳回來
                return render(request, "password_reset.html", {"email":email})
        # 自己瞎輸的驗證碼
        else:
            return render(
                request, "forgetpwd.html", {
                    "msg": "您的重置密碼連結無效,請重新請求", "active_form": active_form})

配置重置密碼url

# Django1.9.8:
    # 重置密碼urlc :用來接收來自郵箱的重置連結
    url('reset/(?P<active_code>.*)/$', ResetView.as_view(), name="reset_pwd"),
# django2.0.1:

    # 重置密碼urlc :用來接收來自郵箱的重置連結
    re_path('reset/(?P<active_code>.*)/', ResetView.as_view(), name="reset_pwd"),

拷貝進來password reset頁面

mark

新增一個隱藏的input框,以便於我們知道到底是哪個使用者在重置密碼

mark

配置html中三大變化加url配置。

mark

reseturl需要我們傳參進來,但是modify的不需要。
所以url配置和view都得分開。

建立改變密碼的forms:

# 重置密碼form實現
class ModifyPwdForm(forms.Form):
    # 密碼不能小於5位
    password1 = forms.CharField(required=True, min_length=5)
    # 密碼不能小於5位
    password2 = forms.CharField(required=True, min_length=5)

書寫改變密碼的view;

 # 改變密碼的view
class ModifyPwdView(View):
    def post(self, request):
        modiypwd_form = ModifyPwdForm(request.POST)
        if modiypwd_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)
            # save儲存到資料庫
            user.save()
            return render(request, "login.html", {"msg": "密碼修改成功,請登入"})
        # 驗證失敗說明密碼位數不夠。
        else:
            email = request.POST.get("email", "")
            return render(request, "password_reset.html", {"email": email, "modiypwd_form":modiypwd_form})

配置modify的url。

django2.0.1:

    # 修改密碼url; 用於passwordreset頁面提交表單
    path('modify_pwd/', ModifyPwdView.as_view(), name="modify_pwd"),

django1.9.8:

    # 修改密碼url; 用於passwordreset頁面提交表單
    url(r'^modify_pwd/$', ModifyPwdView.as_view(), name="modify_pwd"),

建議自行走一遍註冊,登入,忘記密碼。重置密碼。
錯誤的啟用連結,錯誤的重置連結。值回填,form報錯

更多: 重置密碼連結是否被點選過,過期時間。

對應commit忘記密碼重置功能實現完畢,並進行了必要的測試。對應6-11,6-12

相關推薦

最新Django2.0.1線上教育基礎上線教程-11-12

這個6-8對應對應6-11,6-12 拷入forgetpassword頁面 書寫處理忘記密碼的view users/views.py # 使用者忘記密碼的處理view class ForgetPwdView(View):

最新Django2.0.1線上教育基礎上線教程5-完結

4-5 user modesl.py設計 迴圈引用: 設計app時每個app都有model 如圖:我們在user中定義usercourse記錄使用者學習的課程。會有兩個外來鍵:user和course。 我們就會import Cou

Django2.0.1線上教育基礎上線教程

第二章:在 clould studio上搭建開發環境   建立完成工作空間之後    在線上ide開發有很多好處  當然也有弊端 請忽略!   預設Python用的是 python2.7 的直譯器&nb

基礎學習OpenGL--面剔除

      一個3D的圖形,我們從任意方向同時可以看到的面數是少於圖形的總面數的,如果看不到的面不執行著色,效率會大大提高。OpenGL能夠檢查所有面向觀察者的面,並渲染它們,而丟棄那些背向的面,節省我們很多的片段著色器呼叫。OpenGL區分哪些是正向面哪些是背向面的方

真正基礎學習HTML

html;css一、CSS概念1、需求:設置網頁標簽的樣式:寬、高、背景顏色、位置......用於布局或美化網頁,換句話說就是編寫一套美化模式,應用於各種網頁不用一個一個的編寫2、概念:css 層疊樣式表英文全稱:cascading style sheets瀏覽器解釋語言:讓瀏覽器去執行解釋的語言html c

python爬蟲實踐——基礎快速入門爬取豆瓣電影

爬蟲又稱為網頁蜘蛛,是一種程式或指令碼。 但重點在於,它能夠按照一定的規則,自動獲取網頁資訊。 爬蟲的基本原理——通用框架 1.挑選種子URL; 2.講這些URL放入帶抓取的URL列隊; 3.取出帶抓取的URL,下載並存儲進已下載網頁庫中。此外,講這些URL放入帶抓取UR

node.js基礎學習筆記

註釋:寫完了今天的筆記,今天主要學習了,不同js檔案,如何獲取其他js檔案的方法,一個js方法的匯出另外js檔案對方法的接收(語言敘述可能不準確,就是想說我有一個蘋果你想吃我也願意給你吃,怎麼搞?我要先把蘋果拿出來的過程,和你伸手的過程,我就是一個比喻~可能不太準確,但是我是這麼理解的),以上是第一

node.js基礎學習筆記

開始:一個前端小白接觸node.js,簡單的筆記,筆記的記錄邏輯或許不是太清晰,但是能看懂,或許對node.js的學習不精,也可能有錯誤理解的,第一次接觸,僅供和我一樣零基礎學習node.js的人,會繼續補充新增,謝謝大家~麼麼噠 NodeJS 一、簡介    wha

Python3.0 基礎系列教程目錄

準備寫一篇python的系列教程,目錄暫定如下,如果有更好的建議,麻煩下方留言,如無意外,大約一週2-3篇,敬請期待~ 環境安裝篇 下載並安裝Python3.0 第一個python程式 安裝整合開發環境ide 基礎知識篇 基本資料型別初識

基礎學習OpenGL--高階光照

       之前有講過馮氏光照模型,但他在鏡面反射會在一些情況下出現問題,特別是物體反光度很低時,會導致大片(粗糙的)高光區域。        可以看到,在鏡面高光區域的邊緣出現了一道很明顯的斷層。出現這個問

基礎學習OpenGL--抗鋸齒

        鋸齒邊緣(Jagged Edges)的產生和光柵器將頂點資料轉化為片段的方式有關。這種現象被稱之為走樣(Aliasing)。有很多種抗鋸齒(Anti-aliasing,也被稱為反走樣)的技術能夠幫助我們緩解這種現象,從而產生更平滑邊緣。 &

基礎學習OpenGL--立方體貼圖、天空盒、環境對映

                                          &nb

基礎學習OpenGL--幀緩衝、後處理

       用於寫入顏色值的顏色緩衝、用於寫入深度資訊的深度緩衝和允許我們根據一些條件丟棄特定片段的模板緩衝。這些緩衝結合起來叫做幀緩衝(Framebuffer),它被儲存在記憶體中。OpenGL允許我們定義我們自己的幀緩衝,也就是說我們能夠定義我們自己的顏

基礎學習OpenGL--混合

        OpenGL中,混合用來實現物體透明度。透明就是說一個物體的顏色是物體本身的顏色和它背後其它物體的顏色的不同強度結合。一個物體的透明度是通過它顏色的aplha值來決定的。         想載入有al

基礎學習OpenGL--模板測試

       模板測試在深度測試之前。當片段著色器處理完一個片段後,模板測試會開始執行,被保留下來的才會進入深度測試。模板測試對應模板緩衝。        模板緩衝:每個模板值8位表示,這樣每個片段就有2的8次方,2

基礎學習OpenGL--深度測試

       深度緩衝:在每個片段中儲存了資訊,以16、24、32位float的形式儲存它的深度值。(片段著色器執行之後,在螢幕空間中執行。)        當深度測試啟用,OpenGL會將一個片段的深度值和深度緩衝

基礎學習OpenGL--材質、光照貼圖

         接上節:         我們給物體定義了一個材質的屬性,這裡包含了 環境光照(Ambient Lighting),漫反射光照(Diffuse Lighting),鏡面光照(Specula

基礎學習OpenGL--光照

       序:今天開始主要寫寫OpenGL,順帶寫寫其他的Unity,C#,Shader,優化等。這個系列參考自https://learnopengl-cn.github.io,作者不詳,系翻譯了經典的OpenGL教程,講的通俗易懂,大家可以參考一下。所以

Spark (Python版) 基礎學習筆記—— 快速入門

由於Scala才剛剛開始學習,還是對python更為熟悉,因此在這記錄一下自己的學習過程,主要內容來自於spark的官方幫助文件,這一節的地址為: 文章主要是翻譯了文件的內容,但也在裡邊加入了一些自己在實際操作中遇到的問題及解決的方案,和一些補充的小知識,一起學習。 環境

基於IMOOC強力django+殺手級xadmin 打造上線標準的線上教育平臺課程的學習15——xadmin的擴充套件

應該是 use_bootswacth 首頁多了一個主題設定按鈕: 可以選擇不同的主題: import xadmin from xadmin import views from