二,Request和Response

概述

在DRF中,引入了一个Request和Response对象进行请求和响应,这两个对象分别继承于Djaong中常规的HttpRequest和SimpleTemplateResponse,相比其父类,它们提供了更灵活的请求解析和响应内容。

1.Request

Request类继承于Django中常规的HttpRequest,相比HttpRequest增加了灵活的请求解析和请求认证的支持。

1.1.解析请求(Request Parsing)

REST框架中提供了多种用于解析request的类,如JSONParser,FormParser等等,Request对象可以像处理form数据一样处理JSON数据和其他媒体类型的数据。经常我们会将请求解析为JSON数据的形式进行响应。

DRF默认使用了JSONParser类进行解析,因此我们在返回JSON数据时不需要做任何工作,当然DRF中还提供了其他解析类,可在配置文件中进行配置(不过貌似没这个必要):

REST_FRAMEWORK = {
    ‘DEFAULT_PARSER_CLASSES‘: (
        ‘rest_framework.parsers.JSONParser‘,
    )
}

Request中和请求解析相关的属性有以下三个:

request.data

request.data是Request对象的核心属性,它会返回请求体中所有的解析内容。能够处理任何数据,如文件和表单数据并且对适用于POST、PUT、PATCH方式请求。

request.query_params

该属性会返回请求体中的查询参数,如假设通过GET方式请求http://127.0.0.1:8000/show/?name=zhangsan,则request.query_params为:

{ "name": "zhangsan" }

NOTE: 不仅仅是GET请求,其他请求方式也可能会带有查询参数。

request.parsers

该属性会返回当前解析类的list,如果用户通过parser_classes设置,则读取设置值,如果用户没有设置,则读取默认值DEFAULT_PARSER_CLASSES的值,可在请求时print(request.parsers)查看该属性值:

[
<rest_framework.parsers.JSONParser object at 0x05D61E70>,
<rest_framework.parsers.FormParser object at 0x05D7F8F0>,
<rest_framework.parsers.MultiPartParser object at 0x05D7F950>
]

1.2.身份验证(Authentication)

DRF中提供了按请求进行认证的机制,且有如下特点:

  • 1 .对API的不同部分使用不同的认证策略;
  • 2.支持多种身份验证策略;
  • 3.对每个请求提供了用户和token信息。

关于身份验证和权限认证会在之后的文章中进行总结,这里只看Request中和身份验证相关的几个属性。

request.user

该属性返回请求的用户,如果请求经过身份验证,则返回django.contrib.auth.models.User;如果未经过身份验证,则返回django.contrib.auth.models.AnonymousUser.

request.auth

该属性值返回身份验证上下文,它取决于所使用的身份验证策略,但一般在request.auth中带有Token,如果请求未经过身份验证,则该值为None.

request.authenticators
该属性值返回身份验证的list,如果用户设置,则读取authentication_classes的值,如果没有设置,则读取默认值DEFAULT_AUTHENTICATORS的值,可在请求时通过print(request.authenticators)查看该属性值:

[
<rest_framework.authentication.SessionAuthentication object at 0x05850950>,
<rest_framework.authentication.BasicAuthentication object at 0x05850970>
]

2.Response

Response类继承于Django的SimpleTemplateResponse,相比于HttpResponse和它的父类,Response只是提供了一个更好的界面,用于返回内容协商的Web API响应,可以呈现为多种格式。因此对于后端开发人员来说,很方便进行API的测试。如在浏览器进行请求时,界面就是Response提供的:

Response对象的创建

和HttpResponse对象相比,Response不需要通过实例化Render进行渲染,而是直接传入未渲染的数据。由于Response的渲染器无法处理复杂类型的数据,如Django中的Model实例,因此,需要在响应之前通过Serializer类进行序列化操作,将复杂类型序列化为Python原始数据类型。

Response使用时需要进行导入:

from rest_framework.response import Response

其构造方法如下:

Response(data, status=None)

data

响应给客户端的序列化后的数据

status

响应状态码,默认为200.

在DRF中对每个响应码都提供了更明确的标识符,接下来我们将对这个响应码标识符进行总结。

3.状态码(Status Code)

REST框架中提供了一些表示状态码的标识符,相比起数字,可以更容易在代码设计过程中理解,使用时需要导入其所在模块:

from rest_framework import status

分为5大类:

Informational - 1xx

HTTP_100_CONTINUE
HTTP_101_SWITCHING_PROTOCOLS

Successful - 2xx

HTTP_200_OK
HTTP_201_CREATED
HTTP_202_ACCEPTED
HTTP_203_NON_AUTHORITATIVE_INFORMATION
HTTP_204_NO_CONTENT
HTTP_205_RESET_CONTENT
HTTP_206_PARTIAL_CONTENT
HTTP_207_MULTI_STATUS

Redirection - 3xx

HTTP_300_MULTIPLE_CHOICES
HTTP_301_MOVED_PERMANENTLY
HTTP_302_FOUND
HTTP_303_SEE_OTHER
HTTP_304_NOT_MODIFIED
HTTP_305_USE_PROXY
HTTP_306_RESERVED
HTTP_307_TEMPORARY_REDIRECT

