您的位置:首页 > 编程语言 > Go语言

Django基础:drf 源码视图解析

2020-01-14 16:22 555 查看

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)再将相应的结果一层层返回
"""
推荐Python大牛在线分享技术 扣qun:855408893

领域:web开发,爬虫,数据分析,数据挖掘,人工智能

零基础到项目实战,7天学习上手做项目

三.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
    ],
    }
    • 点赞
    • 收藏
    • 分享
    • 文章举报
    学习-永无止境 发布了156 篇原创文章 · 获赞 8 · 访问量 2801 私信 关注
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: