这个简单的问题折腾了很久,因为django都是静态网页,想实现股票和FOF量化策略的实时监控,尝试用layui实时获取数据库的表格数据进行修改,遇到的问题是无法渲染到网页的layui-table里。

解决问题的几个重要节点过程:
1,初期参考资料,python+django+layui开发页面表格数据的增删改查 ; url=https://www.cnblogs.com/miracleflower/p/15993734.html
后来看layui官方文档发现,很多细节由于版本问题需要修改了,如果一开始就照着官方文档会好一点

2,网页会报错: no such table: ciss_exhi_strategy; Ana:因为settings.DATABASE_APPS_MAPPING 设置的是ciss_exhi对应的数据库是db_funda,注意数据库的设置;也可以在views文件里直接引入外部的excel或sql数据库,不一定要用内置的默认数据库

3,table.render()里 url的设置:// notes:url前边默认的地址是ip地址或者www之前的;url: ‘/ciss_exhi/strategy/getdata’; url:‘/ciss_exhi/strategy/adddata’
实际完整地址是 http://127.0.0.1:8000/ciss_exhi/strategy/getdata

4,关于html里返回数据的定义
parseData: function (res) {
//res是请求返回的数据,可以在parseData中对数据进行一些处理,返回layui要求的格式
return {
“code”: res.code, //解析接口状态
“msg”: res.msg , //解析提示文本
“count”: res.count, //解析数据长度
“data”: res.data.item //解析数据列表,原始是res.data.item,改成res.data后json数据刷出来了,
};
},
5, . a j a x 用法: / / 网页局部刷新,而且需要数据传递的情况,通常用 .ajax用法: //网页局部刷新,而且需要数据传递的情况,通常用 .ajax用法://网页局部刷新,而且需要数据传递的情况,通常用.ajax() , . p o s t ( ) , .post(), .post(),.get() 这三种方式。
$.ajax({
//请求方式post,/data 传送数据类型
type:‘POST’,
// url请求接口地址 ||
// notes:url前边默认的地址是ip地址或者www之前的; url:‘/ciss_exhi/strategy/adddata’
url:‘/ciss_exhi/strategy/adddata’,
// VIP:table 组件默认规定的数据格式:{ “code”: 0, “msg”: “”, “count”: 1000, “data”: [{}, {}] }
// 非默认的格式需要parseData转换,例如 {“status”: 0, “message”: “”, “total”: 180, “data”: {“item”: [{}, {}] } }
// notes:adddata只返回 code和msg
parseData: function(res){ //res 即为原始返回的数据
return {
“code”: res.code, //解析接口状态
“msg”: res.msg , //解析提示文本
“count”: res.count, //解析数据长度
“data”: res.data.item //解析数据列表
};
},

5,views文件里变量的设置:
df不能直接df.to_json(),这样得到的是 str格式,df_data.to_json()不能赋值给JsonResponse里的data
### layui-table可以识别的data数据在views.py里长这样:dict_data= {1: {‘id’: 1, ‘date’: ‘600036’,‘weight’: 0.05},
# 2: {‘id’: 2, ‘date’: ‘300750’, ‘weight’: 0.08},
# 3: {‘id’: 3, ‘date’: ‘601021’, ‘weight’: 0.06}}
### Qs:如果直接 dict(df_data)会报错,TypeError: Object of type Series is not JSON serializable
### Ana: 由于json.dumps()函数引起的。dumps是将dict数据转化为str数据,但是dict数据中包含byte数据所以会报错。

6,python3运行报错:TypeError: Object of type ‘type’ is not JSON serializable解决方法
参考 url= https://www.cnblogs.com/qiqi-yhq/articles/12557870.html
新建文件myEncoder.py如下
class MyEncoder(json.JSONEncoder):

def default(self, obj):
    """
    只要检查到了是bytes类型的数据就把它转为str类型
    :param obj:
    :return:
    """
    if isinstance(obj, bytes):
        return str(obj, encoding='utf-8')
    return json.JSONEncoder.default(self, obj)

但是这个方法没有解决我的问题,还是需要构建dict变量,dict( df_data )会报错,
但是 df_data.to_dict() 很好的解决了问题。

下一步:
dict_data = df_data.loc[: ,col_list ].T.to_dict()
count = len( dict_data )
print(“type of data=”,type(dict_data) )
print( dict_data )

最后传入
return JsonResponse({‘code’:0,‘msg’:‘查询成功’,‘count’:count,‘data’:dict_data })

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