前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django与drf 源码视图解析

Django与drf 源码视图解析

作者头像
小小咸鱼YwY
发布2019-09-11 15:10:05
5610
发布2019-09-11 15:10:05
举报
文章被收录于专栏:python-爬虫python-爬虫python-爬虫

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
    ],
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0902自我总结
  • Django 与drf 源码视图解析
    • 一.原生Django CBV 源码分析:View
      • 二.drf CBV 源码分析:APIView
        • 三.APIView做的处理
          • 四.drf 的局部渲染和全局渲染
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档