加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Django与drf 源码视图解析

发布时间:2020-12-15 17:10:03 所属栏目:大数据 来源:网络整理
导读:0902自我总结 Django 与drf 源码视图解析 一.原生Django CBV 源码分析:View """1)as_view()是入口,得到view函数地址2)请求来了调用view函数,内部调用dispatch函数完成请求分发3)dispatch函数将请求方式映射成视图类的同名方法,完成请求的处理,得到相

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
        ],}
    

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读