一、Request

在Rest Framework 传入视图的request对象已经不再是Django默认的HTTPResponse对象了,而是Rest Framework提供的Request类的对象了。

但是Request会在接受到请求后会自动根据Content-type的数据类型进行解析为[QueryDict]对象,也就是说它会自动根据前端发送的数据格式进行解析。

源码分析

# from rest_framework.request import Request

def __init__(self, request, parsers=None, authenticators=None,
negotiator=None, parser_context=None):
# 先判断传入的request是不是原生的HttpResponse的对象,为了避免套娃
assert isinstance(request, HttpRequest), (
.format(request.__class__.__module__, request.__class__.__name__)
)
# 二次封装request,将原生request作为drf request对象的 _request 属性
self._request = request # 点拦截,当新request.的时候触发
def __getattr__(self, attr):
try:
return getattr(self._request, attr) # 通过反射,获取原生request对象,取出属性或方法
except AttributeError:
return self.__getattribute__(attr)

常用属性

request.data:返回解析后的请求体数据,不仅支持表单类型数据,也支持JSON数据

request.query_params:和Django原生的request.GET相同,名字不一样而已

@property
def query_params(self):
return self._request.GET # 还是原来那个

二、Response

这是Rest Framework提供的响应类,它会把数据内容转换成符合前端的数据类型,它是根据请求头中的Accept来自动转换响应数据到对应格式。没有的话就是默认的,可以通过以下配置:

REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': ( # 默认响应渲染类
'rest_framework.renderers.JSONRenderer', # json渲染器
'rest_framework.renderers.BrowsableAPIRenderer', # 浏览API渲染器
)
}

参数说明

# from rest_framework.response import Response

def __init__(self, data=None, status=None,
template_name=None, headers=None,
exception=False, content_type=None):

data:返回要被序列化的数据,字典

status:状态码,默认200

template:模板名称,可以自定义模版

headers:响应头,可以往响应头放东西,就是一个字典

content_type:响应的编码格式,(application/json或text/html)

常用属性

.data:传给response对象序列化后没有render的数据

.status_code:状态码

.content:render后的响应数据

最新文章

  1. visual studio code + Nodejs + Typescritpt + angularjs2 + bootstrap 环境搭建/Elementary os
  2. [Angularjs]angular ng-repeat与js特效加载先后导致的问题
  3. 你可能不知道的SQL问题
  4. BZOJ 3563 DZY Loves Chinese
  5. JY02-HTML/CSS-京东01 定位是很粗暴的页面布局方法
  6. JSON字符串和JS对象
  7. (转)Java.lang.reflect.Method invoke方法 实例
  8. VB6文件操作自定义函数合集之一
  9. Spring 的IOC和AOP总结
  10. python连接mysql数据库读取数据
  11. JDK1.7 的 HashMap
  12. 可遇不可求的Question之error: Failed dependencies: MySQLconflicts 错误篇
  13. Unity3D学习笔记(二十七):MVC框架下的背包系统(2)
  14. LoadRunner手写脚本、检查点、集合点、事务、思考时间
  15. 静态Map类型变量赋初始值
  16. Linux下查看文档指令
  17. 如何安装Apache
  18. ZOJ 2112 Dynamic Rankings (动态第k大,树状数组套主席树)
  19. 【CodeForces】713 C. Sonya and Problem Wihtout a Legend
  20. Linux 学习笔记之关机问题

热门文章

  1. sosreport -a --report
  2. Bash shell的特性
  3. centos更换损坏硬盘uuid改变导致系统不能正常启动处理
  4. Mybatis 逆向工程使用(Day_17)
  5. Spring Cloud 升级之路 - 2020.0.x - 6. 使用 Spring Cloud LoadBalancer (1)
  6. protege 构建本体
  7. Python数模笔记-PuLP库(1)线性规划入门
  8. 关于lua闭包导致引用无法释放内存泄露
  9. 论文阅读:MDNet: Learning Multi-Domain Convolutional Neural Networks for Visual Tracking
  10. MindSpore静态图语法支持