django的rest_framework框架源码剖析
在看源码之前先了解一下什么是rest,restful api.
什么是rest
可以总结为一句话:REST是所有Web应用都应该遵守的架构设计指导原则。 REST是Representational State Transfer的简称,中文翻译为“表征状态转移”.
restful api
符合REST架构设计的API。
restful api的书写规范:
- URL(在url中表现出来它是一个api)
- url名词(url应当是名词)
- 版本 (在url中表明版本号)
- 提交方式(提交方式最为重要,根据提交方式的不同来判断要执行什么样的操作)
- status(返回的状态码)
- Hypermedia link(在api中返回链接)
- 错误详细(状态码是4xx时,应返回错误信息,error当做key。)
下面就来看看它源码中的流程
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()中到底做了什么
在get_authenticators这个方法中循环了self.authentication_classes返回了一个列表对象,因为他是self.找的,所有它先去我们写的那个类中去找authentication_classes,我们
写的类中没有才去父类中找,因此我们就可以自定义这个列表类了。在定义之前要知道它默认的类中都有什么,我们才会好根据它默认的类去定义。
由此可以看出它默认的authentication_classes是从它的配置文件中读出来的。现在就可以去看看它配置文件中的类了。
现在就可以去看看这两个类中都有什么方法。
可以看出他们都继承了一个BaseAuthentication的类并且都实现了authenticate方法。所以现在我们去看看BaseAuthentication类到底是什么?
由此可以看出BaseAuthentication类其实是一个接口类,让继承它的类必须实现authenticate方法。
最后就是在request对象中的authenticatotes中封装了一些关于认证的对象,然后我们接着往下看 ,
然后又执行initial这个方法。
然后就在request.user中执行authenticate这个方法进行认证
这就是认证的大概流程,其它权限什么的都一样,就不一一说明了。
django的rest_framework框架源码剖析的更多相关文章
- 【安卓网络请求开源框架Volley源码解析系列】定制自己的Request请求及Volley框架源码剖析
通过前面的学习我们已经掌握了Volley的基本用法,没看过的建议大家先去阅读我的博文[安卓网络请求开源框架Volley源码解析系列]初识Volley及其基本用法.如StringRequest用来请求一 ...
- 【java集合框架源码剖析系列】java源码剖析之TreeSet
本博客将从源码的角度带领大家学习TreeSet相关的知识. 一TreeSet类的定义: public class TreeSet<E> extends AbstractSet<E&g ...
- 【java集合框架源码剖析系列】java源码剖析之HashSet
注:博主java集合框架源码剖析系列的源码全部基于JDK1.8.0版本.本博客将从源码角度带领大家学习关于HashSet的知识. 一HashSet的定义: public class HashSet&l ...
- 【java集合框架源码剖析系列】java源码剖析之TreeMap
注:博主java集合框架源码剖析系列的源码全部基于JDK1.8.0版本.本博客将从源码角度带领大家学习关于TreeMap的知识. 一TreeMap的定义: public class TreeMap&l ...
- 【java集合框架源码剖析系列】java源码剖析之ArrayList
注:博主java集合框架源码剖析系列的源码全部基于JDK1.8.0版本. 本博客将从源码角度带领大家学习关于ArrayList的知识. 一ArrayList类的定义: public class Arr ...
- 【java集合框架源码剖析系列】java源码剖析之LinkedList
注:博主java集合框架源码剖析系列的源码全部基于JDK1.8.0版本. 在实际项目中LinkedList也是使用频率非常高的一种集合,本博客将从源码角度带领大家学习关于LinkedList的知识. ...
- 【java集合框架源码剖析系列】java源码剖析之HashMap
前言:之所以打算写java集合框架源码剖析系列博客是因为自己反思了一下阿里内推一面的失败(估计没过,因为写此博客已距阿里巴巴一面一个星期),当时面试完之后感觉自己回答的挺好的,而且据面试官最后说的这几 ...
- Python之Django rest_Framework框架源码分析
#!/usr/bin/env python # -*- coding:utf-8 -*- from rest_framework.views import APIView from rest_fram ...
- Django Rest Framework框架源码流程
在详细说django-rest-framework源码流程之前,先要知道什么是RESTFUL.REST API . RESTFUL是所有Web应用都应该遵守的架构设计指导原则. REST是Repres ...
随机推荐
- jq手风琴效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Zabbix实战-简易教程(5)--Proxy和Agent端(源码和yum方式)
3.3.1 zabbix proxy安装(源码方式) 1.创建目录 mkdir -p /usr/local/zabbix 2.安装必要软件 yum install -y fping(若安装不成功) 或 ...
- RabbitMQ的应用场景以及基本原理介绍
1.背景 RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue)的开源实现. 2.应用场景 2.1异步处理 场景说明:用户注册后,需要发注册邮件和注册短信, ...
- [翻译]QT core wallet manual 狗狗币核心钱包使用教程
译注:比特币没赶上可以玩狗狗币啊,水电厂包不起可以用CPU挖啊.为了顺应时代潮流,了解一下区(fa)块(heng)链(cai)和加密货币技术,准备从研究狗狗币开始.网上找了一圈没有看到很好的入门级教程 ...
- CSS3阴影 box-shadow的使用总结
text-shadow是给文本添加阴影效果,box-shadow是给元素块添加周边阴影效果.随着html5和CSS3的普及,这一特殊效果使用越来越普遍. 基本语法是{box-shadow:[inset ...
- struts2(六)之ognl表达式与ActionContext、ValueStack
前言 前面已经把struts2讲内容说了一半了,我写的很详细,希望对博友们有帮助. 一.OGNL表达式语言概述 1.1.OGNL表达式简介 百度上是这样说: OGNL是Object-Graph Nav ...
- Java Thread wait、notify与notifyAll
Java的Object类包含了三个final方法,允许线程就资源的锁定状态进行通信.这三个方法分别是:wait(),notify(),notifyAll(),今天来了解一下这三个方法.在任何对象上调用 ...
- [国嵌攻略][054][NandFlash驱动设计_写]
Nand Flash支持按页写和随机写两种方式,在下面实现的是按页写.闪存在写数据时,只能写入1,不能写入0,所以写函数必须和擦除函数一起使用,并且擦除函数是按块擦除. /************** ...
- 利用脚本将EXCEl表倒入PowerDesigner中
1.Excel表格样式 2.脚本代码 '****************************************************************************** O ...
- C++ 初始化列表(转)
转载自:http://www.cnblogs.com/graphics/archive/2010/07/04/1770900.html 何谓初始化列表 与其他函数不同,构造函数除了有名字,参数列表和函 ...