• Django与drf 源码视图解析


    0902自我总结

    Django 与drf 源码视图解析

    一.原生Django CBV 源码分析:View

    """
    1)as_view()是入口,得到view函数地址
    2)请求来了调用view函数,内部调用dispatch函数完成请求分发
    3)dispatch函数将请求方式映射成视图类的同名方法,完成请求的处理,得到相应
    4)再将相应的结果一层层返回
    """
    

    二.drf CBV 源码分析:APIView

    """
    1)as_view()是入口,得到view函数地址,在范围view函数地址时局部禁用csrf认证
    2)请求来了调用view函数,内部调用(APIView类的)dispatch函数完成请求分发
    3)dispatch函数 二次封装request、完成三大认证后,再将请求方式映射成视图类的同名方法,完成请求的处理,得到相应,再对相应做渲染处理
    4)再将相应的结果一层层返回
    """
    

    三.APIView做的处理

    • as_view: 就干了一件事,禁用csrf认证

    • dispatch:

      • 1)二次封装request
      • 2)三大认证

    四.drf 的局部渲染和全局渲染

    通过看了源码我们对于渲染内容是JSONRenderer还是BrowsableAPIRenderer

    JSONRenderer与BrowsableAPIRenderer的导入

    from rest_framework.renderers import JSONRenderer from rest_framework.renderers import BrowsableAPIRenderer

    • 局部设置

      • 在我们定义基础APIView的类添加renderer_classes = [JSONRenderer]这样网页就不会出现渲染只显示js数据

      例如

      class UserAPIView(APIView):
        renderer_classes = [JSONRenderer]
      
          def get(self, request, *args, **kwargs):
              print(request.query_params)
              data = {
                  'status': 0,
                  'msg': 'get ok',
                  'results': [],
                  'token': '123.12321.231'
              }
              return Response(
                  data=data,
                  status=status.HTTP_200_OK,
                  headers={'Token': '123as.masd21.asd213sd'},
                  content_type='application/json'  # 默认就是application/json
              )
      
    • 全局设置在setting

      # drf配置
      REST_FRAMEWORK = {
          # 响应的渲染模块
          'DEFAULT_RENDERER_CLASSES': [
              'rest_framework.renderers.JSONRenderer',
              'rest_framework.renderers.BrowsableAPIRenderer',
          ],
          'DEFAULT_PARSER_CLASSES': [
              'rest_framework.parsers.JSONParser',  # 'application/json'
              'rest_framework.parsers.FormParser',  # 'application/x-www-form-urlencoded'
              'rest_framework.parsers.MultiPartParser'  # multipart/form-data
          ],
      }
      
  • 相关阅读:
    网址大全
    HTTPS的页面发送不了HTTP请求?——关于混合内容
    Prometheus node_exporter grafana部署安装
    seafile部署安装
    vnc服务器和windows2012密钥
    【转】缓存淘汰算法系列之3——FIFO类
    【转】缓存淘汰算法系列之2——LFU类
    【转】缓存淘汰算法系列之1——LRU类
    【转】缓存、缓存算法和缓存框架简介
    【转】Sizeof与Strlen的区别与联系
  • 原文地址:https://www.cnblogs.com/pythonywy/p/11448967.html
Copyright © 2020-2023  润新知