当前位置: 首页 > news >正文

Django REST Framework响应类Response详解

概述

Response 类是一个智能的 HTTP 响应类,能够根据客户端请求的内容类型(Content-Type)自动将数据渲染成合适的格式(JSON、XML、HTML等)。

基本用法

from rest_framework.response import Response# 最简单的用法
def my_view(request):data = {'message': 'Hello, World!', 'status': 'success'}return Response(data)# 带状态码的响应
def create_item(request):# 创建逻辑...return Response({'id': 123, 'name': 'New Item'}, status=201)# 带自定义头部的响应
def download_file(request):data = {'file_url': '/files/sample.pdf'}headers = {'X-Custom-Header': 'value'}return Response(data, headers=headers)

参数详解

1. data (主要参数)

  • 作用: 要返回的序列化数据
  • 类型: 通常是字典、列表等可序列化的Python对象
  • 注意: 不能直接传递 Serializer 实例
# 正确用法
serializer = MySerializer(instance)
return Response(serializer.data)  # 访问 .data 属性# 错误用法(会抛出AssertionError)
return Response(serializer)  # 直接传递Serializer实例

2. status (状态码)

  • 作用: HTTP 状态码
  • 默认: 200
  • 常用值:
    • 200 - OK (成功)
    • 201 - Created (创建成功)
    • 400 - Bad Request (客户端错误)
    • 404 - Not Found (资源不存在)
    • 500 - Internal Server Error (服务器错误)
return Response(data, status=201)  # 创建成功
return Response({'error': 'Not found'}, status=404)  # 资源不存在

3. template_name (模板名称)

  • 作用: 指定用于渲染的模板(当需要HTML输出时)
  • 使用场景: 通常用于可浏览的API或需要HTML格式的响应
# 返回HTML格式的响应
return Response({'users': user_list},template_name='user_list.html'
)

4. headers (自定义头部)

  • 作用: 添加自定义HTTP头部
  • 类型: 字典
headers = {'X-RateLimit-Limit': '1000','X-RateLimit-Remaining': '999','Cache-Control': 'max-age=3600'
}
return Response(data, headers=headers)

5. exception (异常标志)

  • 作用: 标识这是一个异常响应
  • 使用场景: 通常由框架内部使用

6. content_type (内容类型)

  • 作用: 显式指定响应内容类型
  • 通常: 不需要手动指定,DRF会根据渲染器自动设置

实际应用示例

在 APIView 中的使用

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import statusclass UserListView(APIView):def get(self, request):users = User.objects.all()serializer = UserSerializer(users, many=True)return Response({'count': len(users),'results': serializer.data})def post(self, request):serializer = UserSerializer(data=request.data)if serializer.is_valid():serializer.save()return Response(serializer.data, status=status.HTTP_201_CREATED)return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

处理不同的响应格式

Response 类的强大之处在于它能自动处理多种格式:

# 客户端请求 Accept: application/json → 返回JSON
# 客户端请求 Accept: text/html → 返回HTML(可浏览API)
# 客户端请求 Accept: application/xml → 返回XMLdef api_endpoint(request):data = {'user': {'id': 1,'name': 'John Doe','email': 'john@example.com'}}return Response(data)

注意事项

  1. 不要直接传递Serializer实例:必须使用 serializer.dataserializer.errors
  2. 状态码使用常量:建议使用 rest_framework.status 中的常量而不是数字
  3. 头部设置:使用 headers 参数而不是直接操作响应头
  4. 内容协商:DRF会自动处理内容协商,通常不需要手动指定 content_type

总结

Response 类是 DRF 中构建 API 响应的标准方式,它提供了:

  • 自动的内容协商和渲染
  • 灵活的响应配置
  • 与 DRF 序列化器的无缝集成
  • 符合 RESTful 原则的响应构建

通过合理使用这些参数,你可以构建出符合各种需求的 API 响应。


文章转载自:

http://4kGWv64G.nkkpp.cn
http://8IThKKUJ.nkkpp.cn
http://tBCVLwzg.nkkpp.cn
http://56ODZfx2.nkkpp.cn
http://jC7eVp9M.nkkpp.cn
http://M9F1sN8k.nkkpp.cn
http://Wz2hUkw8.nkkpp.cn
http://55zcKuxf.nkkpp.cn
http://cM5u7074.nkkpp.cn
http://aMTHf82i.nkkpp.cn
http://mmS4Fdm0.nkkpp.cn
http://K8RlctCd.nkkpp.cn
http://LivHK3L6.nkkpp.cn
http://pvCgzGo3.nkkpp.cn
http://kZvIkj5R.nkkpp.cn
http://fv4Ns2nE.nkkpp.cn
http://kx4qKsOG.nkkpp.cn
http://bLNIInjr.nkkpp.cn
http://RfZznqNw.nkkpp.cn
http://ng4HO5Y6.nkkpp.cn
http://wXNjOZYv.nkkpp.cn
http://q7Deo0GV.nkkpp.cn
http://tJKw5aBN.nkkpp.cn
http://oQwhdkk6.nkkpp.cn
http://JkkFbwsP.nkkpp.cn
http://v9wf7uhJ.nkkpp.cn
http://K6pudlJ2.nkkpp.cn
http://0aAyLdPY.nkkpp.cn
http://ZLUumQiJ.nkkpp.cn
http://9gOiPl9r.nkkpp.cn
http://www.dtcms.com/a/378710.html

相关文章:

  • 一款.NET开发的AI无损放大工具
  • linux安装远程桌面图形化界面以及root登录
  • 短视频流量算法
  • 前端网络性能优化实践:从 HTTP 请求到 HTTPS 与 HTTP/2 升级
  • 37.循环神经网络:让AI理解序列
  • 合集:Git代码托管平台
  • Python 高效实现 Word 转 PDF:告别 Office 依赖
  • flutter配置Android gradle kts 8.0 的打包名称
  • 从零到一使用Linux+Nginx+MySQL+PHP搭建的Web网站服务器架构环境——LNMP(下)
  • 从iPhone 17取消SIM卡槽,看企业如何告别“数据孤岛”
  • Docker入门指南:CentOS 7 安装与阿里云镜像加速配置
  • 【Python自动化】 22 Python os 库详解
  • 智能投影仪技术解析:从显示工具到智慧影音终端的演进
  • 下一代社媒运营工具:亚矩阵云手机集成AIGC与数字人技术引领内容革命
  • 在Excel中删除大量间隔空白行
  • Android Studio Meerkat | 2024.3.1 Gradle Tasks不展示
  • 新版Android Studio能打包但无法run ‘app‘,编译通过后手机中没有安装,顶部一直转圈
  • CSS 伪类选择器
  • 2年1170万!39岁的霍福德,还有多少油?
  • IsaacSim Segmentation
  • CLIP、DALL·E 1的解读
  • Go 语言开发环境安装与 GOPROXY 镜像配置(含依赖管理与版本切换技巧)
  • 麒麟V10 + Docker部署KingbaseES数据库实战教程
  • 比亚迪新版五合一登陆、签到、查询、迁移
  • HOT100--Day22--74. 搜索二维矩阵,34. 在排序数组中查找元素的第一个和最后一个位置,33. 搜索旋转排序数组
  • Sentinel 原理与源码解析:流控、熔断、降级到热点限流的一体化方案
  • 克隆代币 + 捆绑开盘:多链环境下的低成本发币玩法
  • Android 项目:画图白板APP开发(六)——分页展示
  • 阿里云ClickHouse数据保护秘籍:本地备份与恢复详解
  • 数字图像处理——图像金字塔