自定义条件查询_DjangoRestFrameWork 自定义认证类

7aade70a9cd9721a68706108165df8ad.png

cd0e8ee1f59ac47176fbbe86e7b12908.png

在进行登录时默认需要使用username以及password字段,如果想要使用telephone、email字段配合密码登录则需要自定义认证类了

593e71ca9eab6527603a720448e6f07d.png

实现原理

Django框架中通过django.conf.global_settings.py配置了项目默认认证类

AUTHENTICATION_BACKENDS= ['django.contrib.auth.backends.ModelBackend']

其中ModelBackend 类就是项目默认认证类

在类中对authenticate方法进行了重写方法中需要针对用户名、密码与数据库进行匹配

如果匹配成功返回当前用户即认证成功 否则认证失败

一、 新建自定义认证类

在应用根目录新建 auth.py

编写自定义认证类

from django.contrib.auth.backends import BaseBackend
from .models import User
from django.db.models import Q
class MyLoginBackend(BaseBackend):
    def authenticate(self, request, **kwargs):
        username = kwargs["username"]
        user = User.objects.filter(Q(email=username) | Q(telephone=username) | Q(username=username) ).first()
        if user:
           if user.check_password(kwargs["password"]):
               return user
        return None

在自定义的MyLoginBackend类中对authenticate方法进行重写,提取kwargs中的参数,参数的值即为登录时提交的内容,可以那用户名与用户名、邮箱、手机号等字段进行匹配,有一个匹配成功即开始进行密码的匹配

Q查询是django中自带的查询包装条件,适合多个条件进行或且非逻辑判断

二、配置自定义认证类

在settings.py中添加配置

# 自定义认证类
AUTHENTICATION_BACKENDS=("shop.auth.MyLoginBackend",)

60750472ac015d6805644ad0adf6e1be.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值