Django与drf 源码视图解析

前端之家收集整理的这篇文章主要介绍了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
        ],}
    

猜你在找的Django相关文章