zoukankan      html  css  js  c++  java
  • django框架 restful规范 CBV源码分析

     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,不过加了点东西

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

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

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

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

  • 相关阅读:
    二、JVM — 垃圾回收
    一、JVM — Java内存区域
    四、JVM — 类文件结构
    java 如何重写equal 和hashcode方法(最佳实践)
    Java关于继承中的内存分配
    Linux — 基础知识
    Zookeeper — 应用场景
    分布式服务接口请求的顺序性如何保证?
    如何设计一个高并发系统?
    索引策略
  • 原文地址:https://www.cnblogs.com/tuanzibuku/p/11117635.html
Copyright © 2011-2022 走看看