1、在目录下创建utils.py
默认的仍整系统后端类是ModelBackend,如果要修改django默认的认证系统后端类,需继承这个类,然后重写他的authenticate方法
import re
from django.contrib.auth.backends import ModelBackend
from .models import User
def get_user_by_account(account):
"""
通过账号获取用户
:param account: 用户名或者手机号
:return: user
"""
try:
if re.match(r'^1[3-9]\d{9}$', account):
# account == 手机号
user = User.objects.get(mobile=account)
else:
# account == 用户名
user = User.objects.get(username=account)
except User.DoesNotExist:
return None
else:
return user
class UsernameMobileBackend(ModelBackend):
"""自定义用户认证后端"""
def authenticate(self, request, username=None, password=None, **kwargs):
"""
重写用户认证的方法
:param username: 用户名或手机号
:param password: 密码明文
:param kwargs: 额外参数
:return: user
"""
# 查询用户
user = get_user_by_account(username)
# 如果可以查询到用户,好需要校验密码是否正确
if user and user.check_password(password):
# 返回user
return user
else:
return None
2、在 setting中配置指定自定义的用户认证后端
AUTHENTICATION_BACKENDS = ['users.utils.UsernameMobileAuthBackend']