在详细说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类

BasicAuthentication这样的类,必须实现authenticate方法,并且返回一个用户,赋值给request.user,这个request.user就是系统中进行用户认证的user对象,后续的权限验证一般都是通过判断request.user的user对象是否拥有某个权限。rest-framework默认的就是BasicAuthentication,也就是跟admin登陆用的一样的认证。

SessionAuthentication类

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

我们可以看出BaseAuthentication实际上是一个接口类,让继承它的类都实现authenticate()方法。

接下来在request对象中封装了一些关于认证的方法及对象,接着就执行到了这里

然后执行initial方法,进行相应的操作。

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

最后就在request.user中执行authenticate这个方法进行认证(权限认证流程基本类似)

Django Rest Framework框架源码流程的更多相关文章

  1. django的rest_framework框架源码剖析

    在看源码之前先了解一下什么是rest,restful api. 什么是rest 可以总结为一句话:REST是所有Web应用都应该遵守的架构设计指导原则. REST是Representational S ...

  2. Django rest framework 版本控制(源码分析)

    基于上述分析 #2.处理版本信息 处理认证信息 处理权限信息 对用户的访问频率进行限制 self.initial(request, *args, **kwargs) #2.1处理版本信息 #versi ...

  3. Django后端项目----restful framework 认证源码流程

    一.请求到来之后,都要先执行dispatch方法,dispatch方法方法根据请求方式的不同触发get/post/put/delete等方法 注意,APIView中的dispatch方法有很多的功能 ...

  4. restful framework 认证源码流程

    一.请求到来之后,都要先执行dispatch方法,dispatch方法方法根据请求方式的不同触发get/post/put/delete等方法 注意,APIView中的dispatch方法有很多的功能 ...

  5. Rest Framework 认证源码流程

    一.请求到来之后,都要先执行dispatch方法,dispatch方法方法根据请求方式的不同触发get/post/put/delete等方法 注意,APIView中的dispatch方法有很多的功能 ...

  6. Django Rest framework 框架之认证使用和源码执行流程

    用这个框架需要先安装: pip3 install djangorestframework 如果写了一个CBV的东西,继承了View. # 继承Django里面View class APIView(Vi ...

  7. Python之Django rest_Framework框架源码分析

    #!/usr/bin/env python # -*- coding:utf-8 -*- from rest_framework.views import APIView from rest_fram ...

  8. Django session 源码流程

    流程 Django session源码流程 首先执行的是SessionMiddleware的init方法 import_module(settings.SESSION_ENGINE) 导入了一个 dj ...

  9. nodejs的Express框架源码分析、工作流程分析

    nodejs的Express框架源码分析.工作流程分析 1.Express的编写流程 2.Express关键api的使用及其作用分析 app.use(middleware); connect pack ...

随机推荐

  1. 安装eclipse(tomcat配置maven搭建){Java基础之开发工具}

    安装eclipse 1.下载eclipse-jee-neon-3-win32-x86_64 zip 百度云盘 解压 2. 下载JDK 官网 JDK 8 JDK电脑上环境变量配置 Path路径    % ...

  2. 解决“System.Data.OracleClient 需要 Oracle 客户端软件 version 8.1.7 或更高版本”的问题

    以server2008为例: 首先确保使用sqlplus能访问数据库. 1.管理工具->计算机管理->本地用户和组->组->administrators属性,添加,高级,立即查 ...

  3. [linux]阿里云主机的免密码登陆安全SSH配置与思考

    公司服务器使用的第三方云端服务,即阿里云,而本地需要经常去登录到服务器做相应的配置工作,鉴于此,每次登录都要使用密码是比较烦躁的,本着极速思想,我们需要配置我们的免登陆. 一 理论概述 SSH介绍 S ...

  4. 开窗函数Over用法

    比如我们有这个表: 销售记录表 日期 姓名 产品 销售额 201601 A 电脑 12560 201601 A 手机 6501 201601 A 平板 8510 201602 A 手机 1560 20 ...

  5. maven 设置 编码 ,jdk 版本

    <profile> <id>jdk1.8</id> <activation> <activeByDefault>true</activ ...

  6. C语言的存储类别和动态内存分配

    存储类别分三大类: 静态存储类别 自动存储类别 动态分配内存 变量.对象--->内存管理 内存考虑效率(时间更短.空间更小) 作用域 链接.---->空间 存储器   ----->时 ...

  7. rent bike问题(二分+贪心)

    题目描述: A group of n schoolboys decided to ride bikes. As nobody of them has a bike, the boys need to ...

  8. 基于ksoap2-android的soap的封装

    实例基于ksoap2-android-assembly-3.3.0-jar-with-dependencies.jar 1:定义回调接口,通过泛型确定返回值类型 package com.ciii.bd ...

  9. WAF攻防实战

    摘要 本文主要分为四个部分,一.首先对WAF做了简单的介绍,让读者对WAF这类产品有一个大概的了解:二.这部分通过一个实例演示了如何利用WAF为其后端的Web应用提供安全防护功能:三.安全是相对的,世 ...

  10. Java中的String、StringBuffer和StringBuilder的区别

    类型  是否可变  线程安全  能否频繁修改  String  不可变  安全  否  StringBuffer  可变  安全  能  StringBuilder  可变  不安全  能 1.可变与 ...