Django json 请求参数提交转实体

Posted 在奋斗的大道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django json 请求参数提交转实体相关的知识,希望对你有一定的参考价值。

业务场景:在实际开发中,很多前端同事使用From 表单对象进行数据提交,他们更喜欢使用request body 提交json 格式数据。针对上述情况,今天简单梳理如何处理这一类问题。

解决思路:request body 提交json  > json 格式字符串 > dict 对象 >目标实体对象

开始本章讲解之前,先补充下Python 关于json 转换相关核心知识点:

使用 JSON 函数需要导入 json 库:import json

函数描述
json.dumps将 Python 对象编码成 JSON 字符串
json.loads将已编码的 JSON 字符串解码为 Python 对象

python 原始类型向 json 类型的转化对照表:

PythonJSON
dictobject
list, tuplearray
str, unicodestring
int, long, floatnumber
Truetrue
Falsefalse
Nonenull

json 类型转换到 python 的类型对照表:

JSONPython
objectdict
arraylist
stringunicode
number (int)int, long
number (real)float
trueTrue
falseFalse
nullNone

正式开始本章相关功能代码实现:

1、在userSystem 应用中,新增tool.py 工具模块:主要实现dict 转实体对象。相关功能代码如下:

# dict 转 实体对象
class objDictTool:
    @staticmethod
    def to_obj(obj: object, **data):
        obj.__dict__.update(data)

 2、在views.py 文件中依赖tool.py 工具模块

from userSystem.tool import objDictTool

在控制层方法(insertJson)中,使用objDictTool 类,相关注意事项,已经标注在源码中。

# json 数据提交,并转换为实体,执行入库操作
def insertJSON(request):
    json_str = request.body
    json_str = json_str.decode()  # python3.6及以上不用这一句代码
    dict_data = json.loads(json_str)  # loads把str转换为dict,dumps把dict转换为str

    item = Book()
    objDictTool.to_obj(item, **dict_data)
    print("名称: {}, 价格: {},  作者: {}".format(item.name, item.price, item.author))
    # 执行数据库插入
    item.save()
    return response_success(message="数据入库成功")

3、postman 模拟request body 提交截图如下:

4、mysql8 数据库展示:

 

 

 

以上是关于Django json 请求参数提交转实体的主要内容,如果未能解决你的问题,请参考以下文章

Apifox 实体类转请求参数数据模型

JSON字符串转实体对象

python测试开发django-131.jQuery中$.ajax()方法POST提交contentType:“application/json“类型数据

我要给发送请求后台传递参数如图所示,json数组中的对象后台有对应实体类,后台使用springboot如何接收?

php中 curl模拟post发送json并接收json(转)

Apifox 实体类转请求参数数据模型