Django接口返回JSON格式数据报文

这篇具有很好参考价值的文章主要介绍了Django接口返回JSON格式数据报文。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

遇到问题

Django返回json结构报文

不可行方式python json

可行方式JsonResponse+QuerySet.values()。


python的两个web框架,flask和django,两者都具有view 模板的章节,但是当前开发一个应用,大部分采用前后端分离的合作方式。因此必然面对的一个事情就是接口返回json格式的数据报文。本文就是针对这个事情进行了阐述,遵从了从问题产生到方案选择的过程。

遇到问题

如下为使用Django的序列化器得到的json格式数据,可以很明显的发现,这个格式和理想的fieldName:fieldData形式存在较大的差异。

serializers.serialize('json', instance)

[{
	"model": "polls.question",
	"pk": 1,
	"fields": {
		"question_text": "xxxxxxxxxxx?",
		"pub_date": "2023-07-25T07:05:08Z"
	}
}, {
	"model": "polls.question",
	"pk": 2,
	"fields": {
		"question_text": "啊啊啊啊啊",
		"pub_date": "2023-07-27T02:00:59Z"
	}
}]

Django返回json结构报文

通过这个问题,引出了本文要做的事情,在Django接口中,如何将数据模型实例转换为常规的json格式并返回。

不可行方式python json

dumps会出现序列化异常,Object of type xxxxx is not JSON serializable。

可行方式JsonResponse+QuerySet.values()。

values()返回由一系列字典实例构成的QuerySet。下面对比下使用和不使用values()得到的QuerySet有什么区别。

# 由模型对象构成.
>>> Blog.objects.filter(name__startswith="Beatles")
<QuerySet [<Blog: Beatles Blog>]>

# 由字典构成.
>>> Blog.objects.filter(name__startswith="Beatles").values()
<QuerySet [{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}]>

JsonResponse作为HttpResponse的子类,对返回数据进行json编码。

接下来是简单代码样例

定义一个APIResult class:

class APIResult(dict):
    def __init__(self, data):
        self['code'] = 200
        if isinstance(data, dict):
            print("data is dict")
            self['data'] = data
        elif isinstance(data, list):
            print("data is list")
            self['data'] = data
        else:
            print("data is not dict or list")
            self['data'] = list(data)

返回模型实例列表:

def question_list(request):
    query_set = Question.objects.all()[:5]
    result = APIResult(data=query_set.values())
    return JsonResponse(result, safe=False)
    
{
	"code": 200,
	"data": [{
		"id": 1,
		"question_text": "xxxxxxxxxxx?",
		"pub_date": "2023-07-25T07:05:08Z"
	}, {
		"id": 2,
		"question_text": "\u554a\u554a\u554a\u554a\u554a",
		"pub_date": "2023-07-27T02:00:59Z"
	}]
}

返回具体实例:

def question_detail(request, question_id):
    try:
        query_set = Question.objects.filter(pk=question_id)
    except Question.DoesNotExist:
        raise Http404("No question")

    result = APIResult(data=query_set.values()[0])
    return JsonResponse(result)
    
{
	"code": 200,
	"data": {
		"id": 1,
		"question_text": "xxxxxxxxxxx?",
		"pub_date": "2023-07-25T07:05:08Z"
	}
}

如果你对返回哪些字段有要求,可以向values()传入具体字段名,如values('id')。文章来源地址https://www.toymoban.com/news/detail-611824.html

{"code": 200, "data": [{"id": 1}, {"id": 2}]}

