Django Rest Framework框架源码流程
在详细说django-rest-framework源码流程之前,先要知道什么是RESTFUL、REST API 。
RESTFUL是所有Web应用都应该遵守的架构设计指导原则。 REST是Representational State Transfer的简称,中文翻译为“表征状态转移”。
- 表征状态转移
- 面向资源编程,对互联网上的任意东西都视为资源。
REST API 其中API是一种接口,有两个用途:1)为别人提供服务 2)前后端分离
restful api书写规范(面试会问)
url(能够在url中表现出来它是一个api,注意api写在前面和后面的问题,会存在跨域问题)
url名词 (url一定要是名词)
版本(在url中标明版本号)
提交方式(重要--根据提交方式判断该执行什么操作)
status(返回的状态码)
Hypermedia link(在api中返回链接)
错误详细(根据状态码的不同,显示不同的错误信息)
接下来看看具体的源码流程

from django.shortcuts import render,HttpResponse
from rest_framework.views import APIView
from rest_framework.exceptions import APIException class HostView(APIView):
authentication_classes=[Myauthentication,]
def get(self,request):
return HttpResponse(".....")
在view.py文件中自己定义了一个类HostView,首先,请求刚进来会执行类中的dispatch()方法,如果当前类中没有此方法,就会去它的基类中找。

接下来,调用initialize_request将返回值重新赋值给request,此时的request就不是django中的request了,如下图:

在initialize_request方法中重新封装了request对象,即在request对象总重新加了一些东西,接下来我们来看看在get_authenticators()中做了什么?
此时的authenticatiors=self.get_authenticators()是一个对象列表。

在get_authenticators这个方法中遍历循环了self.authentication_classes并返回了一个列表对象,因为它调用的是self.找的,所有它先去我们写的那个类中去找authentication_classes,我们写的类中没有才去基类中找,因此我们就可以自定义这个列表类了,在定义之前要知道它默认的类中都有什么,我们才会好根据它默认的类去定义。

由此可以看出它默认的authentication_classes是从它的配置文件中读出来的。现在就可以去看看它配置文件中的类了。

接下来看看这两个类中做了些什么?
BasicAuthentication类

SessionAuthentication类

不难看出这两个类都继承了BaseAuthentication类,都实现了一个authenticate()方法,接下来我们看看BaseAuthentication类中到底干了什么?

我们可以看出BaseAuthentication实际上是一个接口类,让继承它的类都实现authenticate()方法。
接下来在request对象中封装了一些关于认证的方法及对象,接着就执行到了这里

然后执行initial方法,进行相应的操作。
由此可以看出它默认的authentication_classes是从它的配置文件中读出来的。现在就可以去看看它配置文件中的类了。



最后就在request.user中执行authenticate这个方法进行认证(权限认证流程基本类似)
Django Rest Framework框架源码流程的更多相关文章
- django的rest_framework框架源码剖析
在看源码之前先了解一下什么是rest,restful api. 什么是rest 可以总结为一句话:REST是所有Web应用都应该遵守的架构设计指导原则. REST是Representational S ...
- Django rest framework 版本控制(源码分析)
基于上述分析 #2.处理版本信息 处理认证信息 处理权限信息 对用户的访问频率进行限制 self.initial(request, *args, **kwargs) #2.1处理版本信息 #versi ...
- Django后端项目----restful framework 认证源码流程
一.请求到来之后,都要先执行dispatch方法,dispatch方法方法根据请求方式的不同触发get/post/put/delete等方法 注意,APIView中的dispatch方法有很多的功能 ...
- restful framework 认证源码流程
一.请求到来之后,都要先执行dispatch方法,dispatch方法方法根据请求方式的不同触发get/post/put/delete等方法 注意,APIView中的dispatch方法有很多的功能 ...
- Rest Framework 认证源码流程
一.请求到来之后,都要先执行dispatch方法,dispatch方法方法根据请求方式的不同触发get/post/put/delete等方法 注意,APIView中的dispatch方法有很多的功能 ...
- Django Rest framework 框架之认证使用和源码执行流程
用这个框架需要先安装: pip3 install djangorestframework 如果写了一个CBV的东西,继承了View. # 继承Django里面View class APIView(Vi ...
- Python之Django rest_Framework框架源码分析
#!/usr/bin/env python # -*- coding:utf-8 -*- from rest_framework.views import APIView from rest_fram ...
- Django session 源码流程
流程 Django session源码流程 首先执行的是SessionMiddleware的init方法 import_module(settings.SESSION_ENGINE) 导入了一个 dj ...
- nodejs的Express框架源码分析、工作流程分析
nodejs的Express框架源码分析.工作流程分析 1.Express的编写流程 2.Express关键api的使用及其作用分析 app.use(middleware); connect pack ...
随机推荐
- [51nod1188]最大公约数之和 V2(筛法)
题面 传送门 题解 口胡的整除分块单次询问\(O(\sqrt{n})\)的做法居然\(T\)了?那还是好好看正解吧-- 首先我们枚举\(j\),求对于每个\(j\)有所有\(i<j\)的\(\g ...
- GET/POST/g和钩子函数(hook)
GET请求和POST请求: 1. get请求: * 使用场景:如果只对服务器获取数据,并没有对服务器产生任何影响,那么这时候使用get请求. * 传参:get请求传参是放在url中,并且是通过`?`的 ...
- [ZJOI2008]生日聚会 BZOJ1037 dp
题目描述 今天是hidadz小朋友的生日,她邀请了许多朋友来参加她的生日party. hidadz带着朋友们来到花园中,打算坐成一排玩游戏.为了游戏不至于无聊,就座的方案应满足如下条件: 对于任意连续 ...
- kuangbin专题七 HDU1166 敌兵布阵 (线段树或树状数组)
C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于 ...
- zookeeper分布式锁简单实现(JavaApi)
1.创建会话连接 package com.karat.cn.zookeeperAchieveLock.javaapilock; import org.apache.zookeeper.WatchedE ...
- Python-5-字符串方法
center >>> "The Middle by Jimmy Eat World".center(39) ' The Middle by Jimmy E ...
- sublime 显示 python 错误信息
默认的编译器可以直接按Ctrl+B编译运行Python,并在控制台输出结果.美中不足的是无法输出中文,需要自己手动配置一番. 在Sublime Text 3 中依次点击菜单Tools->buil ...
- Experimental Educational Round: VolBIT Formulas Blitz F
Description One company of IT City decided to create a group of innovative developments consisting f ...
- window.open()总结
今天找父页面和子页面调去问题. 父页面js 1.打开子页面 可以设置子页面长宽高和位置 win= window.open(url, "", "top=45,left=20 ...
- springmvc怎么重定向
转载大神: https://blog.csdn.net/wabiaozia/article/details/50252661