• 06-REST Framework


    # Django REST Framework
    # 1. REST
    - 前后端分离
    - API-ApplicationProgrammingInterface
      - 为了应付千变万化的前端需求
    - REST:RepresataionsStateTrans
      - 20000 Fieding博士提出
      - RESTful:遵守REST规范的技术设计的软件可以称为RESTful
    - REST规范
      - URL代表一个资源,一个资源应该是一个名词
      - 动作有HTTP的methode方法提供
      - URL应该包含版本信息,版本信息也可以放在HTTP协议中
      - 过滤信息,使用URL的参数代表过滤
      - 返回值: 每一个返回代码都有具体特定含义
      - 返回格式:推荐固定具体格式
    - DjangoRestFramework(DRF)
      - https://q1mi.github.io/Django-REST-framework-documentation/
      - 安装:pip install djangorestframework
      - 版本问题: version3.7是基于1.xx版本django,之后是2.xx版本django
      - django_filter依赖djangorestframework 3.7
    - DRF的主要任务

      - django-admin startproject TlxyDRF
      - python manage.py startapp case01
      - 配置settings
      - 配置urls
      - 创建三个模型:Student,Teacher, ClassRoom
      - 创建序列化器
      - 创建视图聚合


    # 序列化
    - 序列化: 把系统运行中的一些实例等转换成一种可直接表示出来的格式,用来保存,传输等
    - 反序列化: 序列化的反操作

    # 序列化/反序列化-DRF

    # 实验步骤
    - 创建project DRF2
    - 创建app MySer
    - settings
    # serializer的类型的参数
    - read_only: 仅用于序列化输出
    - write_only: 反序列化输入
    - required:反序列化时必须输入,默认是True
    - allow_null: 允许传入None
    - validators: 使用验证器
    # 创建serializer对象/使用
    - 构造方法

      Serializer(instance=None, data=empty, **kwarg)

    - 反序列化
      - 验证
        - is_valid:
          - 验证数据是否合法,返回boolean
          - 在使用从外部传入的数据之前,必须使用此函数进行验证
          - 如果验证失败,返回数据错误异常
      - validated_data:
          - 经过验证后的数据,存入此结构
    - 视图
      - DRF的试图从处理任务,处理流程等跟Django基本一致
      - 此视图基本是django视图的扩展
      - Request
        - 把请求解析成一个request实例
        - 属于DRF的,跟django的HttpRequest不太一样
        - 在得到Request之前有一个Parse对传入的数据请求进行解析
        - data属性
          - 请求数据体,类似于Django的request.POST, request.FILES
          - 在DRF中主要指的是Json
        - query_params
          - 所有传入的关键字


          api.tulingxueyuan.com/student/?name='liu'
          # 使用案例
          name = self.request.query_params.get('name', None)

      - user
        - 登录后的用户信息都在user中
        - 如果没有登录,则是anoymous
        - 可以用来判断用户是否登录成功
    - Response
      - rest_framework.response.Response
      - 用Renderer渲染器对返回内容进行渲染


        REST_FRAMEWORK = {
          'DEFAULT_RENDERER_CLASSES': ( # 默认响应渲染类
          'rest_framework.renderers.JSONRenderer', # json渲染器
          'rest_framework.renderers.BrowsableAPIRenderer', # 浏览API渲染器
          )
        }

      - 返回的构造方式
        - return Response(data, status=None, template_name=None, headers=None, content_type=None)
        - data: 返回的数据
        - status: 返回的状态码
          - 1xx: 信息告知
          - 2xx: 成功
          - 3xx:重定向
          - 4xx: 请求错误
          - 5xx: 服务器错误
    - 视图类
    - APIView
      - rest_framework.views.APIView
      - 是django中View的子类
      - 跟View有不同的地方
        - 传入传出数据用的是drf的请求和反馈类
        - 会引发并处理APIException
        - 在dispatch之前,会进行身份验证,权限检查,流量控制
      - 支持的属性有
        - authentication_classes: 列表或者元祖,身份验证类
        - permisson_classes: 进行权限验证
        - throttle_classes:流量控制类
      - 对API的访问提供了一些方便
        - HTTP-Method + 名词
        - 默认对HttpMethod常用方法提供了支持

    - API调试工具
      - chrome - postman
      - firefox - RESTClient

      - GenericAPIView
        - APIView的子类
        - 支持的属性
          - queryset:查询结果集
          - serializer_class: 视图使用的序列化器
          - panination_class: 分页控制器
          - filter_backends: 过滤器后端
          - lookup_field:查询条件字段,默认为pk
      - get_queryset: 返回查询结果集集合,经常需要重写
      - get_serializer_class:得到序列化器类
      - get_serializer: 得到序列化器
    - ListModelMixin
      - list(reqeust, *args, **kwargs)
    - CreateModelMixin
      - create(requst, *args, **kwargs)
    - RetrieveModelMixin
      - retrieve(...............)
    - UpdateModelMixin
      - update(..........)
    - DestroyModelMixin
      - destroy(.......)

    - ViewSet
      - 把一系列操作打包放入一个类中
      - list:GET
      - retrieve:GET + id
      - destroy:DELETE
      - update:UPDATE
      - create:POST

  • 相关阅读:
    java TreeSet的排序之定制排序
    java TreeSet的排序之自然排序
    java TreeSet
    java Set接口(元素不可以重复)
    poj 3735 Training little cats(构造矩阵)
    进程创建/退出父子关系的调整
    安装R语言的包的方法
    项目搭建之路(上)
    为什么百度首页的HTML源代码最后一行要多一行?浪费空间呀!
    机器学习之梯度下降法
  • 原文地址:https://www.cnblogs.com/zifeng001/p/10849589.html
Copyright © 2020-2023  润新知