155. RESTframe的请求和响应

1.请求和响应

在这里插入图片描述

REST framework引入了2个新的对象:Request和Response

1.1 Request

包结构:rest_framework.request.Request
该对象扩展了常规的HttpRequest ,增加了对REST框架灵活的请求解析和请求认证的支持
主要属性:

  • data
    这个属性类似django的request的POST和FILES属性:
    • django的request.POST:只能获取POST请求的form表单数据
    • rest_framework的request.data:
      • 包括所有已解析的内容,包括文件和非文件输入
      • 支持’POST’, ‘PUT’ 和’PATCH’ 方法
      • 支持REST框架的灵活请求解析,而不仅仅支持表单数据。例如,可以传入JSON数据
  • query_params
    就是标准的request.GET属性,不过从命名角度来说,更加合理,因为不是只有GET请求才有GET查询参数
  • parsers
    一般不需要访问
    在视图中应用 APIView类或@api_view装饰(装饰视图函数)将确保这个属性被自动设置
    注意事项
  1. 如果客户端发送格式错误的内容,则访问request.data可能会引发错误ParseError。默认情况下,REST框架的APIView类或@api_view装饰器将捕获错误并返回400 Bad Request响应。
  2. 如果客户端发送的请求具有无法解析的内容类型,UnsupportedMediaType则会引发异常,
    默认情况下将捕获该异常并返回415 Unsupported Media Type响应

1.2 Response

包结构:rest_framework.response.Response该类是Django的 SimpleTemplateResponse 的子类,使用python原始对象进行数据初始化,然后,REST框架使用标准HTTP内容协商来确定它应如何呈现最终的响应内容
初始化: Response(data, status=None, template_name=None,headers=None, content_type=None)

  • data :响应的序列化数据,如果是复杂对象,如模型实例,需要在传入之前序列化为原始数据类型(如dict等)
  • status :响应的状态代码,默认为200
  • template_name : HTMLRenderer 选择时使用的模板名称
  • headers :要在响应中使用的HTTP标头的字典
  • content_type :响应的内容类型。通常,这将由内容协商确定的渲染器自动设置,但在某些情况下您可能需要明确指定内容类型

属性:

  • data:响应的未呈现的序列化数据
  • status_code:响应状态码,建议使用HTTP_200_OK 这样的常量,而不是 200 这样的数字,常量给每个状态代码提供更明确
    的标识符
    更详细的见:https://www.django-rest-framework.org/api-guide/status-codes/
  • content:渲染后的响应内容,调用此属性前需要调用.render()方法渲染
  • template_name:指定的模板名
  • accepted_renderer:用于渲染响应内容的渲染器实例,在视图返回响应之前由 APIView 或 @api_view 自动设置
  • accepted_media_type:内容协商选择的媒体类型,在视图返回响应之前由 APIView 或 @api_view 自动设置
  • renderer_context:需要渲染的上下文字典对象,在视图返回响应之前由 APIView 或 @api_view 自动设置
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想成为数据分析师的开发工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值