from rest_framework import status #保存了所有Http响应状态对应的常量
内容协商: drf在django原有的基础上,新增了一个request对象继承到了APIVlew视图类,并在django原有的HttpResponse响应类的基础上实现了一个子类rest_framework.response.Response响应类。这两个类,都是基于内容协商来完成数据的格式转换的。 request->parser解析类->识别客户端请求头中的Content-Type来完成数据转换成->类字典(QueryDict,字典的子类) response->renderer渲染类->识别客户端请求头的"Accept"来提取客户端期望的返回数据格式,→转换成客户端的期望格式数据
requst常用属性:
1.data
request.data 返回解析之后的请求体数据。类似于Django中标准的request.POST和request.FILES属性,但提供如下特性:
包含了解析之后的文件和非文件数据
包含了对POST、PUT、PATCH请求方式解析后的数据
利用了REST framework的parser解析器,不仅支持表单类型数据,也支持JSON数据
2.query_params
query_params,查询参数,也叫查询字符串(query string )
'request.query_paramsI `与Django标准的request.GET 相同,只是更换了更正确的名称而已。
request.query_params.get(" ") request.query_params.getlist(" ")
3.request._request
获取django封装的Request对象
Response:
REST framework提供了一个响应类Response,使用该类构造响应对象时,响应的具体数据内容会被转换(renderer渲染器)成符合前端需求的类型。
REST framework提供了Renderer渲染器,用来根据请求头中的Accept(接收数据类型声明)来自动转换响应数据到对应格式。如果前端请求中未进行声明Accept,则会采用Content-Type方式处理响应数据,我们可以通过配置来修改默认响应格式。
Response(data,status=None,template_name=None,headers=None,content_type=None)
drf的响应处理类和请求处理类不一样,Response就是django的HttpResponse响应处理类的子类。
data 数据不要是render处理之后的数据,只需传递python的内建类型数据即可,REST framework会使用renderer渲染器处理data 。
data不能是复杂结构的数据,如Django的模型类对象,对于这样的数据我们可以使用serializer序列化器序列化处理后(转为了Python字典类型)再传递给data参数。
参数说明:
date :为响应准备的序列化处理后的数据; status:状态码,默认200
template_name:模板名称,如果使用HTMLRenderer时需指明
headers:用于存放响应头信息的字典
content_type :响应数据的Content-Type,通常此参数无需传递,REST framework会根据前端所需类型数据来设置该参数
from rest_framework.views import APIView from rest_framework.response import Response from rest_framework import status#保存了所有Http响应状态对应的常量 class StudentAPIView(APIView): def get(self,request):#request是drf单独声明的请求处理对象 print(request) return Response({"msg":"ok"},status=status.HTTP_201_CREATED) def post(self,request): #获取请求体数据 print(request) print(request.data) print(request.data.get('name'))#接收到的数据已经被parse解析器转换成字典数据 #获取查询字符串 print(request.query_params)#http://43.139.0.146:8000/api/students/?classmate=6 return Response({"msg":"ok"})
标签:请求,framework,数据,request,响应,data,Response,drf From: https://www.cnblogs.com/fuck-Innovative-training/p/16662228.html