專案工作中,有時候的登入方式不僅僅限於使用使用者名稱登入,有時候客戶還會要求進行郵箱或手機號進行登入。
接下來我們就一起看看是怎麼實現的吧!
1、首先我們需要在我們的配置檔案中新增上以下**(指定後端認證):
authentication_backends = (
'django.contrib.auth.backends.modelbackend',
)
2、接下來我們就要自己重新定義認證的方法啦:
我這裡給使用者新增了新的字段
from django.db import models
from django.contrib.auth.models import abstractuser, group, permission, user
# 使用者
class user(abstractuser):
phone_number = models.charfield(max_length=40, blank=false, null=true, verbose_name=u'手機號')
qq_number = models.charfield(max_length=40, blank=false, null=true, verbose_name=u'qq號')
class meta:
managed = true
db_table = 'auth_user'
view中重新寫認證方法
from django.contrib.auth.backends import modelbackend
from system.models import user # 為自己定義新增的
# 重寫登入驗證方法,支援賬戶名和郵箱登入,可擴充套件其他登入
class custombackend(modelbackend):
def authenticate(self, request, username=none, password=none):
try:
user = user.objects.get(q(username=username) | q(email=username))
if user.check_password(password):
return user
except exception as e:
return none
接下來在登入的時候,加入自定義的認證方法
def system_login(request):
if request.method == "post":
login_form = loginform(request.post)
if login_form.is_valid():
username = login_form.cleaned_data['username']
password = login_form.cleaned_data['password']
authentication = custombackend()
user = authentication.authenticate(request, username=username, password=password) # 驗證user
if user is not none:
if user.is_active:
user.backend = 'django.contrib.auth.backends.modelbackend' # 給user手動新增backend
auth.login(request, user) # 登入
errmsg = "使用者未啟用,請啟用後重新登入。"
return render(request, "system/login.html", locals())
else:
errmsg = "賬號密碼資訊有誤,請重新輸入。"
return render(request, "system/login.html", locals())
else:
return render(request, "system/login.html")
else:
return render(request, "system/login.html")
切記一定要手動新增backend方法哦
到此,使用者既可以通過使用者名稱登入又可以通過郵箱登入啦,需要的小可愛們,動手試試吧!
django實現利用mailgun進行收發郵件
def email request if request.method post form contactform request.post 獲取post表單 if form.is valid message 感謝你的來信,我們會盡快回覆你 user name form.cleaned data u...
Django使用郵箱進行驗證操作的實現方法
其實驗證方法比較簡單,只需要傳送指定的鏈結給目標郵箱,使用者點選鏈結即可通過驗證,但是合成和驗證這個指定的鏈結需要我們來處理,我用到的方法是,當使用者申請郵箱驗證的時候根據其郵箱位址和乙個32位隨機驗證碼去合成乙個連線,當正常訪問的使用後台可通過url獲取郵箱名以及驗證碼,再根據這兩個值去資料庫中匹...
Django基於cookies實現完整登入
django admin startproject mysite建立完成後目錄構如下 開啟mysite mysite settings.py檔案,將應用新增進去 django.contrib.admin django.contrib.auth django.contrib.contenttypes ...