Django的HttpResponse返回json数据

110 阅读2分钟

“携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第21天,点击查看活动详情

使用postman调用接口的时候报错了,错误信息如下:

Caused by: org.springframework.util.InvalidMimeTypeException: Invalid mime type "application/json,charset=utf-8": Invalid token character ',' in token "json,charset=utf-8"
   at org.springframework.util.MimeTypeUtils.parseMimeTypeInternal(MimeTypeUtils.java:266) ~[spring-core-5.2.15.RELEASE.jar:5.2.15.RELEASE]
   at org.springframework.util.MimeTypeUtils$ConcurrentLruCache.get(MimeTypeUtils.java:469) ~[spring-core-5.2.15.RELEASE.jar:5.2.15.RELEASE]
   at org.springframework.util.MimeTypeUtils.parseMimeType(MimeTypeUtils.java:200) ~[spring-core-5.2.15.RELEASE.jar:5.2.15.RELEASE]
   at org.springframework.http.MediaType.parseMediaType(MediaType.java:583) ~[spring-web-5.2.15.RELEASE.jar:5.2.15.RELEASE]

源代码如下:

import json
from django.http import HttpResponse
return HttpResponse(json.dumps(json_list), content_type="application/json,charset=utf-8")

看样子是字符串格式转换的问题,将代码修改为:

content_type="application/json"

问题解决啦~

拓展

如果想要返回规定格式的字符串,可以使用如下方式:

{"message": 'success', "code": '0', "data": []}
def json_response(message='', code='', data=''):
    # json包装数据
    return json.dumps({'message': message, 'code': code, 'data': data},ensure_ascii=False)
return HttpResponse(json_response('success','0', result), content_type="application/json")

上面的问题涉及到了python中的Django框架,下面简单了解一下这个web应用框架。

Django

Django 是使用 Python 语言开发的一款免费而且开源的 Web 应用框架。由于 Python 语言的跨平台性,所以 Django 同样支持 Windows、Linux 和 Mac 系统。

Django框架的特点

相对于 Python 的其他 Web 框架,Django 的功能是最完整的,Django 定义了服务发布、路由映射、模板编程、数据处理的一整套功能。这也意味着 Django 模块之间紧密耦合。

Django 的主要特点如下:

  • 完善的文档:经过 10 余年的发展和完善,Django 官方提供了完善的在线文档,为开发者解决问题提供支持。
  • 集成 ORM 组件:Django 的 Model 层自带数据库 ORM 组件,为操作不同类型的数据库提供了统一的方式。
  • URL 映射技术:Django 使用正则表达式管理URL映射,因此给开发者带来了极高的灵活性。
  • 后台管理系统:开发者只需通过简单的几行配置和代码就可以实现完整的后台数据管理Web控制台。
  • 错误信息提示:在开发调试过程中如果出现运行异常,Django 可以提供非常完整的错误信息帮助开发者定位问题。

Django项目目录

创建Django工程包含一下目录:

  • __init.py: 说明是一个python包。
  • settings.py: 项目的配置文件。
  • urls.py: 进行url路由的配置。
  • wsgi.py: web服务器和Django交互的入口。
  • manage.py: 项目的管理文件