码迷,mamicode.com
首页 > 其他好文 > 详细

四.2登录之多账号登录

时间:2020-01-15 13:40:34      阅读:65      评论:0      收藏:0      [点我收藏+]

标签:mode   app   后端   手机   port   官方文档   mob   imp   条件查询   

 

# 多账号登录
- 说明:在登录页面,用户文本框中,可以填写用户名,也可以填写手机号,密码一样,完成登录
- 分析:查询
  - 如果是用户名,则filter(username字段和用户填的值做对比)
  - 如果是手机号,则filter(mobile字段和用户填的值做对比)
- 实现:自定义类,继承自Backend,重写authenticate()方法

1.指定认证后端--https://yiyibooks.cn/qy/django2/topics/auth/customizing.html

apps/users/views.py中LoginView类中:此前直接用的是django的认证模块authenticate方法---但是此方法中无多帐号查询语句,所以我得自己写多条件查询语句,那我得怎么做?--django官方文档.

settings/dev.py中添加:

#指定认证后端
AUTHENTICATION_BACKENDS = [meiduo_mall.utils.authenticate.MeiduoModelBackend]

2.自定认证后端:

建utils/authenticate.py:from django.contrib.auth.backends import ModelBackend #导入modelbackend类import rfrom users.models import Us

class MeiduoModelBackend(ModelBackend):
  #重写authenticate方法---原只是根据用户名作查询,现在改写成即可手机号又可用户名查询
def authenticate(self, request, username=None, password=None, **kwargs): # 变量username的值,可以是用户名,也可以是手机号,需要判断,再查询 try:#查用户对象无则抛异常---即在两个字段上作查询 #if re.match(r‘^1[3-9]\d{9}$‘, username):#手机号的正则与username变量作对比 # user = User.objects.get(mobile=username)#查询 #else: # user = User.objects.get(username=username)
      #不做正则式的判断,直接用username变量/用户输入的值去查是匹配username还是mobile字段
       user = User.objects.get(username=username)
except: # 如果未查到数据,则返回None,用于后续判断
       try:
        #再接着查
        user = User.objects.get(mobile=username)
       except:
        return None
# 判断密码--check_password是django官方方法 if user.check_password(password): return user else: return None

效果如下图:实现多帐号登录了--用手机号也可登录

技术图片

1

 

2

 

3

 

4

 

5

四.2登录之多账号登录

标签:mode   app   后端   手机   port   官方文档   mob   imp   条件查询   

原文地址:https://www.cnblogs.com/dbslinux/p/12196007.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!