DRF | 入门第二天

80 阅读3分钟

Restful规范

什么是RESTful

Representational State Transfer ---> 表征状态转移

RESTful是一种定义Web API 接口的设计风格、API接口的编写规范,尤其适用于前后端分离的应用模式中。

这种风格的临边认为后端开发任务就是提供数据的,对外提供的数据资源的访问接口,所以在定义接口是,客户端访问的URL路径就表示这种要操作的数据资源

我们可以使用任何一个框架都可以实现符合restful规范的API接口

10条规范

1. 数据的安全保障:通常使用HTTPS来部署,采用HTTPS协议,可以提高数据交互过程中的安全性
2. 接口特征表现:URL地址带接口标识
3. 多版本共存:URL地址中带版本信息
4. 数据即资源,均使用名词:URL地址尽量使用名词
5. 资源操作由请求方式操作:GET请求获取数据,POST请求新增数据
6. 请求地址中带过滤条件 --- 只针对于搜索所有接口
7. 响应状态码--->HTTP的响应状态码
    1XX 表示请求正在处理
    2XX
    3XX
    4XX
    5XX
8. 响应中带错误信息
9. 不同操作,返回格式符合如下标准

序列化和反序列化

API接口开发,最核心最常见的一个过程就是序列化,所谓序列化,就是把数据转换格式,序列化可以分两个阶段:

序列化: 把我们识别的数据转换成指定的格式提供给别人
例子:我们子啊Django中湖区到的数据默认是模型对象,但是模型对象数据无法直接提供给前端或者别的平台使用。所以我们会需要把数据进行序列化,变成字符串或者JSON数据,提供给别人、

返序列化:把别人提供的数据转换/还原成我们需要的格式
例子:前端JS提供过来的JSON个数数据,对于Python来说就是字符串,我们需要进行规范序列化转换成模型类对象,这样我们才能把数据保存到数据库中。

drf介绍和快速使用

基于Django编写符合restful规范的接口 假设以BOOK表为例,写它的5个接口

drf之APIview源码分析

执行流程分析:

  1. 包装了新的request
  2. 执行了认证、频率、权限, 这三大认证
  3. 全局异常处理,在视图类的方法中执行报错,会被异常捕获做异常处理
  4. 去除了CSRF认证

分析

BookDetailView.as_view()

源代码

APIView 的源代码(缩略版)

@classmethod  
def as_view(cls, **initkwargs):  
    view = super().as_view(**initkwargs)   # 直接去父级VIEW里面的as_view执行闭包函数
    return csrf_exempt(view)   # 去掉CSRF认证,相当于在视图层上面添加了去除装饰器

@classonlymethod  
def as_view(cls, **initkwargs):   
    def view(request, *args, **kwargs):  
        self = cls(**initkwargs)  
        self.setup(request, *args, **kwargs)  
        if not hasattr(self, 'request'):  
            raise AttributeError(  
            "%s instance has no 'request' attribute. Did you override "  
            "setup() and forget to call super()?" % cls.__name__  
            )  
        return self.dispatch(request, *args, **kwargs)  
    view.view_class = cls  
    view.view_initkwargs = initkwargs  

    # take name and docstring from class  
    update_wrapper(view, cls, updated=())  

    # and possible attributes set by decorators  
    # like csrf_exempt from dispatch  
    update_wrapper(view, cls.dispatch, assigned=())  
    return view