zoukankan      html  css  js  c++  java
  • 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把一个个得到的对象传进去
  • 相关阅读:
    《数据结构》2.2顺序表(sequence list)
    《算法竞赛入门经典》6.3.1二叉树-小球下落
    java_时间戳与Date_相互转化
    java事物
    Mysql如何向存在外键的数据表中插入数据
    git基本配置
    mysql时间属性之时间戳和datetime之间的转换
    【转】变量命名(简短且无歧义)
    【转】mybatis实战教程(mybatis in action),mybatis入门到精通
    [转]DAO层,Service层,Controller层、View层
  • 原文地址:https://www.cnblogs.com/ljc-0923/p/10265335.html
Copyright © 2011-2022 走看看