Restful规范

1,REST风格

  • 资源 网页中能看到的都是资源
  • uri 统一资源标识符
  • url 统一资源定位符
  • 统一资源接口  
    •   对资源的操作根据HTTP请求方式的不同进行不同的操作
    •         遵循HTTP请求方式的语义
  • 前后端传输的是资源的表述(前后端传输的是字符串的形式,每次传输时,都需要数据格式的转化)
  • 展现的是资源的状态

2,凡是遵循REST风格实现的前后端交互都叫RESTful架构

  • 核心思想:
    •   面向资源去编程,url中尽量用名词,不要用动词
    •         根据HTTP请求方式方式的不同对资源进行不同的操作(增删改查)
  • 在url中的体现:
    •   体现版本
      •   http://v2bootcss.com/
      •        http://bootcss.com/v2
    •        体现是否是API
      •   https://v2.bootcss.com/api
    •   有过滤条件
      •   https://v2.bootcss.com/course?page=1
  • 在返回值中
    •   携带状态码
    •        返回值  
      •   get返回值查看的所有或者单条数据
      •        post 返回新增的这条数据
      •        put/patch 返回的是更新的这条数据
      •        delete 返回值空
    •   携带错误信息
    •        携带超链接 

3,FBV和CBV的区别

  • 3.1,FBV是一条路由对应一个视图函数
  • 3.2,CBV是多条路由或一个路由对应一个业务处理的主要是在类中继承了View,会根据不同的请求方式,会执行相应的方法,具体代码如下:
 # 先处理请求的方式,将大写转换成小写,然后判断是否存在于请求的方式中
        # http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']
        if request.method.lower() in self.http_method_names:
            # 如果存在相应的方法就通过反射执行相应的方法,反射的时候给一个默认值,当不存在相应的方法时就
            # 就抛一个这样的错误:'Method Not Allowed (%s): %s', request.method, request.path,
            #             extra={'status_code': 405, 'request': request}
            #         )
            handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
        else:
            # 否则也抛一个这样,此方法不被允许的错误:'Method Not Allowed (%s): %s', request.method, request.path,
            #             extra={'status_code': 405, 'request': request}
            #         )
            handler = self.http_method_not_allowed
        return handler(request, *args, **kwargs)

4,在rest_framework中一般都用APIviw,(其实APIView是继承View的)

  • 4.1,APIView继承了View
  • 4.2,APIView重写了as_view以及dispatch方法
  • 4.3,在dispatch里重新封装了request
    • 4.3.1,request = Request()
    • 旧的request变成了_request
  • 4.4,get请求数据(此时的get是查看的意思)
    • request.query_params
  • 4.5,post请求的数据(此时的post是增加)
    • request.data

具体代码如下:

APIView和View的区别代码

5,rest_framework的安装(这是一个框架)

  1. 在cmd或者python的命令终端输入下载的命令:pip install djangorestframework
  2. 在setting的app中注册rest_framework

6,在python中的序列化的方法

View Code

总结:Python的数据类型转化成json格式的数据类型

  1. 第一版用values以及JsonResponse实现序列化
  2. 第二版用django的serialize实现序列化
    • 缺点:不能很好的处理外键关系
  1. 第三版用DRF实现序列化
    1. 第一步声明序列化器
    2. 第二步使用我们的序列化器序列化queryset
      1. 把模型对象放入序列化器进行字段匹配
      2. 匹配上的字段进行序列化,匹配不上的丢弃
    3. 序列化好的数据存在于ser_obj.data中
  2. 外键关系的序列化是嵌套的序列化器对象,注意当时queryset时,要用many=True把一个个得到的对象传进去
原文地址:https://www.cnblogs.com/ljc-0923/p/10265335.html