APIView源码与Request源码分析
一、APIView源码分析
1、安装djangorestframework
2、使用
drf是基于cbv view的封装,所以必须写cbv
①第一步:写视图,必须写cbv
路由配置:
from rest_framework.views import APIView
from django.http import JsonResponse
class Books(APIView):
def get(self, request):
# request是被封装后的request,原生的request在request._request
# 如果想用原生request中的属性,还是原来的用法,因为Request重写了__getattr__方法
# 原生django只能处理urlencoded和form_data编码,如果是json格式,原生django是不能处理的,需要自己从body中取出来自行处理
# request.data 不管前端传数据的编码格式是urlencoded,form_data或者是json,都从里面取值
# request.data
# request.query_params 是原来django原生的GET中的数据
# self.FILES 就是上传的文件
dic = {'name': 'lqz', 'age': 30, 'height': 178, 'hobby': ['football', 'swimming', 'running']}
return JsonResponse(dic)
②第二步:
在setting中配置:INSTALLED_APPS= ['rest_framework']
3、源码分析
继承了APIView之后:
①所有的请求都没有csrf的认证了
②在APIView中as_view本质还是调用了父类的as_view(View的as_view)
③as_view中调用了dispatch(这个dispatch是APIView的dispatch)
注意:找dispatch不能直接点源码找先要在类里找类没有再去父类里面找
APIView的dispatch方法:
①对原生request对象做了一层包装(面向对象的封装),
以后再用的request对象都新的request对象
②在APIView中self.initial(request, *args, **kwargs),里面有频率控制,权限控制和认证相关
③根据请求方法执行咱们写的视图类中的相应方法 (视图类中方法的request对象,已经变成了封装后的request)
二、request源码分析
①新的request为啥能点出原来的属性:
内部反射在原生的request取出GET,POST,因为Request重写了__getattr__方法,跟原来用法一样
②原生django只能处理urlencoded和form_data编码,如果是json格式,原生django是不能处理的,需要自己从body中取出来自行处理
不管前端传数据的编码格式是urlencoded,form_data或者是json,都从request.data里面取值
③请求里面可以带过滤条件这里就是用到query_params,是原来django原生的GET的数据
④上传的文件是从FILES中取(request.FILES)
总结:
继承了APIView之后:
所有的请求都没有csrf的认证了
在APIView中as_view本质还是调用了父类的as_view(View的as_view)
as_view中调用了dispatch(这个dispatch是APIView的dispatch) APIView的dispatch方法:
对原生的request对象做了一层包装(面向对象的封装),以后再用的request对象都是新的request对象
在APIView中self.initial(request, *args, **kwargs),里面有频率控制,权限控制和认证相关
根据请求方法执行咱们写的视图类中的相应方法(视图类中方法的request对象,已经变成了封装后的request) request类
原生的request是self._request
取以post提交的数据,从request.data中取出(urlencoded, form_data, json格式) query_params 就是原生request的GET的数据
上传的文件是从FILES中取(request.FILES)
(重点)其他的属性,直接request.属性名(因为重写了__getattr__方法) class Books(APIView):
def get(self, request):
# request是被封装后的request,原生的request在request._request
# 如果想用原生request中的属性,还是原来的用法,因为Request重写了__getattr__方法
# 原生django只能处理urlencoded和form_data编码,如果是json格式,原生django是不能处理的,需要自己从body中取出来自行处理
# request.data 不管前端传数据的编码格式是urlencoded,form_data或者是json,都从里面取值
# request.data
# request.query_params 是原来django原生的GET中的数据
# self.FILES 就是上传的文件
dic = {'name': 'lqz', 'age': 30, 'height': 178, 'hobby': ['football', 'swimming', 'running']}
return JsonResponse(dic)
APIView源码与Request源码分析的更多相关文章
- APIview的请求生命周期源码分析
目录 APIview的请求生命周期源码分析 请求模块 解析模块 全局配置解析器 局部配置解析器 响应模块 异常处理模块 重写异常处理函数 渲染模块 APIview的请求生命周期源码分析 Django项 ...
- 老李推荐:第6章8节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-小结
老李推荐:第6章8节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览-小结 本章我们重点围绕处理网络过来的命令的MonkeySourceNetwork这个事 ...
- 老李推荐:第6章7节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-注入按键事件实例
老李推荐:第6章7节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览-注入按键事件实例 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜 ...
- 老李推荐:第6章6节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-命令队列
老李推荐:第6章6节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览-命令队列 事件源在获得字串命令并把它翻译成对应的MonkeyEvent事件后,会把这些 ...
- 老李推荐:第6章4节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-翻译命令字串
老李推荐:第6章4节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览-翻译命令字串 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自 ...
- 老李推荐:第6章5节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-事件
老李推荐:第6章5节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览-事件 从网络过来的命令字串需要解析翻译出来,有些命令会在翻译好后直接执行然后返回,但有 ...
- 老李推荐:第6章3节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-命令翻译类
老李推荐:第6章3节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览-命令翻译类 每个来自网络的字串命令都需要进行解析执行,只是有些是在解析的过程中直接执行 ...
- 老李推荐:第6章2节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-获取命令字串
老李推荐:第6章2节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览-获取命令字串 从上一节的描述可以知道,MonkeyRunner发送给Monkey的命令 ...
- 老李推荐:第5章7节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 循环获取并执行事件 - runMonkeyCycles
老李推荐:第5章7节<MonkeyRunner源码剖析>Monkey原理分析-启动运行: 循环获取并执行事件 - runMonkeyCycles poptest是国内唯一一家培养测试开 ...
随机推荐
- 3. Linux的shell编程
Shell 是一个用 C 语言编写的程序, 通过 Shell 用户可以访问操作系统内核服务.它类似于 DOS 下的 command 和后来的 cmd.exe.Shell 既是一种命令语言,又是一种程序 ...
- CSUST 2012 一个顶俩 (本校OJ题)(思维+树链剖分)
(点击这里查看原题,不保证可以进去....外网可能比较卡) Description A:一心一意 B:一个顶俩 最近QQ更新后那个成语接龙好像挺火的?但我只知道图论里一条边是一个顶俩个点的emm. 如 ...
- 2018.08.15【2018提高组】模拟A组 比赛总结
总结 T1 这题我一看,哇!好简单啊! 直接建立每一个字母的映射就可以了. 我很快就打完了程序,跳到下一题. 等到比赛快结束时,我才发现了一个可怕的数据: 1 abcdefghijklmnopqrst ...
- FFmpeg4.0笔记:采集系统声音
Github https://github.com/gongluck/FFmpeg4.0-study/tree/master/Cff // 采集系统声音 void test_systemsound() ...
- Windows 系统安装 Docker
详细方法参见官方文档. Win10 家庭版 安装Toolbox Win10 家庭版由于功能限制,不能直接安装 Docker for Windows, 需要使用 Toolbox 的形式进行安装. 确认版 ...
- 最好用linux版QQ
这个版本的qq是见过linux下做好用的qq,希望对大家有用; 安装简单,qq易用,不卡死,可以接收文件. 安装过程如下: git clone https://gitee.com/wszqkzqk/d ...
- 比较接口:Comparable和Comparator
Comparable和Comparator是两个用于定义对象之间比较规则的接口. 一.public interface Comparator<T> Comparator接口中有两个方法(不 ...
- session+验证码 学习
分析 LoginServlet类 @WebServlet("/loginServlet") public class LoginServlet extends HttpServle ...
- 上传模板到SAP资源库
事物代码:SMW0 -WEB资源库 如果创建后上载本地模板报错,说明没有维护文件类型,需要在导航栏的设置里维护MIME类型添加新的文件后缀名 维护好后再上载模板 ABAP下载模板:以下FORM可以参考 ...
- CentOS7搭建FastDFS V5.11分布式文件系统(二)
1.CentOS7 FastDFS搭建 前面已下载好了要用到的工具集,下面就可以开始安装了: 如果安装过程中出现问题,可以下载我提供的,当前测试可以通过的工具包: 点这里点这里 1.1 安装libfa ...