django中JsonResponse的小笔记

JsonResponse的小笔记

问题抛出–前后端交互之json数据

前后端交互往往使用Json数据,之前我用的Json文件作为桥梁,没毛病老铁!后面我直接从数据库读出数据,组成Json格式字符串直接返回到给ajax post的回调函数,一直请求失败,忙活了好一会儿,终于搞定:先弄清楚标准Json数据是咋回事,再弄清楚JsonResponse对象是啥,就解了。

标准Json数据

Json指一种数据格式,只不过跟js对象有点类似,这种数据目前较流行,逐渐代替了xml。

  1. js自定义对象:
var oMan = {
   name:'James',
   age:23,
   talk:function(s){
       alert('勒布朗'+s);
   }
}
  1. json格式数据:
{
    "name":"James",
    "age":23
}

值得注意的是json数据格式中只能用双引号,若用单引号会报错。
json还有种数据格式—数组:

["James",23,"basketball player"]

JsonResponse对象—是HttpResponse对象的子类

当我在前端中发起ajax post请求时,需要返回json格式的数据。
先了解下

  • JsonResponse对象的Content-Type 被设置为: application/json,
  • class JsonResponse(data, encoder=DjangoJSONEncoder, safe=True, json_dumps_params=None,**kwargs)只需要记住,默认情况下,JsonResponse的传入参数是个字典类型,而我用json.dumps(dict_1)后得到的是json字符串,前端接收时如果没有解析,就会一直报错—TypeError异常,问题就在这。
  • 正确的式例:
# 视图中
from django.http import JsonResponse
...
def json_1(request):
   return render(request,'history/json1.html')
def json_2(request):
   return JsonResponse({'res_1':0,'res_2':1}) # 放字典类型数据

压缩机历史曲线显示—ajax请求的视图函数

class getjson2fileView(View):
    def get(self,requet):
        with open('static/json_data/chuan_2.json','r',encoding='utf-8')as f:
            return JsonResponse(json.load(f))
    def post(self,request):
        # 获取时间
        # Data = txtInfo.objects.filter(d_date_32__gte="2018-09-20 10:10:10")
        # print(Data)
        date1 = request.POST.get('date1')
        date2 = request.POST.get('date2')
        # print(date1)  # 2018-09-24T01:00:00
        # print(date2)  # 2018-09-24T17:00:00
        # 把datetime-local转换成datetime
        # print(type(date1)) ---str
        date_1=date1.replace('T',' ')
        date_2=date2.replace('T',' ')
        # print(type(date1))  # ---str
        # #判断日期方法一:
        # d_1 = int(date1.replace('-', ''))
        # print(d_1)  # ---20150901
        # d_2 = int(date2.replace('-', ''))
        # if d_1 <= d_2:
        column_1=[]
        column_2=[]
        dict_1={}
        dict_2={}
        # 判断日期方法二:直接比较
            # print(type(date1))   ---str
        if date1<=date2:
            # print(date1<=date2) #---true
            # txtInfo.objects.filter(d_date_32_gte=5)
            # 1、从数据库查对应数据
            Data = txtInfo.objects.filter(d_date_32__gte=date_1,d_date_32__lte=date_2)
            # 查到的data格式[("value","datetime"),("value","datetime"),...]
            # 组成json数据再返回
            # 2、组成json数据
            for i in Data:
                # print(type(i.d_date_32))
                # print(type(i.d_column_2))
                # value
                column_1.append(str(i.d_column_2))
                # time
                column_2.append(str(i.d_date_32))
            dict_1["data"] = column_1
            dict_1["date"] = column_2
            dict_2["loop"] = dict_1

            # a=json.dumps(dict_2)
            # print(eval(a))  #---去掉外层引号
            # print(a["loop"])
            # 3、返回生成的json数据
            return JsonResponse(dict_2)
            # with open('static/json_data/chuan_2.json', 'r', encoding='utf-8')as f:
            #     return JsonResponse(json.load(f))
        else:
            return JsonResponse({"loop": None})

成功了,展示下效果

图片:
在这里插入图片描述

  • 8
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值