博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django框架 restful规范 CBV源码分析
阅读量:6293 次
发布时间:2019-06-22

本文共 1547 字,大约阅读时间需要 5 分钟。

 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),里面有频率控制,权限控制和认证相关

 

转载于:https://www.cnblogs.com/tuanzibuku/p/11117635.html

你可能感兴趣的文章
如何看待程序与编程语言
查看>>
Android 开发笔记 “线程交互(Handler+Thread 和 AsyncTask)”
查看>>
Idea创建maven项目,报错xxx already exists in VFS
查看>>
使用ffmpeg实现合并多个音频为一个音频的方法
查看>>
【图解数据结构】 二叉树遍历
查看>>
laravel框架——路由
查看>>
inline-block兼容IE7
查看>>
random模块
查看>>
在二元树中找出和为某一值的所有路径
查看>>
使用PowerDesigner 15对现有数据库进行反向工程(转)
查看>>
怎样去思考问题 解决问题 zkc学长的福利
查看>>
[python]python2与python3版本的区别
查看>>
关于任务分配方式的一种设想
查看>>
11个很棒的 jQuery 图表库
查看>>
Android线程处理
查看>>
更新 TeX Live 软件包
查看>>
Exp3 免杀原理与实践 Week5 - 20165201
查看>>
嵌套查询
查看>>
关不掉.vbs
查看>>
算法11---红黑树的实现
查看>>