06-REST Framework - API
2021-06-04 14:05
                         标签:依赖   red   错误   必须   restful   地方   com   update   backend    # Django REST Framework       - django-admin startproject TlxyDRF # 序列化/反序列化-DRF # 实验步骤           - 返回的构造方式 - API调试工具 06-REST Framework - API 标签:依赖   red   错误   必须   restful   地方   com   update   backend    原文地址:https://www.cnblogs.com/zifeng001/p/10849589.html
# 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的主要任务
      - python manage.py startapp case01
      - 配置settings
      - 配置urls    
      - 创建三个模型:Student,Teacher, ClassRoom
      - 创建序列化器
      - 创建视图聚合
# 序列化
- 序列化: 把系统运行中的一些实例等转换成一种可直接表示出来的格式,用来保存,传输等
- 反序列化: 序列化的反操作
- 创建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常用方法提供了支持
      - 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
上一篇:Windows10组件移除
下一篇:Laravel 开发 API
文章标题:06-REST Framework - API
文章链接:http://soscw.com/index.php/essay/90429.html