django的rest_framework框架源码剖析

在看源码以前先了解一下什么是rest,restful api.django

什么是rest

能够总结为一句话:REST是全部Web应用都应该遵照的架构设计指导原则。 REST是Representational State Transfer的简称,中文翻译为“表征状态转移”.api

restful api

符合REST架构设计的API。restful

restful api的书写规范:架构

- URL(在url中表现出来它是一个api)
- url名词(url应当是名词)
- 版本 (在url中代表版本号)
- 提交方式(提交方式最为重要,根据提交方式的不一样来判断要执行什么样的操做)
- status(返回的状态码)
- Hypermedia link(在api中返回连接)
- 错误详细(状态码是4xx时,应返回错误信息,error当作key。)url

下面就来看看它源码中的流程spa

 

UserInfo类:架构设计

from django.shortcuts import render,HttpResponse
from rest_framework.views import APIView
from rest_framework.exceptions import APIException

class UserInfo(APIView):
    authentication_classes=[Myauthentication,]
    def get(self,request):
        return HttpResponse(".....")

首先,请求刚进来会执行对应类中的dispathch()方法,若当前类中没有,就去它的父类APIView中找。翻译

第二步,它又调用了initialize_request并将它的返回值从新赋值给了request。说明如今的request就不是django原来的request了,而后咱们点进去它里面都作了些什么。设计

在initialize_request方法中,又从新封装了request对象,在原来的基础上又从新封装了一些东西,如今咱们来看看get_authenticators()中到底作了什么3d

 

在get_authenticators这个方法中循环了self.authentication_classes返回了一个列表对象,由于他是self.找的,全部它先去咱们写的那个类中去找authentication_classes,咱们

写的类中没有才去父类中找,所以咱们就能够自定义这个列表类了。在定义以前要知道它默认的类中都有什么,咱们才会好根据它默认的类去定义。

由此能够看出它默认的authentication_classes是从它的配置文件中读出来的。如今就能够去看看它配置文件中的类了。

如今就能够去看看这两个类中都有什么方法。

 

能够看出他们都继承了一个BaseAuthentication的类而且都实现了authenticate方法。因此如今咱们去看看BaseAuthentication类究竟是什么?

 

由此能够看出BaseAuthentication类实际上是一个接口类,让继承它的类必须实现authenticate方法。

最后就是在request对象中的authenticatotes中封装了一些关于认证的对象,而后咱们接着往下看 ,

而后又执行initial这个方法。

而后就在request.user中执行authenticate这个方法进行认证

这就是认证的大概流程,其它权限什么的都同样,就不一一说明了。

相关文章
相关标签/搜索