Django与drf 源码视图解析

0902自我总结

Django 与drf 源码视图解析

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

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

二.drf CBV 源码分析:APIView

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

三.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数据

    例如

    1class UserAPIView(APIView): 2 renderer_classes = [JSONRenderer] 3 4 def get(self, request, *args, **kwargs): 5 print(request.query_params) 6 data = { 7 'status': 0, 8 'msg': 'get ok', 9 'results': [], 10 'token': '123.12321.231' 11 } 12 return Response( 13 data=data, 14 status=status.HTTP_200_OK, 15 headers={'Token': '123as.masd21.asd213sd'}, 16 content_type='application/json' # 默认就是application/json 17 )
  • 全局设置在setting

    1# drf配置 2REST_FRAMEWORK = { 3 # 响应的渲染模块 4 'DEFAULT_RENDERER_CLASSES': [ 5 'rest_framework.renderers.JSONRenderer', 6 'rest_framework.renderers.BrowsableAPIRenderer', 7 ], 8 'DEFAULT_PARSER_CLASSES': [ 9 'rest_framework.parsers.JSONParser', # 'application/json' 10 'rest_framework.parsers.FormParser', # 'application/x-www-form-urlencoded' 11 'rest_framework.parsers.MultiPartParser' # multipart/form-data 12 ], 13}
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java将前端的json数组字符串转换为列表

记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang

Django与drf 源码视图解析 - HelloWorld