django框架 restful规范 CBV源码分析

时间:2022-04-24 20:08:24

 CBV源码分析

路由如果这么配置:url(r'^test/', views.Test.as_view()),
        请求通过中间件后进入路由--->根据路由匹配,一旦成功,会执行后面函数(request)---》本质就是执行了as_view内部的view函数----》内部又调用了self.dispatch---->根据请求方式,执行不同的方法(必然get请求,就会执行咱么写的视图类的get方法)

 

django编写resful接口的时候,Jsonresponse返回的字典如果里面有列表,需要加上safe= False

如果字典里面有中文会显示成二进制,我们要知道Jsonresponse内部其实就是做了一个json.dump操作,要让他不显示二进制需要在json.dumps(data,ensure_ascII = False),Jsonresponse有个参数json_dumps_param可以给他传哥字典,然后内部打散传给json.dumps,json_dumps_param={'ensure_ascII':' False'}

drf:APIView 的源码,Requset的源码
    -安装:
        -pip3 install djangorestframework
        -pycharm中安装
    -使用
        -第一步,再写视图,都写cbv
            from rest_framework.views import  APIView
            class Books(APIView):
                pass
        -在setting中配置
            INSTALLED_APPS= [
                    。。。。。
                'rest_framework'
            ]

源码分析:
        继承了APIView 之后:
            -1 所有的请求都没有csrf的认证了
            -2 在APIView中as_view本质还是调用了父类的as_view(View的as_view)
            -3 as_view中调用dispatch  -----》这个dispatch是APIView的dispatch

 

APIVIew的dispatch方法:
        -1 对原生request对象做了一层包装(面向对象的封装),以后再用的request对象都新的request对象
        -2 在APIView中self.initial(request, *args, **kwargs),里面有频率控制,权限控制和认证相关
        -3 根据请求方法执行咱们写的视图类中的相应方法
            --视图类中方法的request对象,已经变成了封装后的request
    -Request类:
        -1 原生的request是self._request
        -2 取以post形式提交的数据,从request.data中取(urlencoded,formdata,json格式)
        -3 query_params 就是原生request的GET的数据
        -4 上传的文件是从FILES中取
        -5 (重点)其他的属性,直接request.属性名(因为重写了__getattr__方法)
       

APIView里面执行的还是原来的的as_view,不过加了点东西

django框架 restful规范 CBV源码分析

csrf_exempt(view)只要是继承了APUIView的接口都没有crsf校验

 之后走的dispatch就是走的APIView里面的

 

APIVIew的dispatch方法对原生request对象做了一层包装(面向对象的封装),

django框架 restful规范 CBV源码分析

 

以后再用的request对象都新的request对象
        -2 在APIView中self.initial(request, *args, **kwargs),里面有频率控制,权限控制和认证相关

django框架 restful规范 CBV源码分析