當前位置:
首頁 > 最新 > 使用dataTable實現editor編輯數據

使用dataTable實現editor編輯數據

1,使用editor編輯數據

文檔:https://editor.datatables.net/examples/inline-editing/simple

在股票系統中需要錄入自己的股票數據,和一些字典數據表。 對這些數據表進行簡單的編輯查看。不用每次都做一個CRUD,進行簡單的字典表處理。 利用之前做的數據查詢通用的查詢顯示。

效果:

編輯數據:

2,增加html代碼

editor = new $.fn.dataTable.Editor( {

i18n: {

create: {

button: "新建",

title: "創建新數據",

submit: "保存"

},

edit: {

button: "修改",

title: "修改數據",

submit: "保存"

},

remove: {

button: "刪除",

title: "刪除數據",

submit: "刪除",

confirm: {

_: "確定刪除 %d 條數據?",

1: "確定刪除 1 條數據?"

}

},

error: {

system: "發生了一系統錯誤,(更多信息)"

},

datetime: {

previous: 前一月 ,

next: 下一月 ,

months: [ 1月 , 2月 , 3月 , 4月 , 5月 , 6月 , 7月 , 8月 , 9月 , 10月 , 11月 , 12月 ],

weekdays: [ 星期日", 星期一 , 星期二 , 星期三 , 星期四 , 星期五 , 星期六" ]

}

},

ajax: "/data/editor/save?table_name={{ stockWeb.table_name }}",

table: "#dynamic-table",

fields: [

{% for index,element in enumerate(stockWeb.columns) %}

{

label: "{{ stockWeb.column_names[index] }}:",

name: "{{ element }}"

{% if element == "date" %} ,type: "datetime" {% end %}

},{% end %}

]

} );

var nameParam = $.getUrlVar( table_name );

//console.log(nameParam);

var myTable = $( #dynamic-table ).DataTable( {

"dom": "Bfrtip",

"bFilter": true,

"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?type=editor&name="+nameParam,

"columns": [

{

"data": "",

"defaultContent": "",

"className": select-checkbox ,

"orderable": true

},

{% for column in stockWeb.columns %}

{ "data": "{{ column }}" },

{% end %}

],

select: {

style: os ,

selector: td:first-child

},

buttons: [

{ extend: "create", editor: editor, text: 新增 },

{ extend: "edit", editor: editor, text: 編輯 },

{ extend: "remove", editor: editor, text: 刪除" }

]

} );

Editor 中增加了i18n 的支持,默認的是英文的。 https://editor.datatables.net/examples/simple/i18n.html 同時增加了buttons按鈕。有3個按鈕,【新增】,【編輯】,【刪除】。 在數據的每一列裡面增加了一個checkbox,選擇數據之後才能進行編輯和刪除操作。 而不是像其他操作那樣在最後有一個編輯按鈕。使用起來不是很直接。

3,後台CRUD

查詢操作前面已經實現了,現在開始做的新增,修改,刪除操作。

# 獲得頁面數據。

class SaveEditorHandler(webBase.BaseHandler):

@gen.coroutine

def post(self):

action = self.get_argument("action", default=None, strip=False)

logging.info(action)

table_name = self.get_argument("table_name", default=None, strip=False)

stockWeb = stock_web_dic.STOCK_WEB_DATA_MAP[table_name]

# 臨時map數組。

param_map = {}

# 支持多排序。使用shift+滑鼠左鍵。

# 正則查找 data[1112][code] 裡面的code欄位

item_key = re.search(r"][(.*?)]", item)

if item_key:

tmp_1 = item_key.group()

if tmp_1:

tmp_1 = tmp_1.replace("][", "").replace("]", "")

param_map[tmp_1] = val[0].decode("utf-8")

#logging.info(param_map)

if action == "create":

logging.info("###########################create")

# 拼接where 和 update 語句。

tmp_columns = "`, `".join(stockWeb.columns)

tmp_values = []

for tmp_key in stockWeb.columns:

tmp_values.append(param_map[tmp_key])

# 更新sql。

tmp_values2 = " , ".join(tmp_values)

insert_sql = " INSERT INTO %s (`%s`) VALUES( %s ); " % (stockWeb.table_name, tmp_columns, tmp_values2)

logging.info(insert_sql)

try:

except Exception as e:

err = {"error": str(e)}

logging.info(err)

self.write(err)

return

elif action == "edit":

logging.info("###########################edit")

# 拼接where 和 update 語句。

tmp_update = genSql(stockWeb.columns, param_map, ",")

tmp_where = genSql(stockWeb.primary_key, param_map, "and")

# 更新sql。

update_sql = " UPDATE %s SET %s WHERE %s " % (stockWeb.table_name, tmp_update, tmp_where)

logging.info(update_sql)

try:

except Exception as e:

err = {"error": str(e)}

logging.info(err)

self.write(err)

return

elif action == "remove":

logging.info("###########################remove")

# 拼接where 語句。

tmp_where = genSql(stockWeb.primary_key, param_map, "and")

# 更新sql。

delete_sql = " DELETE FROM %s WHERE %s " % (stockWeb.table_name, tmp_where)

logging.info(delete_sql)

try:

except Exception as e:

err = {"error": str(e)}

logging.info(err)

self.write(err)

return

self.write("{"data":[{}]}")

數據格式是 {"error": "xxxx error"},datatable 會將錯誤的信息顯示到最下面。 同時還編寫了一個工具方法,拼接數據:

# 拼接sql,將value的key 和 value 放到一起。

def genSql(primary_key, param_map, join_string):

tmp_sql = ""

idx = 0

for tmp_key in primary_key:

tmp_val = param_map[tmp_key]

if idx == 0:

tmp_sql = " `%s` = %s " % (tmp_key, tmp_val)

else:

tmp_sql += join_string + (" `%s` = %s " % (tmp_key, tmp_val))

idx += 1

return tmp_sql

可以講 column 欄位組合起來。按照不同字元串進行join。

配置stock_web 欄位:

class StockWebData:

def __init__(self, mode, type, name, table_name, columns, column_names, primary_key, order_by):

self.mode = mode # 模式,query,editor 查詢和編輯模式

self.type = type

self.name = name

self.table_name = table_name

self.columns = columns

self.column_names = column_names

self.primary_key = primary_key

self.order_by = order_by

if mode == "query":

self.url = "/stock/data?table_name=" + self.table_name

elif mode == "editor":

self.url = "/data/editor?table_name=" + self.table_name

....

STOCK_WEB_DATA_LIST.append(

StockWebData(

mode="editor",

type="股票配置管理",

name="持倉管理",

table_name="user_stock",

columns=["code", "date", "price", "shares", "commission_rate", "tax_rate", "comment"],

column_names=["股票代碼", "日期", "價格", "數量", "傭金", "稅率", "備註"],

primary_key=["code", "date"],

order_by=" code desc "

)

)

4,總結

對datatable的研究都差不多了。有增加了數據的crud。 可以對字典數據進行CRUD,只需要配置下就可以了,節省了大部分代碼。 非常的方便。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 極客腦司機 的精彩文章:

TAG:極客腦司機 |