参考文档

http://www.iamnancy.top/djangorestframework/Responses/

https://q1mi.github.io/Django-REST-framework-documentation/api-guide/requests_zh/

https://www.django-rest-framework.org/api-guide/responses/

1、Requests

1、Request类

Request类扩展了标准的HttpRequest
request.META 和 request.session 字典可以正常使用
由于实现原因,Request 类不会从 HttpRequest 类继承,而是使用组合扩展类

2、request.data

request.data 返回请求主体的解析内容

比request.POST 和 request.FILES更加强大

优点如下:
它包括所有解析的内容, 包括 文件或非文件 输入。
它支持解析除POST之外的HTTP方法的内容,这意味着你可以访问PUT和PATCH请求的内容。
它支持REST framework灵活的请求解析,而不仅仅支持表单数据。
例如,你可以以与处理传入表单数据相同的方式处理传入的JSON数据。

3、request.query_params

是request.GET的一个更准确的同义词。
任何HTTP方法类型可能包括查询参数,而不仅仅是GET请求。

4、parsers 解析器

APIView类或@api_view装饰器将根据view中设置的parser_classes集合或基于DEFAULT_PARSER_CLASSES设置,
确保此属性自动设置为Parser实例列表。

Note

、错误格式:
request.data可能会引发ParseError,
APIView类或@api_view装饰器将捕获错误并返回400 Bad Request响应 、无法解析的类型的请求
引发 UnsupportedMediaType 异常,
该异常并返回 Unsupported Media Type 响应

5、认证器authentication

1. request.user

request.user 通常会返回django.contrib.auth.models.User实例
未经身份验证的,默认值是django.contrib.auth.models.AnonymousUser实例

2. request.auth

request.auth 返回任何附加的认证上下文
未经认证的,返回None

3. authenticators

APIView 类或 @api_view 装饰器将根据视图上设置的 authentication_classes
DEFAULT_AUTHENTICATORS 设置确保将此属性自动设置为 Authentication 实例列表。

调用 .user 或 .auth 属性时可能会引发 WrappedAttributeError 异常
认证器 (authenticator) 作为标准 AttributeError

6、浏览器增强

1. request.method

request.method返回大写的请求方法 PUT,PATCH 和 DELETE 表单

2. request.content_type

返回HTTP请求正文的媒体类型的字符串对象

如果需要定义
确实需要访问请求的内容类型,则应该优先使用 .content_type 属性,而不是使用 request.META.get('HTTP_CONTENT_TYPE')

3. request.stream

返回一个代表请求主体内容的流。

2、Response响应

Response 类是 Django中 SimpleTemplateResponse 类的一个子类

除非由于某种原因你要对 REST framework 做大量的自定义,

否则你应该始终对返回对象的views使用 APIView 类或者 @api_view 函数。
这样做可以确保视图在返回之前能够执行 content negotiation 并且为响应选择适当的渲染器。

1、创建response

return Response(data, status=None, template_name=None, headers=None, content_type=None)

# 参数:
data :响应的序列化数据。
status :响应的状态代码。默认为200。另请参阅状态代码。
template_name :选择 HTMLRenderer 时使用的模板名称。
headers :响应中使用的 HTTP headers 的字典。
content_type :响应的内容类型。通常情况下,渲染器会根据内容协商的结果自动设置,但有些情况下需要明确指定内容类型。

1、restframework

Response 类使用的渲染器不能处理复杂的数据类型,

所以需要在创建 Response 对象之前将数据序列化为基本数据类型。

您可以使用 REST framework 的 Serializer 类来执行数据序列化,或者使用您自己的自定义序列化。

2、django
与常规 HttpResponse 对象不同,您不会使用渲染的内容实例化 Response 对象。相反,您传递的是未渲染的数据,可能由任何 Python 基元组成。
例如 Django 模型实例,

2、属性 Attributes

res = Response()

#res.data
Request 对象的未渲染内容。 #res.status_code
HTTP 响应的数字状态码 #res.content
响应的渲染内容。在访问 .content 之前,必须先调用 .render() 方法。 #res.template_name
只有当 HTMLRenderer 或其他自定义模板渲染器是响应的渲染器时才需要。
比如:之前的代码高亮显示 #res.accepted_renderer
用于渲染响应的渲染器实例。
从视图返回响应之前由 APIView 或 @api_view 自动设置 #res.accepted_media_type
由 content negotiation 阶段选择的媒体类型。
自动通过 APIView 或者 @api_view 在view返回response之前设置 #res.renderer_context
将传递给渲染器的 .render() 方法的附加的上下文信息的字典

3、标准 HttpResponse 属性

1. 设置headers

Response 类扩展了 SimpleTemplateResponse,并且响应中也提供了所有常用的属性和方法
```python
response = Response()
response['Cache-Control'] = 'no-cache'
```

2. .render()

调用此方法将响应的序列化数据渲染为最终响应内容

调用 .render() 时,响应内容将设置为在 accepted_renderer 实例上调用
.render(data,accepted_media_type,renderer_context) 方法的结果。

您通常不需要自己调用 .render(),因为它是由 Django 的标准响应循环处理的。

