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 ...
随机推荐
- 前端JS AES加密 后端PHP AES加解密
<!DOCTYPEhtml> <html> <head> <title>aes demo</title> </head> < ...
- Jmeter-逻辑控制器之Switch控制器(Switch Controller)
Switch控制器(Switch Controller): 作用:Switch控制器通过给该控制器中的Value赋值,来指定运行哪个采样器.有两种赋值方式: 第一种是数值,Switch控制器下的子节点 ...
- P4841 城市规划 FFT+生成函数
\(\color{#0066ff}{ 题目描述 }\) 刚刚解决完电力网络的问题, 阿狸又被领导的任务给难住了. 刚才说过, 阿狸的国家有n个城市, 现在国家需要在某些城市对之间建立一些贸易路线, 使 ...
- freemarker常用标签解释遍历
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...
- spring boot 下websocket实现的两种方法
websocket前台实现代码,保存为html执行就好 html代码来自:https://blog.csdn.net/M348915654/article/details/53616837 <h ...
- Qt 学习之路 2(1):序
https://www.devbean.net/category/qt-study-road-2/page/10 原来开过QT学习之路1, 很棒, 再翻阅时已经没有了. 所以这次把看过的记录下来 Ho ...
- 根据map中某一字段排序
以上是从小到大的排序...要注意.! 需要jdk8...
- 【笔记】如何在for语句中迭代多个可迭代对象
并行=>使用内置函数zip,它能将多个可迭代对象合并,每次迭代返回一个元组. for i,j,k in zip(a,b,c): TODO 穿行=>使用标准库中的itertools.chai ...
- Educational Codeforces Round 53 (Rated for Div. 2) C. Vasya and Robot(二分或者尺取)
题目哦 题意:给出一个序列,序列有四个字母组成,U:y+1,D:y-1 , L:x-1 , R:x+1; 这是规则 . 给出(x,y) 问可不可以经过最小的变化这个序列可以由(0,0) 变到(x, ...
- appium ios 真机自动化环境搭建
近期由于工作需要,本小菜在弄appium+ios+iphone真机的移动自动化,在网上找寻各种资料,发现针对IOS方面的资料少之又少,公司其它部门的弄过的同事也寥寥无几,即使有,也是安卓方面的.本次书 ...