django rest framework系列05-基于代码详细流程之修改默认配置文件自定义认证到配置文件

已知:authentication_classes = api_settings.DEFAULT_AUTHENTICATION_CLASSES

 我们知道,rest framework 中认证authentication_classes类是在配置文件中,那么我们也可以把自己写的类注册到这个配置文件。这样就不用在每个视图中写。他默认就会调用。

那么走源码流程,进入api_settings看看内部结构。

api_settings = APISettings(None, DEFAULTS, IMPORT_STRINGS)


def reload_api_settings(*args, **kwargs):
    setting = kwargs['setting']
    if setting == 'REST_FRAMEWORK':
        api_settings.reload() #加载REST_FRAMEWORK具体怎么加载的还不知道,暂时看到官方是配置这个文件。照做


setting_changed.connect(reload_api_settings)

 settings.py设置全局认证:

#最外层的key
REST_FRAMEWORK ={
    "DEFAULT_AUTHENTICATION_CLASSES":['API.utils.auth.Authtication',]  #把视图中的Authtication类剪切到目录utils.auth下
}

 现在就可以把我们在视图中写的Authtication类拿过去,然后视图中就不用写了

但是会发现一个问题,登录类也需要token否则抛出异常,那么这个例如登录这种不需要认证的就需要在视图中,写一个空authentication_classes,没有认证类就好了。

 

总结:也就是全局认证可以去配置文件写,局部不使用可以在视图中重写authentication_classes为空,那么同理,局部使用其他认证,也可以在视图内重写authentication_classes。

 

扩展:

内置认证都继承自BaseAuthentication,所以以后自定义认证也同意继承BaseAuthentication,修改后的自定义认证类:

from API import models
from rest_framework import exceptions
from rest_framework.authentication import BaseAuthentication

class Authtication(BaseAuthentication):

    def authenticate(self,request):
        #user_auth_tuple = authenticator.authenticate(self)跟踪得到,默认调用authenticate方法,返回一个元组
        token = request._request.GET.get('token')
        token_obj = models.UserToken.object.filter(token=token).first()

        if not token_obj:
            raise exceptions.APIException('用户认证失败')

        return (token_obj.user,token_obj.token)

    def authenticate_header(self,request):
        '这个方法暂时不知道干啥,不加保存,加上不用先'
        pass

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值