Django项目总结:Rest Framework【2】

REST难点

 

www.django-rest-framework.org/tutorial/1-serialization/

【源码分析】

模型序列化

-- 正向序列化

  -- 将模型转换成JSON

-- 反向序列化

  -- 将JSON转换成模型

 

serialization

-- 在模块serializers

  -- HyperLinkedModelSerializer

    -- 序列化模型,并添加超链接

  -- Serializer

    -- 手动序列化

 

双R

-- Request

  -- rest_framework.request

  -- 将Django中的Request作为了自己的一个属性 _request

  -- 属性和方法

    -- content_type

    -- stream

    -- query_params

    -- data

      -- 同时兼容  POST,PUT,PATCH

    -- user

      -- 可以直接在请求上获取用户

      -- 相当于在请求上添加一个属性,用户对象

    -- auth

      -- 认证

      -- 相当于请求上添加了一个属性,属性值是token

    -- successful_authenticator

      -- 认证成功

-- Response

  -- 依然是HttpResponse的子类

  -- 自己封装的

    -- data 直接接受字典转换成JSON

    -- status  状态码

  -- 属性和方法

    -- rendered_content

    -- status_text

 

APIView

-- renderer_classes

  -- 渲染的类

-- parser_classes

  -- 解析转换的类

-- authentication_classes

  -- 认证的类

-- throttle_classes

  -- 节流的类

  -- 控制请求频率的

-- permission_classes

  -- 权限的类

-- content_negotiation_class

  -- 内容过滤类

-- metadata_class

  -- 元信息的类

-- versioning_class

  -- 版本控制的类

-- as_view()

  -- 调用父类中的as_view -> dispatch

    -- dispatch被重写(调用的是APIView中的dispatch)

    -- initialize_request

      -- 使用django的request构建了一个REST中的Request

      -- REST重写了request,并将django的request保存在_request

    -- initial

      -- perform_authentication

        -- @property 将方法修改为属性

        -- 执行用户认证

        -- 遍历我们的认证器

          -- 如果认证成功会返回一个元组

          -- 元组中的第一个元素就是 user

          -- 第二个元素就是 auth,token

      -- check_permissions

        -- 检查权限

        -- 遍历我们的权限检测器

          -- 只要有一个权限检测没通过

          -- 就直接显示权限被拒绝

          -- 所有权限都满足,才算是拥有权限

      -- check_throttles

        -- 检测频率

        -- 遍历频率限制器

          -- 如果验证不通过,就需要等待

    -- csrf_exempt

      -- 所有APIView的子类都是csrf豁免的

 

错误码

-- 封装 status模块中

-- 实际上就是一个常量类

 

针对视图函数的包装

-- CBV

  -- APIView

-- FBV

  -- 添加 @api_view装饰器

  -- 必须手动指定允许的请求方法

 

 

 

 

 

posted @ 2020-08-07 23:46  颗粒成仓  阅读(148)  评论(0编辑  收藏  举报