前后端交互往往使用Json数据,之前我用的Json文件作为桥梁,没毛病老铁!后面我直接从数据库读出数据,组成Json格式字符串直接返回到给ajax post的回调函数,一直请求失败,忙活了好一会儿,终于搞定:先弄清楚标准Json数据是咋回事,再弄清楚JsonResponse对象是啥,就解了。
Json指一种数据格式,只不过跟js对象有点类似,这种数据目前较流行,逐渐代替了xml。
var oMan = {
name:'James',
age:23,
talk:function(s){
alert('勒布朗'+s);
}
}
{
"name":"James",
"age":23
}
值得注意的是json数据格式中只能用双引号,若用单引号会报错。
json还有种数据格式—数组:
["James",23,"basketball player"]
当我在前端中发起ajax post请求时,需要返回json格式的数据。
先了解下
# 视图中
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}) # 放字典类型数据
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})