日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django 重写authenticate实现输入账号、邮箱、手机号登录验证

發布時間:2023/12/8 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django 重写authenticate实现输入账号、邮箱、手机号登录验证 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
介紹

authenticate原本是賬號和密碼登錄,在密碼對給出的用戶名合法的情況下返回一個 User 對象。 如果密碼不合法,authenticate()返回None。重寫該方法后,實現輸入賬號、郵箱、手機號等多種方式登錄驗證。
需要注意的是在重寫authenticate時,要加入request:

def authenticate(self, request, username=None, password=None, **kwargs)
Code
views
class LoginView(View):# 直接調用get方法免去判斷def get(self, request):# render就是渲染html返回用戶# render三變量: request 模板名稱 一個字典寫明傳給前端的值redirect_url = request.GET.get('next', '')return render(request, "login.html", {"redirect_url": redirect_url})def post(self, request):# 類實例化需要一個字典參數dict:request.POST就是一個QueryDict所以直接傳入# POST中的usernamepassword,會對應到form中login_form = LoginForm(request.POST)# is_valid判斷我們字段是否有錯執行我們原有邏輯,驗證失敗跳回login頁面if login_form.is_valid():# 取不到時為空,username,password為前端頁面name值user_name = request.POST.get("username", "")pass_word = request.POST.get("password", "")# 成功返回user對象,失敗返回nulluser = authenticate(request, username=user_name, password=pass_word)# 如果不是null說明驗證成功if user is not None:# 只有當用戶激活時才給登錄if user.is_active:# login_in 兩參數:request, user# 實際是對request寫了一部分東西進去,然后在render的時候:# request是要render回去的。這些信息也就隨著返回瀏覽器。完成登錄login(request, user)# 跳轉到首頁 user request會被帶回到首頁# 增加重定向回原網頁。redirect_url = request.POST.get('next', '')if redirect_url:return HttpResponseRedirect(redirect_url)# 跳轉到首頁 user request會被帶回到首頁return HttpResponseRedirect(reverse("index"))# 即用戶未激活跳轉登錄,提示未激活else:return render(request, "login.html", {"msg": "用戶名未激活! 請前往郵箱進行激活"})# 僅當用戶真的密碼出錯時else:return render(request, "login.html", {"msg": "用戶名或密碼錯誤!"})# 驗證不成功跳回登錄頁面# 沒有成功說明里面的值是None,并再次跳轉回主頁面else:return render(request, "login.html", {"login_form": login_form})
settings
# Application definition 注冊我們的app # 設置郵箱和用戶名均可登錄 AUTHENTICATION_BACKENDS = ('users.views.CustomBackend', )
views
class CustomBackend(ModelBackend):"""實現用戶名郵箱均可登錄繼承ModelBackend類,因為它有方法authenticate,可點進源碼查看"""def authenticate(self, request, username=None, password=None, **kwargs):try:# 不希望用戶存在兩個,get只能有一個。兩個是get失敗的一種原因 Q為使用并集查詢user = UserProfile.objects.get(Q(username=username) | Q(email=username) | Q(mobile=username))# django的后臺中密碼加密:所以不能password==password# UserProfile繼承的AbstractUser中有def check_password(self,# raw_password):# if user.check_password(password):return userexcept Exception as e:return None

總結

以上是生活随笔為你收集整理的Django 重写authenticate实现输入账号、邮箱、手机号登录验证的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。