A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© gamadi 初级黑马   /  2019-5-31 18:55  /  774 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

### 多账号登录

#### 1.改写authenticate的判定方式(自定义认证后端)

- 在utils包中,新定义authenticate模块

  - 新建验证类继承class MeiduoModelBackend(ModelBackend):

    ```python
    from django.contrib.auth.backend import ModelBackend   #导入原authenticate方法所属类
    import users.models import User# 导入所建模型类(创建的数据库表类用于提取字段内容进行对比
    import re   # 导入正则表达式,用于匹配传入的username格式
   
    class MeiduoModelBackend(ModelBackend):
            def authenticate(self, request, username=None, password=None, **kwargs)
            # 变量username的值,可以是用户名,也可以是手机号,需要判断,再查询
            #  方法一:
            try:
                if re.match('^1[3-9]\d{9}',username)  # 验证所传数据是否为手机号
                    user = User.objects.get(mobile=username)
                else:
                    user = User.objects.get(username=username)
            except:
                return None
            
            
        #  方法二:(实现用手机号注册的账户)
                try:
                user = User.objects.get(username=username)
            except:
                try:
                    user = User.objects.get(mobile=username)
                except:
                    return None
            # 查找到用户以后,进行密码校对   
            if user.check_password(password):
                return user
            else:
                return None
                   
    # 最终的authenticate方法返回的是user对象,或者是None
   
   
    ```

   

#### 2.配置自定义用户认证后端

- 在dev.py中指定自定义的用户认证后端

  ```python
  AUTHENTICATION_BACKENDS = ['meiduo_mall.utils.MobileAuthBackend']
  ```

  

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马