**

Django框架使用request模块,自定义请求data格式

**

目标格式:Tags中多条 {“Name”: “String”}

从Django数据库中取出数据,例如:Tag,

将tag.t_name写入表格 taglist,将所有str拼接好(format_header + format_body + format_tail)

记得将str中的单引号强制切换成双引号,否则格式报错

此时生成的data格式为str,与最终requests.post要求格式一致,但需要先转换为json再转回str才能正确发送请求,原因不明。如有大神了解,麻烦赐教

tags = Tag.objects.filter(t_alarm=1, t_device_name=device_name)
        print('0')
        # 传输参数,获取流
        ProjectName = 'test'
        url = ip + 'example/example' + '/' + ProjectName
        headers = { "Content-Type": "application/json"}
        # request数据格式,Total指有几个tag
        format_header = '{"Interval":1,"Records":1,"Total":1,"Tags": '
        format_tail = '}'
        
        taglist = []
        for tag in tags:
            name = tag.t_name
            taglistchild = { "Name": str(name)}
            taglist.append(taglistchild)
            
        format_body = str(taglist)
        format = format_header + format_body + format_tail
        format = str(format)
        format = format.replace("'", '"')  # request里必须使用双引号
        data = json.loads(format)   # 必须先将str变成Json
        data = json.dumps(data)    # 再将Json变成str,这样才能被requests模块正确使用
        # 发送带身份验证的post请求
        resp = requests.post(url, headers=headers, data=data, auth=HTTPBasicAuth('admin', ''))
        # print(resp)
        response = resp.content.decode()  # str
        # print(response)
        r_str = json.loads(response)  # dict
        v = jsonpath(r_str, '$.SubscriptionID')  # list

取回数据使用jsonpath,关于jsonpath,详细教程请看:https://www.cnblogs.com/wynjauu/articles/9556396.html

第二天写其他需求时发现了简单的生成tags:{}里要求格式的方法

tag_list = []
    for area in areas:
        dict = { "value": 335}
        name = area.arealog_name
        dict["name"] = name
        tag_list.append(dict)
    response = { 
        'data': tag_list,
    }
    return HttpResponse(json.dumps(response))

此时的效果:(dict里应该只有value,此结果为其他需求返回的结果)

本文地址:https://blog.csdn.net/Canon_LZ/article/details/110491044