3、总结

1、Request和Response

  请求   响应
restframe   Request+序列化 序列化+Response
django HttpRequest HttpResponse

2、request.data与request.query_params

request.data POST请求
request.query_params 任何http请求,都有要查询,不仅仅是get

3、各种解析器,渲染器,xx器

APIView类或@api_view装饰器,内部自定制的

01_Request和Response的更多相关文章

  1. Response.Redirect引起的性能问题分析

    现象: 最近做的一个系统通过单点登录(SSO) 技术验证用户登录.用户在SSO 系统上通过验证后,跳转到该系统的不同模块.而跳转的时间一直维持子啊几分钟左右. 分析步骤: 在问题复现时抓取Hang d ...

  2. windows charles response 乱码解决办法

    使用windows 版本的charles来做代理,发现服务端返回的response会出现中文乱码的情况, 查看软件设置,遗憾的是并没有关于编码的选项. 好在charles windows版本安装目录下 ...

  3. 谈一谈Http Request 与 Http Response

    写在前面的话:今天来总结一下http相关的request和response,就从以下几个问题入手吧. ======正文开始======== 1.什么是HTTP Request 与HTTP Respon ...

  4. ashx中Response.ContentType的常用类型

    ashx中Response.ContentType的常用类型: text/plaintext/htmltext/xmlapplication/jsonimage/GIFapplication/x-cd ...

  5. 一个由Response.Redirect 引起的性能问题的分析

    现象: 某系统通过单点登录(SSO) 技术验证用户登录.用户在SSO 系统上通过验证后,跳转到某系统的主页上面.而跳转的时间很长,约1分钟以上. 分析步骤: 在问题复现时抓取Hang dump 进行分 ...

  6. request 对象和 response 对象

    Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象 HttpServletResponse HttpServletR ...

  7. C#、JAVA操作Hadoop(HDFS、Map/Reduce)真实过程概述。组件、源码下载。无法解决:Response status code does not indicate success: 500。

    一.Hadoop环境配置概述 三台虚拟机,操作系统为:Ubuntu 16.04. Hadoop版本:2.7.2 NameNode:192.168.72.132 DataNode:192.168.72. ...

  8. response和request的区别以及常见问题解决

    request是请求,即客服端发来的请求 response是响应,是服务器做出的响应 --------------------------------------------------------- ...

  9. Webform(五)——内置对象(Response、Request)和Repeater中的数据增删改

    一.内置对象 (一)Response对象 1.简介:response 对象在ASP中负责将信息传递给用户.Response对象用于动态响应客户端请求,并将动态生成的响应结果返回到客户端浏览器中,使用R ...

随机推荐

  1. [转帖]我最近研究了hive的相关技术,有点心得,这里和大家分享下。

    我最近研究了hive的相关技术,有点心得,这里和大家分享下. https://www.cnblogs.com/sharpxiajun/archive/2013/06/02/3114180.html 首 ...

  2. Tomcat中不能通过访问自己IP,但可以通过localhost/127.0.0.1访问

    一.问题如下:局域网内,自己机器部署了一个tomcat应用,在本机上可以通过如下方式访问引用.  http://localhost:8080/xxxx http://127.0.0.1:8080/xx ...

  3. CSS中的position和float

    对基础知识再度做个巩固和梳理. 一.position定位 (一):position的属性 1.absolute:生成绝对定位的元素,相对于最近一级定位不是static的父元素来进行定位: 2.rela ...

  4. Bootsrap表格表单及其使用方法

    bootstrap的使用 bootstrap中的js插件依赖于jQuery 因此jQuery要在bootstrap之前引入 参考官网标准引入方法和引入样式 排版 标题 Bootstrap和普通的HTM ...

  5. Spring Boot配置文件的加载顺序

    配置文件的加载顺序, 后加载的会覆盖先加载的:也就是properties配置文件的内容会替换掉.yml及.yaml文件的内容

  6. 多线程面试题之【三线程按顺序交替打印ABC的方法】

    建立三个线程,线程名字分别为:A.B.C,要求三个线程分别打印自己的线程名字,但是要求三个线程同时运行,并且实现交替打印,即按照ABCABCABC的顺序打印.打印10轮,打印完毕控制台输出字符串:&q ...

  7. Feign 客户端调用错误

    1.@RequestBody 必须要写在实现接口中 2.Feign 客户端调用的时候如果有参数的话,默认是发送post请求 3.服务接口中的请求参数必须要加上@RequestParam("r ...

  8. Spring Cloud Alibaba学习笔记(10) - Spring消息编程模型下,使用RocketMQ收发消息

    编写生产者 集成 添加依赖 <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId&g ...

  9. 1.MVC基础-初识MVC,与WebForm比较

    1.Net WebForm的开发模式

  10. 同步IO,异步IO,阻塞,非阻塞的定义与区别

    异步I/O 是指用户程序发起IO请求后,不等待数据,同时操作系统内核负责I/O操作把数据从内核拷贝到用户程序的缓冲区后通知应用程序.数据拷贝是由操作系统内核完成,用户程序从一开始就没有等待数据,发起请 ...