django rest_framework认证梳理

django rest_framework认证梳理


请主人通过self.dispatch()入口查看源码。
看了一大堆,源码最清楚!!!!
1、
使用
2、流程:
在这里插入图片描述
1、入口:self.dispatch()
2、对request进行封装:

request = self.initialize_request(request, *args, **kwargs)
        self.request = request
    获取定义的认证类(全局/局部),通过列表生成式创建对象进行认证
    如果未定义认证类列表,则使用默认的两个认证类
    def initialize_request(self, request, *args, **kwargs):
        """
        Returns the initial request object.
        """
        parser_context = self.get_parser_context(request)

        return Request(
            request,
            parsers=self.get_parsers(),
            authenticators=self.get_authenticators(),#认证
            negotiator=self.get_content_negotiator(),
            parser_context=parser_context
        )


def get_authenticators(self):
"""
Instantiates and returns the list of authenticators that this view can use.
"""

	return [auth() for auth in self.authentication_classes]


#默认认证列表
authentication_classes = api_settings.DEFAULT_AUTHENTICATION_CLASSES

3、对request进行加工后,进行认证
#遍历认证列表。如果子类中没有,则使用父类的默认的认证类。

  'DEFAULT_AUTHENTICATION_CLASSES': ['rest_framework.authentication.SessionAuthentication',
         'rest_framework.authentication.BasicAuthentication']

,认证抛异常之前设置self.user为匿名用户,最后再抛异常。
self.dispatch()接受异常,返回

self.initial(request, *args, **kwargs)
     -self.perform_authentication(request)
          -request.user(内部循环认证)
#如果第一个认证没有通过,并且抛异常,直接返回。
#如果第一个认证没有通过,并且返回None,则继续下一个认证
#第一个认证通过,直接退出
#认证未通过,或者抛异常,调用self._not_authenticated(),设置匿名用户,并且抛出异常,接着self.dispatch()捕获异常

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值