Django怎么返回JSON_JsonResponse返回接口数据供前端调用

梦浩吖_7208

梦浩吖_7208

2026-04-09

409人浏览

原创

jsonresponse 更适合返回 json 因为它自动设置 content-type 并序列化 dict/list,而 httpresponse 需手动处理 header、编码和类型兼容性;传非标准类型(如 datetime)需预先转换,列表需 safe=false,drf 中应统一用 response 而非 jsonresponse。

django怎么返回json_jsonresponse返回接口数据供前端调用

JsonResponse 为什么比 HttpResponse 更适合返回 JSON

因为 JsonResponse 自动设置 Content-Type: application/json,且默认对字典或列表做 json.dumps() 序列化;用 HttpResponse 手动拼 JSON 容易漏设 header、中文乱码、类型不兼容(比如 datetime 直接报错)。

常见错误现象:TypeError: Object of type datetime is not JSON serializable —— 这不是 JsonResponse 的问题,而是你传了它无法直接序列化的对象。

  • 只接受 dict、list、str、int、float、bool、None 类型,其他要先转换
  • 如果传入 QuerySet,必须先调用 list() 或用 serializers.serialize()
  • 默认开启 safe=True,意味着只允许顶层是 dict;若想返回 list,得显式写 safe=False

safe=False 到底什么时候必须加

当你返回的是 Python 列表(比如查出多条记录转成 list 后直接传给 JsonResponse),不加 safe=False 会报错:TypeError: In order to allow non-dict objects to be serialized set the safe parameter to False。

使用场景:分页接口、列表页数据、批量操作结果。

Django Unfold
Django Unfold

提供使用 django-unfold (v0.56+) 构建高级 Django 管理界面的专业指导。当用户提及 django-unfold、unfold admin 等内容时使用此技能。

下载
  • JsonResponse([{'id': 1}, {'id': 2}], safe=False) ✅
  • JsonResponse({'items': [{'id': 1}]}) ✅(不用 safe=False)
  • JsonResponse(list(queryset), safe=False) ✅(queryset 是 QuerySet)

处理日期、Decimal 等非标准 JSON 类型

Django 的 JsonResponse 底层用的是 Python 标准库 json 模块,不支持 datetime、Decimal、UUID。不能靠“加个 cls 参数就一劳永逸”,得看具体字段是否真会被前端消费。

推荐做法:在序列化前手动转换,而不是全局换 JSONEncoder——后者容易掩盖数据结构问题,也影响调试。

  • 日期转字符串:obj.date_field.isoformat() 或 obj.date_field.strftime('%Y-%m-%d')
  • 金额转 float 或 str:float(obj.amount) 或 str(obj.amount)(避免浮点误差用 str)
  • QuerySet 转 dict list:list(queryset.values('id', 'name', 'created_at')),再对 created_at 字段单独格式化

和 DRF 的 JsonResponse 有什么区别

纯 Django 不带 DRF 时,JsonResponse 就是唯一轻量选择;但如果你已经用了 djangorestframework,别为了“简单接口”退回去手写 JsonResponse —— 因为 DRF 的 Response 天然支持状态码、分页、内容协商、异常统一处理,而 JsonResponse 需要自己补。

容易踩的坑:在 DRF View 中混用 JsonResponse,会导致中间件(如 CORSMiddleware、SessionMiddleware)部分失效,或者 CSRF 验证逻辑错乱。

  • DRF 里一律用 Response({...}),不是 JsonResponse
  • 普通 Django View(View.as_view() 或函数视图)才用 JsonResponse
  • 别在同一个项目里两种风格混用接口,前端处理成本翻倍
Django 的 JsonResponse 看似简单,但真正卡住人的从来不是怎么写,而是「什么时候不该用」和「传进去的数据到底长什么样」——多打一行 print(type(data)) 和 print(data),比查文档快得多。

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

django

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2543

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

5483

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6510

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

6138

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

863

5

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1771

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

4564

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1729

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

26917

23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Django 6.1 官方文档
Django 6.1 官方文档

共0课时 | 0人学习

Django 教程
Django 教程

共28课时 | 9.9万人学习

Django DRF 源码解析
Django DRF 源码解析

共21课时 | 2万人学习