用户请求到django,首先经过wsgi,中间件,然后到url路由系统,执行视图类中继承APIView执行as_view方法,在源码中可以看到VPIView继承了django的View类,通过super执行View中的as_view方法详细看文章,最终返回执行self.dispatch(),按照django类中查找顺序现从自己的方法中找,如果自己没有dispatch方法再从继承的父类中找,
从APIView中找dispatch方法,
在dispatch中首先将request执行self.initialze_request重新封装request,
之后执行self.initial方法,这个方法一共执行4步操作:
1. 首先对request版本进行验证;

版本控制执行自己类中的determine_version方法,最终是versioning_class的属性,可以通过在settings.py文件中进行配置

2. 第二步进行用户认证

执行perform_authentication方法,在这个方法中执行了request.user方法,按照python类查找顺序先到APIView中进行查找,没有网View中查找都没有,往回看重新看一下之前的request封装操作,

查到restframework.request中有个Request类重新封装request,在Request中查找user方法,最后找到request.user最后返回authentication_classes实例化并返回认证列表

3. 第三步进行权限控制

执行check_permissions方法,按照上面的执行的流程,最后返回permission_classes实例化并返回权限列表,然后循环实例化对象中has_permission(必须存在)方法进行判断,如果定义了权限类,

has_permission必须有返回值,可以返回布尔值或raise一个报错信息,True表示有权限不做操作,False没有权限执行permission_denied方法,首先进行判断是否进行认证,如果没有认证则raise一个没有认证错误信息,

如果有认证则raise一个没有权限错误信息。

4. 第四步进行用户访问频率限制

执行check_throttles方法,按照上面的执行的流程,最后返回throttle_classes实例化并节流列表,循环执行allow_request方法,源码中如果没有定义allow_request方法则restframework会返回raise错误必须重写allow_request方法,

重写allow_request,比如对匿名用户访问做限制1分钟只能访问10次超过10次休息1分钟返回false不让访问,执行到wait(必须定义)进行重写,将访问时间进行计算然后返回下次访问时间,

也可以继承restframework已经写好的类SimpleRateThrottle,AnonRateThrottle,UserRateThrottle,ScopedRateThrottle
 
 
 

Django Rest Framework 请求流程的更多相关文章

  1. Django Rest framework实现流程

    目录 一 什么是restful架构 二 Django REST framework简介 三 Django REST framework原理 四 Django REST framework源码流程 五 ...

  2. Django Rest framework序列化流程

    目录 一 什么是序列化 二 Django REST framework配置流程之Serializer 三 Django REST framework配置流程之ModelSerializer 一 什么是 ...

  3. 利用 Django REST framework 编写 RESTful API

    利用 Django REST framework 编写 RESTful API Updateat 2015/12/3: 增加 filter 最近在玩 Django,不得不说 rest_framewor ...

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

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

  5. Django Rest framework的限流实现流程

    目录 一 什么是throttle 二 Django REST framework是如何实现throttle的 三 Django REST framework中throttle源码流程 一 什么是thr ...

  6. Django REST FrameWork中文教程2:请求和响应

    从这一点开始,我们将真正开始覆盖REST框架的核心.我们来介绍几个基本的构建块. 请求对象REST框架引入了Request扩展常规的对象HttpRequest,并提供更灵活的请求解析.Request对 ...

  7. 源码剖析Django REST framework的请求生命周期

    学习Django的时候知道,在Django请求的生命周期中,请求经过WSGI和中间件到达路由,不管是FBV还是CBV都会先执行View视图函数中的dispatch方法 REST framework是基 ...

  8. django源码分析 请求流程

    一.从浏览器发出一个请求,到返回响应内容,这个过程是怎么样的? 1. 浏览器解析输入的url 2. 查找url对应的ip地址 3. 通过ip地址访问我们的服务器 1.  请求进入wsgi服务器(我在这 ...

  9. Django REST framework+Vue 打造生鲜超市(一)

    一.项目介绍 1.1.掌握的技术 Vue + Django Rest Framework 前后端分离技术 彻底玩转restful api 开发流程 Django Rest Framework 的功能实 ...

随机推荐

  1. sam(后缀自动机)

    后缀自动机ins解释 void ins(int c){ int p=last;//将当前节点的parent节点变为last int np=++cnt;//建立新节点 last=np;//将last设为 ...

  2. 装饰器中的@functools.wraps的作用

    def login_required(view_func): @functools.wraps(view_func) def wrapper(*args, **kwargs): ...... retu ...

  3. POJ 2612

    #include<iostream> #include<stdio.h> #include<algorithm> #define MAXN 11 using nam ...

  4. asp.net core 系列之用户认证(1)-给项目添加 Identity

    对于没有包含认证(authentication),的项目,你可以使用基架(scaffolder)把 Identity的程序集包加入到项目中,并且选择性的添加Identity的代码进行生成. 虽然基架已 ...

  5. LaTeX技巧:如何高效地将LaTeX代码转为Word公式

    LaTeX转换为word这么刺激的做法是很多国内用户咨询的问题,有些用户只得把LaTeX排版好的转换为word,这里给大家推荐几个用法,或许能够帮助到诸位. 第一种方法:MathType的Toggle ...

  6. 解决Maven的Could not resolve archetype org.apache.maven.archetypes:maven-archetype-quickstart

    eclipse配置好了Maven,创建maven-archetype-quickstart项目报错如下: Could not resolve archetype org.apache.maven.ar ...

  7. Day.js - JavaScript时间处理库

    Day.js简介 在使用JavaScript处理时间方面,使用的时Moment.js,但是它太重了,有200多k,一般项目中可能也只是用了几个api而已,所以,这里推荐一个轻量的时间库 - Day.j ...

  8. Google Optimization Tools介绍

    Google Optimization Tools(OR-Tools)是一款专门快速而便携地解决组合优化问题的套件.它包含了: 约束编程求解器. 简单而统一的接口,用于多种线性规划和混合整数规划求解, ...

  9. GO入门——2. 变量

    1 基本类型 零值并不等于空值,而是当变量被声明为某种类型后的默认值, 通常情况下值类型的默认值为0,bool为false,string为空字符串,引用为nil. 1.1 布尔类型 关键字:bool ...

  10. Git 的4个阶段的撤销更改

    虽然git诞生距今已有12年之久,网上各种关于git的介绍文章数不胜数,但是依然有很多人(包括我自己在内)对于它的功能不能完全掌握.以下的介绍只是基于我个人对于git的理解,并且可能生编硬造了一些不完 ...