首页 > 其他分享 >drf提供的请求与响应

drf提供的请求与响应

时间:2022-09-06 17:13:00浏览次数:52  
标签:请求 framework 数据 request 响应 data Response drf

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

相关文章

  • OPTIONS请求后台处理 跨域Filter 支持跨域
    importcn.hutool.http.Method;importorg.springframework.web.filter.OncePerRequestFilter;importjavax.servlet.*;importjavax.servlet.http.HttpServletReques......
  • python requests.post() 请求中 json 和 data 的区别
    requests.post()请求中json和data的区别post请求中,可以使用data传递参数,也可以使用json传递参数。那么,两种方式有什么区别?1.如果参数为JSON数据,可以直接传入json参......
  • SpringMVC响应Ajax请求
    在分享今天的这个知识点之前先回顾一下使用ajax的目的:实现异步请求,客户端发送的请求携带数据到达服务器,服务器接收到请求后进行处理,然后返回处理后的数据。客户端接收到返......
  • Axios请求
    更多内容GET请求//Get请求axios.get("http://127.0.0.1:8090/data").then(function(ret){  console.log(ret);  console.log(ret.data);  console.log(......
  • get请求传对象数组参数
    有个请求,里面的参数有对象数组的情况,原来是post请求,后面接口改成get请求,那用axios请求的参数自然也从data改为params。第一次修改后的请求情况是这样的:整个路径......
  • TPS—响应时间—压力线程—资源使用率的关联关系
    TPS—响应时间—压力线程—资源使用率的关联关系TPS和响应时间和压力线程之间的关系TPS关系,仅供理解关系,并不能作为计算,因为有其他因素干扰,比如线程数增加,有等待时间的......
  • CSRF跨站点请求伪造(Cross Site Request Forgery)攻击
    CSRF跨站点请求伪造(CrossSiteRequestForgery)和XSS攻击一样,有巨大的危害性,就是攻击者盗用了用户的身份,以用户的身份发送恶意请求,但是对服务器来说这个请求是合理的,这样就......
  • Flask 学习-47.Flask-RESTX 自定义响应内容marshal_with
    前言Flask-RESTX提供了一种简单的方法来控制您在响应中实际呈现的数据或期望作为输入有效负载的数据。使用该fields模块,您可以在资源中使用所需的任何对象(ORM模型/自定......
  • [HTML+CSS] 20.媒体查询,响应式布局
    笔记来源:尚硅谷Web前端HTML5&CSS3初学者零基础入门全套完整版目录媒体查询响应式布局媒体查询媒体查询语法媒体类型媒体特性断点媒体查询响应式布局网页可以根据不......
  • 解决get请求特殊字符问题
    @BeanpublicServletWebServerFactorywebServerFactory(){TomcatServletWebServerFactoryfa=newTomcatServletWebServerFactory();fa.addConnectorCustomizers(co......