1. 程式人生 > >10-郵箱註冊登錄文字總結 | Django

10-郵箱註冊登錄文字總結 | Django

重置 三方 有一個 自己 中心 鏈接 blog set register

# 郵箱註冊登錄流程
    首先,需要新建一個users應用,來處理用戶相關操作,包括登錄註冊等權限操作,
以及用戶中心的相關操作;然而,django自帶的user表中可能不足以滿足我們項目所需要
的字段,所以需要重載django內置的User表,需要建立一個模型類UserProfile,繼承
auth.models下的AbstractUser類,自己再添一些需要的字段,最重要的是要在settings.py
文件中添加配置,AUTH_USER_MODEL="users.UserProfile"(應用名+模型類),再遷移生成數
據庫表;

    接著,郵箱註冊;
    最重要的是郵箱激活(is_active):在後臺生成若幹個隨機字符code,保存到數據庫表中,並且將code
格式化輸出到郵件內容中,發送給用戶點擊激活;如何做到在郵箱中點擊激活這個code呢?
    
1.設置urlconf,url(r^active/(?P<active_code>.*), RegisterView.as_view(), name=註冊), 那麽,我們在發送郵件的內容中就需要添加這樣式的激活鏈接: 點擊激活:http://127.0.0.1:8000/active/...,在用戶點擊跳轉這個鏈接的時候,後端urlonf 就會將active_code當作參數傳到對應的視圖類中,通過傳入的激活碼,在EmailVerify表中查找 對應的郵箱,通過郵箱找到User表中的is_active字段,並修改;從而實現激活狀態; 2.發送郵箱的過程;通過django自帶的mail模塊中的send_mail()或者send_mass_masil()函數來實現; django後端默認的backend是smtp服務,所以只要在第三方郵箱入口打開smtp服務,在settings.py 文件中添加一些配置,就可以通過一個郵箱發送的函數來發送激活郵件,主要的參數是title,body 以及誰發的郵件,和對方的郵件列表;這裏需要註意的是,需要傳入一個發送目的,比如註冊發送, 修改密碼發送等;那麽構造的發送郵件的函數就可以自己判斷,從而對不同用戶操作,發出不同的內容 的郵件;
3.當然所有form表單提交視圖操作都需要創建一個form來驗證字段,驗證通過後再做郵箱發送操作; 4.判斷用戶名是否已經存在;在表單中獲取用戶名(郵箱)之後,需要先對郵箱是否存在進行判斷; 接著,登錄; 通過django內置的authenticate()方法與login()方法來實現用戶登錄; 1.form表單驗證; 2.將POST中獲取提交的數據,通過authenticate()方法來認證用戶名與密碼; 這裏需要註意的是,這次登錄時通過郵箱的,那麽網站可以還有手機註冊的用戶, 我們是通過email或者tel來保存的,並不是username;所以,登錄的時候,需要 做一個
的操作;但是,django的authenticate()只對用戶名密碼進行驗證,就 需要自定義authenticate()這個認證方法了: authenticate()內部先通過用戶名查找到user對象,再通過check_password()檢驗這個對 象密碼是否存在,最後返回一個user; 所以,我們需要對用戶查找user對象這個步驟做操作,利用Q使得查詢條件: Q(username=username)|Q(email=username)表示輸入的用戶名可以在username字段中找到, 或者在email字段中找到即可; 自定義authenticate()需要重載settings.py中的AUTHENTICATION_BACKENDS變量, 構造的CustomBackend需要繼承ModelBackend這個類; 3.認證通過後login()登錄; 最後,找回密碼; 1.點擊login.html頁面的找回密碼的鏈接,跳轉到輸入用戶名與驗證碼的頁面(需要表單驗證), 表單驗證通過之後,發送重置碼reset_code到郵箱,通過urlconf攜帶的參數傳給重置密碼 視圖類; 2.上面表單提交之後跳轉重置密碼頁面,包含pwd1與pwd2兩個字段,這個跳轉過程用get()來處理; 但是,當前頁面的表單提交的action就不能用同樣的視圖類了,因為get()需要接受一個重置碼, action={% url .. ...code??? %} 所以,我們重新寫一個重置密碼的視圖類,通過post()來處理表單; 又有一個問題,當前表單的驗證只有pwd1與pwd2兩個字段,沒法獲取user對象進行操作; 3.在get()方法中傳一個email的值作為上下文傳到前端去,寫到一個隱藏的input框中; 那麽post()就可以從input框中獲取email值,從而獲取user對象了;

10-郵箱註冊登錄文字總結 | Django