亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Django自定義用戶登錄認證示例代碼

發布時間:2020-09-04 19:39:31 來源:腳本之家 閱讀:134 作者:Conamore 欄目:開發技術

前言

有時候 Django 自帶的用戶登錄認證不能滿足我們的需求,比如我不想要用戶名+密碼登錄,我想手機號+驗證碼登錄,這樣就需要我們去修改 Django 自帶的認證了。

Django 默認使用用戶認證的是ModelBackend,這個類也就是我們要下手的地方,ModelBackend里面有一個authenticate的方法,這個方法就是登錄時對用戶認證的方法。我們要改的就是這個方法。

先看看原碼理解一下認證邏輯:

Django自定義用戶登錄認證示例代碼

第15-16行先獲取認證用的用戶名字段,默認是username,如果在Usermodel里面重新定義了USERNAME_FIELD,如改為USERNAME_FIELD = 'mobile',那么現在就是以手機號來登錄了。

第18-22行就是根據 username 去獲取 user 對象,如果沒有這個 user 就做一次密碼 hasher (不太理解這里的作用,不過不影響修改),然后就退出方法了。

第24-25行就是獲取到用戶后,驗證用戶傳過來的密碼跟數據庫里的是否一致并且該用戶是否有登錄權限,驗證都通過后就把 user 返回去,否則退出返回,不返回任何東西。

明白了認證的邏輯,就開始修改了,首先新建一個類,繼承ModelBackend,然后重寫authenticate方法,比如上面提到的改為手機號+驗證碼的方式,只要改成如下:

Django自定義用戶登錄認證示例代碼

只是稍微的做了點修改,把第24行里的密碼驗證改為了驗證碼驗證,這里password 字段用于存放驗證碼,而不再是用戶的密碼了。其它的邏輯都沒變。

這里改了之后,要在Usermodel 里加上check_verify_code這個方法,否則會報錯,還要修改類變量USERNAME_FIELD = 'mobile',不然還是會以username來認證,具體的實現邏輯根據自己的實際情況來,這里就不展示里面的邏輯。

好,用戶的認證改好了,還有最重要的一步,在settings.py里添加一條這樣的配置:

AUTHENTICATION_BACKENDS = ['common.backends.CustomModelBackends']  # 里面改成自己寫的認證類。格式必須是 包名.文件名.類名

到此就完成了。

總結:(以手機號+驗證碼為例)

  1. 新建一個 CustomModelBackend 類,重寫 authenticate 方法,根據自己實際需求寫認證邏輯。
  2. 在Usermodel里添加驗證驗證碼的方法。
  3. 在Usermodel里改變類變量USERNAME_FIELD為mobile。
  4. 在在settings.py里添加一條配置:

AUTHENTICATION_BACKENDS = ['common.backends.CustomModelBackends']

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大化| 济源市| 应城市| 乌兰浩特市| 临颍县| 临汾市| 教育| 龙门县| 宝丰县| 西藏| 东丰县| 探索| 黄石市| 巩留县| 平湖市| 尼木县| 肇源县| 威海市| 平远县| 仁怀市| 雷波县| 石阡县| 德庆县| 荆门市| 长乐市| 胶南市| 鄂伦春自治旗| 九龙县| 连平县| 涡阳县| 伊金霍洛旗| 宿迁市| 井陉县| 万山特区| 新密市| 阿鲁科尔沁旗| 大名县| 梁平县| 武安市| 东兴市| 堆龙德庆县|