zoukankan      html  css  js  c++  java
  • DRF Django REST framework 之 APIView(一)

    什么是REST?

    REST是一个标准,一种规范,遵循REST风格可以使开发的接口通用,便于调用者理解接口的作用。

    使url更容易理解,让增删改清晰易懂,在前后端分离开发中按照这一规范能加快开发效率,减少不必要的讨论时间。

    • GET:          获取特定资源(通过ID)或资源集合
    • POST:   创建一个新资源
    • PUT:          更新特定资源(通过ID)
    • DELETE:    按ID删除特定资源

    详情可见:https://baike.baidu.com/item/rest/6330506

    可以理解为: URL唯一代表资源,HTTP请求方式来区分用户行为。

    URL的设计规范:
    GET:     127.0.0.1:9001/books/	       获取所有数据
    GET:    127.0.0.1:9001/books/{id}     获取单条数据
    POST:    127.0.0.1:9001/books/	      增加数据
    DELETE:  127.0.0.1:9001/books/{id}     删除数据
    PUT:     127.0.0.1:9001/books/{id}     修改数据
    
    数据响应规范:
    GET:     127.0.0.1:9001/books/	     返回[{}, {}, {}]
    GET:      127.0.0.1:9001/books/{id}    {} 单条数据
    POST:    127.0.0.1:9001/books/	      {} 添加成功的数据
    DELETE:   127.0.0.1:9001/books/{id}    "" 返回空
    PUT:      127.0.0.1:9001/books/{id}    {} 更新后完整的数据
    
    错误处理:
    { "error": "message" }

     DRF

    DRF (Django REST framework)Django REST框架是用于构建Web API的工具, 是功能强大且灵活的工具包。

    通常简称为DRF框架 或 REST framework。DRF框架是建立在Django框架基础之上,由Tom Christie大牛二次开发的开源项目。

    DRF中有封装了十大组件,分别是序列化组件,视图组件,认证组件,权限组件,频率组件,解析器,分页器,响应器,url控制器,版本控制。这十大组件,能够很好的帮助开发人员提升开发效率。

    可以用来实现前后端分离的项目

    APIView

     APIView 是DRF概念体系中最基本类视图,也是所有视图的基类,继承自Django的 View 父类。

     APIView 与 View 的不同之处在于:

    • 传入到视图方法中的是REST framework的 Request 对象,而不是Django的 HttpRequeset 对象;
    • 视图方法可以返回REST framework的 Response 对象,视图会为响应数据设置 render 符合前端要求的格式;
    • 任何 APIException 异常都会被捕获到,并且处理成合适的响应信息;
    • 在进行 dispatch() 分发前,会对请求进行身份认证、权限检查、流量控制
    支持定义的属性:
    •  authentication_classes  列表或元祖,身份认证类
    •  permissoin_classes  列表或元祖,权限检查类
    •  throttle_classes  列表或元祖,流量控制类

    在 APIView 中仍以常规的类视图定义方法来实现 get()  、 post()  或者其他请求方式的方法。

    APIView源码分析

    1. 路由层调用 as_view() 方法

    2. 由于视图类 LoginView 类没有 as_view() 方法,所以去父类APIView中找

    执行View里的 as_view() 方法

    3.  as_view() 最终还是执行类 APIView 里的 dispatch() 方法。

    4. 通过 initialize_request() 将原生 request 封装到 Request 中,依次执行 initial() 里面的认证,权限,概率组件

    5.  Request 类做了什么

    把一些常用的方法重新封装了,如GET方法封装成了query_params,并伪装成属性。

    6. 最后通过映射进行分发,并返回

    DRF的关键就是重写了 dispatch 方法,在 dispatch 中对原生的 request 进行了封装,然后通过 initial() 方法来执行认证,权限,频率的控制。

  • 相关阅读:
    10 shell test命令
    9 shell 退出状态
    8 shell if else
    7 shell 数学运算
    6-x3 declare和typeset命令:设置变量属性
    6-x1 read命令:从键盘读取数据
    Bootstrap 有一个 class 属性叫做 well,它的作用是为设定的列创造出一种视觉上的深度感
    form-control给input添加这个class类后就会使用bootstrap自带的input框
    bootstrap文字居中!
    img-responsive class图片响应式
  • 原文地址:https://www.cnblogs.com/pungchur/p/12005996.html
Copyright © 2011-2022 走看看