前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DRF的Request对象和Response对象

DRF的Request对象和Response对象

作者头像
zy010101
发布2021-12-16 13:13:20
1.6K0
发布2021-12-16 13:13:20
举报
文章被收录于专栏:程序员程序员

DRF的Request对象和Response对象

一旦使用了DRF的视图,那么传入视图的Request对象不在是Django的Request对象,而是DRF封装过后的Request对象。同样,DRF建议使用封装过的Response来返回HTTP响应,使用该类构造响应对象时,响应的具体数据内容会被转换(render渲染)成符合前端需求的类型。

Request对象

REST framework 的Request类扩展了标准HttpRequest,增加了对 REST framework 灵活的请求解析和请求身份验证的支持。由于实现原因,Request类不是从HttpRequest类继承,而是使用组合扩展该类。 因此,HttpRequest类的方法和属性依旧是可以使用的。

Request.data

Request对象的数据是自动根据前端发送数据的格式进行解析之后的结果。这样后端使用统一的方式来获取数据,无论前端传递的是表单,json还是其它格式。后端使用统一的方式接受数据即可。

代码语言:javascript
复制
@api_view(['POST'])
def post(request):
    data = request.data     # 获取请求体数据
    return Response(data)

包含了对POST、PUT、PATCH请求方式解析后的数据; 利用了REST framework的parsers解析器,不仅支持表单类型数据,也支持JSON数据。

如果需要上传文件,请阅读DRF上传文件

注意

代码语言:javascript
复制
在开发客户端应用程序时,请始终记住确保Content-Type在 HTTP 请求中发送数据时设置标头。

如果您不设置内容类型,大多数客户端将默认使用'application/x-www-form-urlencoded',这可能不是您想要的。

例如,如果您json使用带有.ajax() 方法的jQuery发送编码数据,则应确保包含该contentType: 'application/json'设置。

如果服务器和客户端之间约定好了使用json来传递信息,此时可以对默认解析器进行设置,在settings.py中加入下面的内容即可。

代码语言:javascript
复制
REST_FRAMEWORK = {
    'DEFAULT_PARSER_CLASSES': [
        'rest_framework.parsers.JSONParser',
    ]
}

也可以使用基于APIView类的视图设置用于单个视图或视图集的解析器。例如:

代码语言:javascript
复制
# 视图集
from rest_framework.parsers import JSONParser
from rest_framework.response import Response
from rest_framework.views import APIView

class ExampleView(APIView):
    """
    A view that can accept POST requests with JSON content.
    """
    parser_classes = [JSONParser]

    def post(self, request, format=None):
        return Response({'received data': request.data})

# 单个视图
from rest_framework.decorators import api_view
from rest_framework.decorators import parser_classes
from rest_framework.parsers import JSONParser

@api_view(['POST'])
@parser_classes([JSONParser])
def example_view(request, format=None):
    """
    A view that can accept POST requests with JSON content.
    """
    return Response({'received data': request.data})

Request.query_params

request.query_params与Django标准的request.GET相同,只是更换了更正确的名称而已。 无论请求方式是什么,URL中的参数,我们在DRF中总是使用request.query_params来获取。例如:

代码语言:javascript
复制
@api_view(['GET'])
def geta(request):
    data = request.query_params
    print(data)

    return Response(data)

我们发起的请求可以如下所示:

http://127.0.0.1:8888/people?username=123&email=123@123.com

返回的结果如下:

代码语言:javascript
复制
{
    "username": "123",
    "email": "123@123.com"
}

Response对象

REST Framework的Response继承自Django的SimpleTemplateResponse类。使用Response类只是为返回内容协商的 Web API 响应提供了一个更好的接口,可以呈现为多种格式。你也可以选择Django的HttpResponse或StreamingHttpResponse,都是可以的。不过DRF官方还是建议我们对继承自APIView类或使用@api_view进行装饰的函数,都返回Response对象。

使用了Response对象返回,默认会带有一定的样式。例如:

参考资料: https://www.django-rest-framework.org/api-guide/requests/ https://www.django-rest-framework.org/api-guide/responses/

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-12-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • DRF的Request对象和Response对象
    • Request对象
      • Request.data
      • Request.query_params
    • Response对象
    相关产品与服务
    多因子身份认证
    多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档