Django驗證用戶登陸(同時適用於用戶名和密碼登陸)

#settings.py
AUTHENTICATION_BACKENDS = ['django.contrib.auth.backends.ModelBackend']

Django默認的驗證方法(不需要註明),這種方法一般只適用於用戶名和密碼登陸

如果自己想要使用戶可以以用戶名、密碼組合登陸也可以用郵箱、密碼登陸則需要自定義用戶的驗證函數

#views.py
from django.db.models import Q
from django.contrib.auth.backends import ModelBackend

#自定義用戶驗證函數,實現郵箱或用戶名都能登陸
class MyBackend(ModelBackend):
    def authenticate(self,username=None,password=None,**kwargs):
        try:
            user = UserProfile.objects.get(Q(username=username)|Q(email=username))
            if user.check_password(password):
                return user
        except Exception as e:
            return None

對應的settings.py需改寫爲:

#settings.py
AUTHENTICATION_BACKENDS = ('app.views.MyBackend',)

處理函數爲:

#views.py
from django.views.generic.base import View
from django.contrib.auth import authenticate,login
from .forms import LoginForm
from django.shortcuts import render
from django.http import HttpResponseRedirect

class LoginView(View):
    def get(self,request):
        return render(request, 'login.html')
    def post(self,request):
        login_form = LoginForm(request.POST)
        if login_form.is_valid():
            user_name = request.POST.get('username','')
            password = request.POST.get('password','')

            #與數據庫中的用戶進行比對
            #上面已經地authenticate進行了重寫 若成功則返回user
            user = authenticate(request,username=user_name,password=password)
            if user is not None:
                if user.is_active:
                    login(request, user)
                    return HttpResponseRedirect(reverse('main'))
            return render(request, 'login.html', {'msg': '用戶名或密碼錯誤!'})
        else:
            print(login_form.errors)
        return render(request,'login.html',{'msg':'用戶名或密碼錯誤!'})

在和models.py相同的目錄中新建forms.py用來設置登陸用到的表單

# -*- coding:utf-8 -*-
from django import forms

class LoginForm(forms.Form):
    username = forms.CharField(required=True,error_messages={'required':'用戶名不能爲空',})
    password = forms.CharField(required=True,error_messages={'required':'密碼不能爲空',})



發佈了28 篇原創文章 · 獲贊 26 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章