前言
使用Python开发一个股票项目。
项目地址:
https://github.com/pythonstock/stock
相关资料:
http://blog.csdn.net/freewebsys/article/category/7076584
主要使用开发语言是python。
使用的lib库是pandas,tushare,TensorFlow,tornado等。
本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/77119420 未经博主允许不得转载。
博主地址是:http://blog.csdn.net/freewebsys
1,使用dataTable实现多字段排序
继续对 jQuery的 dataTable进行研究。
发现了,对于服务端,js返回的ajax请求是这样的:
order: order[0][dir] ,val: b'asc'
order: order[0][column] ,val: b'0'
开始还不明白,那个数组下标是啥意思。感觉取出来好费劲啊。
后来看了下官网的文档:
https://datatables.net/examples/basic_init/multi_col_sort.html
是支持多个字段进行排序的。而order[0] 的下标代表第几个。
2,修改排序代码
首先从request当中获得排序的参数:
order_by_column = []
order_by_dir = []
# 支持多排序。使用shift+鼠标左键。
for item, val in self.request.arguments.items():
# print("order:", item)
if str(item).startswith("order["):
print("order:", item, ",val:", val[0])
if str(item).startswith("order[") and str(item).endswith("[column]"):
order_by_column.append(int(val[0]))
if str(item).startswith("order[") and str(item).endswith("[dir]"):
order_by_dir.append(val[0].decode("utf-8")) # bytes转换字符串
设置两个数组保存参数。分别是多参数排序的column和dir。
但是这个数据是一个column的index,需要用index进行索引查询报表的column 名称。
还好这个字典已经存储了。
StockWebData(
type="基本面数据",
name="成长能力",
table_name="ts_growth_data",
columns=['quarter', 'code', 'name', 'mbrg', 'nprg', 'nav', 'targ', 'epsg', 'seg'],
column_names=["季度", "代码", "名称", "主营业务收入增长率(%)", "净利润增长率(%)", "净资产增长率", "总资产增长率",
"每股收益增长率", "股东权益增长率"],
order_by=" quarter desc "
)
增加order by 排序:
# 增加排序。
if len(order_by_column) != 0 and len(order_by_dir) != 0:
order_by_sql = " ORDER BY "
idx = 0
for key in order_by_column:
# 找到排序字段和dir。
col_tmp = stock_web.columns[key]
dir_tmp = order_by_dir[idx]
if idx != 0:
order_by_sql += " ,%s %s" % (col_tmp, dir_tmp)
else:
order_by_sql += " %s %s" % (col_tmp, dir_tmp)
idx += 1
拼接好的sql 放到select 语句的后面就行了。
前段页面修改:
var myTable = $('#dynamic-table').DataTable( {
"bFilter": false,
"ordering": true,
"processing": true,
"serverSide": true,
"lengthMenu": [[20, 30, 50, 100,1000, -1], [20, 30, 50, 100,1000, "All"]],
"language": {
"url": "/static/js/datatables.Chinese.json"
},
"ajax": "/stock/api_data?name="+nameParam,
"columns": [
{% for column in stockWeb.columns %}
{ "data": "{{ column }}" },
{% end %}
]
} );
3,修改后效果
使用方法:
1,点击是单个字段进行排序。
2,按照【shift】,点击多个,即可完成多字段排序。
效果如下:
后台服务端生成sql:
SELECT * FROM ts_stock_basics ORDER BY outstanding desc ,totals desc ,pe desc LIMIT 0,20
普通排序: 按照一个字段进行排序
4,总结
增加了排序功能之后可以对报表数据中的指标直接进行排序显示。
这样可以更直观的查看股票数据。分析股票行情。多排序是一个很实用的功能。
这个排序是在服务端实现的,再使用分页的时候也是多排序分页的。dataTable是一个不错的框架。
本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/77119420 未经博主允许不得转载。
博主地址是:http://blog.csdn.net/freewebsys