在看源码以前先了解一下什么是rest,restful api.django
能够总结为一句话:REST是全部Web应用都应该遵照的架构设计指导原则。 REST是Representational State Transfer的简称,中文翻译为“表征状态转移”.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这个方法进行认证
这就是认证的大概流程,其它权限什么的都同样,就不一一说明了。