到了这里,关于Django接口返回JSON格式数据报文的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java】Mybatis查询数据库返回JSON格式的字段映射到实体类属性

    今天遇到了一个bug,大概就是数据库(Mysql)中有一个 type 类型字段,数据类型为json,大概是这样的:[“苹果”,“香蕉”,“葡萄”]的数据格式,这个bug的问题所在呢就是查询后这个json格式的数据无法映射到我们实体类的属性上,解决方案如下: 实体类的配置: @TableField

    2024年02月15日
    浏览(34)
  • C# webservice 接收json数据 接口返回 远程服务器返回错误: (500) 内部服务器错误

    C# post 调用webservice 服务端接口,会返回上面那个错误,8成是发送的数据和接口不符合造成的。有2种情况 第一种情况如下:如果类型是默认request.ContentType = \\\"application/x-www-form-urlencoded\\\";这个类型 那么你发送数据和被调用接口参数名如果不对,则会报下图这个错 我发送的参数名

    2024年02月13日
    浏览(49)
  • .Net Core webapi RestFul 统一接口数据返回格式

    在RestFul风格盛行的年代,大部分接口都需要一套统一的数据返回格式,那么我们怎么才能保证使用统一的json数据格式返回呢,下面给大家简单介绍一下: 假如我们需要接口统一返回一下数据格式: json对象中data是返回的实际结果对象,可以是一个对象、一个list、一个字符串

    2024年01月16日
    浏览(27)
  • Django实现DRF数据API接口格式封装

    当进行前后端分离开发时,前端Vue通常需要与后端接口交互并获取数据。初始情况下数据可能是这样的:

    2024年02月11日
    浏览(35)
  • API接口常用数据格式Json,Json的定义和XML的区别

    现在程序员还有谁不知道 JSON 吗?无论对于前端还是后端,JSON 都是一种常见的数据格式。那么 JSON 到底是什么呢? JSON (JavaScript Object Notation) ,是一种轻量级的数据交换格式。它的使用范围很广,并成为 ECMA 标准,可以被使用在多种编程语言中,用于前后端之间的数据传

    2024年02月12日
    浏览(33)
  • Spring MVC学习随笔-Ajax集成(JSON格式返回数据)、拦截器(MyInterceptor)、全局异常处理(GlobalExceptionResolver)

    学习视频:【编程不良人】继spring之后快速入门springmvc,面对SpringMVC不用慌 引入相关依赖 开发控制器 日期格式修正 可以正常响应 拦截器 :Interceptor 拦截 中断 类似于javaweb中的Filter,不过没有Filter那么强大 作用 Spring MVC的拦截器是一种用于在请求处理过程中进行预处理和后处

    2024年02月05日
    浏览(38)
  • 【flask sqlalchmey】一次性将返回的列表对象或者 一行数据对象转成dict---flask-sqlalchemy输出json格式数据

    结果示例: 另外: res = Sysdict.query.all() 这种写法已经不被推荐了, 推荐的是scalar_one() 获取一行,scalars()获取多行 user = db.session.execute(db.select(User).filter_by(username=username)).scalar_one() users = db.session.execute(db.select(User).order_by(User.username)).scalars() 一般的 json.dumps(users) 或者 jsonify(use

    2024年02月13日
    浏览(37)
  • PHP解析带BOM头的JSON数据,对接他人接口的时候,使用json_decode(),返回null的问题与解决方法

    在php开发中会遇到和他人对接接口,对方使用json传输数据,使用json_decode()函数却无法将json数据转换为数组。 先看封装的代码 这种对接post接口的封装方法一般是没有问题的,但是我们打印$res的时候,会发现只会返回NULL。而打印$response的时候,是可以返回json字符串的。我们

    2024年02月06日
    浏览(35)
  • postman-post格式报文接口的配置

    http接口有许多格式,post格式时常用的一种报文格式 同样的,首先新建一个请求,右键点击 add request 填写接口名等信息 点击 save 此时界面显示的是默认的get请求 改成post 点击下拉框,选取post 输入接口URL authorization界面可配置授权信息 有诸多格式可选 header界面可以配置请求

    2024年02月14日
    浏览(29)
  • postman登录接口返回的token值传递给其他接口

    1. 按照接口文档,进行接口编写  2. 如下图所示是执行登录接口后的response的结果。根据登录执行的结果,需要将token进行返回,并传递给其他接口使用 3. 在登录接口中,点击“tests”进行相关的语句填写,返回登录的token值。 点击“view--show--postman console” 查看log打印的结果

    2024年02月11日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包