text: import re
  from django.contrib.auth.backends import ModelBackend
  
  from users.models import User
  
  
  def get_user_by_account(account):
      """
      判断username是手机号还是用户名
      :param account: 用户名或者手机号
      :return: user
      """
      try:
  
          if re.match(r'^1[3-9]\d{9}$', account):
              # 根据手机号获取这行数据的对象
              user = User.objects.get(mobile=account)
          else:
              # 根据用户名获取这行数据的对象
              user = User.objects.get(username=account)
      except User.DoesNotExist:
          return None
      else:
          return user
  
  
  class UsernameMobileAuthBackend(ModelBackend):
      """自定义用户认证后端"""
  
      def authenticate(self, request, username=None, password=None, **kwargs):
          """
          重写认证方法,实现用户名和mobile登录功能
          :param request: 请求对象
          :param username: 用户名
          :param password: 密码
          :param kwargs: 其他参数
          :return: user
          """
          # 自定义验证用户是否存在的函数:
          # 根据传入的username 获取user对象
          # username可以是手机号也可以是账号
          user = get_user_by_account(username)
          # 根据行对象来判断是否存在并校验密码是否正确,通过django自带的user,check_password()方法
          if user and user.check_password(password):
              return user
  