美文网首页
2018-04-24

2018-04-24

作者: 流沙河里的潜水蛙 | 来源:发表于2018-04-24 18:31 被阅读0次

         关于Django REST framework源码认证流程的简单分析

        一个URL对应一个视图函数,视图函数又可以分为CBV和FBV,Django REST framework采用的是CBV模式

        首先请求进来,找到对应的类的as_view()函数,as_view()是一个APIVIew这个类的类装饰器函数。如下图;

    再继续往下走,在APIView的as_view()方法中调用其基类View类的as_view()方法,即;

    在View类中,有一个静态字段,请求方式与URL的对应关系会用到:

    View类的as_view()函数:

    注意:这是一个新的装饰器,继承了classmethod类,但重写了__get__的方法;

    在View的as_view()函数中有一个view函数,在这个view函数中调用了自己的dispatch方法:即APIView的dispatch方法;

    注:请求方式与URL的对应(反射);但注意这个dispatch与上面的dispatch方法不是同一个diapatch方法,它是View这个类里面的dispatch方法;

    在APIView中调用自己的dispatch方法

    其中再次调用了自己的initialize_request方法,将请求封装到Request对象中,即;

    继续往下执行,调用自己的initial方法;

    在initial方法中;

    因为认证,权限,和限流是差不多的,所以我们以认证为例解析,注意:这个request是Request这个类,调用Request.user,是一个property方法

    自己定义验证的方法,可以写一个类继承默认的类,再重写authenticate方法,并返回一个元组,

    最后在Request类中;

    如果没有通过验证,则返回一个元组(None,None);

    这就是认证的大概流程,权限和限流的流程都类似,下次再写。

    相关文章

      网友评论

          本文标题:2018-04-24

          本文链接:https://www.haomeiwen.com/subject/llyjlftx.html