Client Error - 4xx

HTTP_400_BAD_REQUEST
HTTP_401_UNAUTHORIZED
HTTP_402_PAYMENT_REQUIRED
HTTP_403_FORBIDDEN
HTTP_404_NOT_FOUND

Server Error - 5xx

HTTP_500_INTERNAL_SERVER_ERROR
HTTP_501_NOT_IMPLEMENTED
HTTP_502_BAD_GATEWAY
HTTP_503_SERVICE_UNAVAILABLE
HTTP_504_GATEWAY_TIMEOUT
HTTP_505_HTTP_VERSION_NOT_SUPPORTED
HTTP_507_INSUFFICIENT_STORAGE
HTTP_511_NETWORK_AUTHENTICATION_REQUIRED

原文地址:https://www.cnblogs.com/yoyo1216/p/10444106.html

时间: 2024-10-10 20:25:26

二,Request和Response的相关文章

Servlet(二)之request和response

一.简介 web服务器收到客户端的Http请求后,会针对每一次请求,分别创建一个用于代表请求的request对象和代表响应的response对象. request和response既然代表请求和响应,那么我们要获取客户端提交过来的数据,只需要找request对象就可以了,要向客户机输出数据,仅仅需要找response对象就行了. Response对象 二.响应 响应行 public void setStatus(int sc)设置状态码 响应头:key:value的形式,一个key可以对应一个v

Fiddler抓包4-工具介绍(request和response)

前言 本篇简单的介绍下fiddler界面的几块区域,以及各自区域到底是干什么用的,以便于各好的掌握这个工具 一.工具简介 1.第一块区域是设置菜单,这个前面2篇都有介绍 2.第二块区域是一些快捷菜单,可以点下快捷功能键 3.第三块左边是抓捕的请求会话列表,每一个请求就是一个会话 4.第四块右边上方区域是request请求的详细信息,可以查看headerd.cookies.raw.json等 5.第五块右边下方区域就是response信息,可以查看服务端返回的json数据或其它信息 6.第六块区域

ASP.NET中的Request、Response、Server对象

Request对象 Response.Write(Request.ApplicationPath) //应用根路径Request.AppRelativeCurrentExecutionFilePath //当前执行请求相对于应用根目录的虚拟路径,以-开头Request.PhysicalApplicationPath //当前应用的物理路径,如 D:\TEST\WEBRequest.PhysicalPath //当前请求的物理路径,如 D:\TEST\WEB\a.aspxRequest.RawUr

【黑马程序员】第8课:Request与Response详解

<pre> day08 昨天内容回顾 (1)servlet三种实现的方式 (2)servlet的生命周期 *三个方法 init service  destroy (3)URL-Pattern的配置有三种 (4)路径的问题 *绝对路径 /day09/.... *重定向和转发 (5)ServletConfig对象 *初始化参数的配置 <init-param> <param-name> <param-value> ..... (6)ServletContext对象

javaweb学习总结二十五(response对象的用法一)

一:Reponse对象的概念 当客户端发送http请求时,服务器端会对每一次请求,创建request对象和response对象. response对象包括三个部分:响应头.响应状态码以及响应体 二:response对象案例分析 1:向客户端输出中文数据 1 package com.hlcui.servlet; 2 3 import java.io.IOException; 4 import java.io.OutputStream; 5 import java.io.PrintWriter; 6

Request和response解析

Request 和 Response 对象起到了服务器与客户机之间的信息传递作用.Request 对象用于接收客户端浏览器提交的数据,而 Response 对象的功能则是将服务器端的数据发送到客户端浏览器. 一.Request对象的五个集合: QueryString:用以获取客户端附在url地址后的查询字符串中的信息. 例如:stra=Request.QueryString ["strUserld"] Form:用以获取客户端在FORM表单中所输入的信息.(表单的method属性值需要

servlet中request和response

转自:http://www.cnblogs.com/xdp-gacl/p/3798347.html 一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息. 二.Request常用方法 2.1.获得客户机信息 getRequestURL方法返回客户端发出请求时的完整URL. getRequestURI方法返回请求

Request、Response、Session对象

Request 和 Response 对象起到了服务器与客户机之间的信息传递作用.Request 对象用于接收客户端浏览器提交的数据,而 Response 对象的功能则是将服务器端的数据发送到客户端浏览器. 一.Request对象的五个集合: QueryString:用以获取客户端附在url地址后的查询字符串中的信息. 例如:stra=Request.QueryString ["strUserld"] Form:用以获取客户端在FORM表单中所输入的信息.(表单的method属性值需要

Struts2框架之application、Request、Response、paramaters、Session实现及理解(案例驱动)

Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具.Cacti是通过 snmpget来获取数据,使用 RRDtool绘画图形,而且你完全可以不需要了解RRDtool复杂的参数.它提供了非常强大的数据和用户管理功能,可以指定每一个用户能查看树状结构.host以及任何一张图,还可以与LDAP结合进行用户验证,同时也能自己增加模板,功能非常强大完善.界面友好.软件 Cacti 的发展是基于让 RRDTool 使用者更方便使用该软件,除了基本的 Snmp 流量