產品分類管理的html頁面之前忘記做了,這次附件里補上。 好了先上圖 從頁面效果圖來看,我們需要開發列表獲取介面、添加介面、單條記錄獲取介面、編輯介面和刪除介面 對於產品分類列表,我們將使用jqgrid前端表格框架,jqgrid與介面交互時,它會提交頁面索引、頁面大小、排序欄位名以及順序還是倒序排序 ...
產品分類管理的html頁面之前忘記做了,這次附件里補上。
好了先上圖
從頁面效果圖來看,我們需要開發列表獲取介面、添加介面、單條記錄獲取介面、編輯介面和刪除介面
對於產品分類列表,我們將使用jqgrid前端表格框架,jqgrid與介面交互時,它會提交頁面索引、頁面大小、排序欄位名以及順序還是倒序排序這幾個參數,而返回的結果也有格式約束。
返回格式要求:
{ 'records': 0, 'total': 0, 'page': 1, 'rows': [], }
產品分類列表獲取介面
1 @get('/api/product_class/') 2 def callback(): 3 """ 4 獲取列表數據 5 """ 6 # 頁面索引 7 page_number = convert_helper.to_int1(web_helper.get_query('page', '', False)) 8 # 頁面顯示記錄數量 9 page_size = convert_helper.to_int0(web_helper.get_query('rows', '', False)) 10 # 排序欄位 11 sidx = web_helper.get_query('sidx', '', False) 12 # 順序還是倒序排序 13 sord = web_helper.get_query('sord', '', False) 14 # 初始化排序欄位 15 order_by = 'sort asc' 16 if sidx: 17 order_by = sidx + ' ' + sord 18 19 ############################################################# 20 # 初始化輸出格式(前端使用jqgrid列表,需要指定輸出格式) 21 data = { 22 'records': 0, 23 'total': 0, 24 'page': 1, 25 'rows': [], 26 } 27 ############################################################# 28 # 執行sql,獲取指定條件的記錄總數量 29 sql = 'select count(1) as records from product_class' 30 result = db_helper.read(sql) 31 # 如果查詢失敗或不存在指定條件記錄,則直接返回初始值 32 if not result or result[0]['records'] == 0: 33 return data 34 # 保存總記錄數量 35 data['records'] = result[0].get('records', 0) 36 37 ############################################################# 38 ### 設置分頁索引與頁面大小 ### 39 # 設置分頁大小 40 if page_size is None or page_size <= 0: 41 page_size = 10 42 # 計算總頁數 43 if data['records'] % page_size == 0: 44 page_total = data['records'] // page_size 45 else: 46 page_total = data['records'] // page_size + 1 47 # 記錄總頁面數量 48 data['total'] = page_total 49 50 # 判斷提交的頁碼是否超出範圍 51 if page_number < 1 or page_number > page_total: 52 page_number = page_total 53 # 記錄當前頁面索引值 54 data['page'] = page_number 55 56 # 計算當前頁面要顯示的記錄起始位置 57 record_number = (page_number - 1) * page_size 58 # 設置查詢分頁條件 59 paging = ' limit ' + str(page_size) + ' offset ' + str(record_number) 60 ### 設置排序 ### 61 if not order_by: 62 order_by = 'id desc' 63 ############################################################# 64 65 # 組合sql查詢語句 66 sql = "select * from product_class order by %(orderby)s %(paging)s" % \ 67 {'orderby': order_by, 'paging': paging} 68 # 讀取記錄 69 result = db_helper.read(sql) 70 if result: 71 # 存儲記錄 72 data['rows'] = result 73 74 if data: 75 # 直接輸出json 76 return web_helper.return_raise(json.dumps(data, cls=json_helper.CJsonEncoder)) 77 else: 78 return web_helper.return_msg(-1, "查詢失敗")
這段代碼有點長,從功能上可以分為四段,第一段是接收客戶端提交的參數;第二段獲取當前查詢條件下有多少條記錄數量;第三段是處理分頁,並組合查詢sql語句;第四段是提交查詢請求,並返回結果
get方式提交,我們使用web_helper.get_query()函數獲取參數值
具體代碼有詳細註釋,這裡就不細說了,大家如果有不明白的地方留言或到群里問我。
界面中的刪除按鈕對應的是刪除介面
1 @delete('/api/product_class/<id:int>/') 2 def callback(id): 3 """ 4 刪除指定記錄 5 """ 6 # 判斷該分類是否已經被引用,是的話不能直接刪除 7 sql = """select count(*) as total from product where product_class_id=%s""" % (id,) 8 # 讀取記錄 9 result = db_helper.read(sql) 10 if result and result[0].get('total', -1) > 0: 11 return web_helper.return_msg(-1, "該分類已被引用,請清除對該分類的綁定後再來刪除") 12 13 # 編輯記錄 14 sql = """delete from product_class where id=%s returning id""" 15 vars = (id,) 16 # 寫入資料庫 17 result = db_helper.write(sql, vars) 18 # 判斷是否提交成功 19 if result: 20 return web_helper.return_msg(0, '成功') 21 else: 22 return web_helper.return_msg(-1, "刪除失敗")
在做刪除前,需要判斷一下這個分類是否已經被相關的產品引用綁定了,如果是的話,直接刪除將會造成前端相關產品無法展示,所以需要做出提醒,讓用戶清除綁定後再進行刪除操作。
增改刪操作都是對資料庫的寫操作,所以都使用db_helper.write()函數。
在postgresql資料庫中,returning是一個非常棒非常好用的函數,它可以指定返回的欄位,即進行增改刪操作後,將這些記錄的指定欄位值返回給我們,我們可以通過檢查返回值是否存在來判定是否執行成功。而且在進行條件操作時,它能返回我們想要的主鍵id值,方便我們進行我們想要的操作,比如刪除nosql緩存對應值。
點擊列表上面的添加按鈕,會彈出一個小框,讓用戶輸入新增記錄值,如下圖:
介面代碼:
1 @post('/api/product_class/') 2 def callback(): 3 """ 4 新增記錄 5 """ 6 name = web_helper.get_form('name', '分類名稱') 7 is_enable = convert_helper.to_int0(web_helper.get_form('is_enable', '是否啟用')) 8 9 # 添加記錄(使用returning這個函數能返回指定的欄位值,這裡要求返回新添加記錄的自增id值) 10 sql = """insert into product_class (name, is_enable) values (%s, %s) returning id""" 11 vars = (name, is_enable) 12 # 寫入資料庫 13 result = db_helper.write(sql, vars) 14 # 判斷是否提交成功 15 if result and result[0].get('id'): 16 return web_helper.return_msg(0, '成功') 17 else: 18 return web_helper.return_msg(-1, "提交失敗")
post方式提交,我們使用web_helper.get_form()函數獲取參數值
編輯記錄和添加記錄一樣,使用同一個視窗,但在介面上,它需要獲取記錄值和編輯後保存兩個介面
1 @get('/api/product_class/<id:int>/') 2 def callback(id): 3 """ 4 獲取指定記錄 5 """ 6 sql = """select * from product_class where id = %s""" % (id,) 7 # 讀取記錄 8 result = db_helper.read(sql) 9 if result: 10 # 直接輸出json 11 return web_helper.return_msg(0, '成功', result[0]) 12 else: 13 return web_helper.return_msg(-1, "查詢失敗") 14 15 @put('/api/product_class/<id:int>/') 16 def callback(id): 17 """ 18 修改記錄 19 """ 20 name = web_helper.get_form('name', '分類名稱') 21 is_enable = convert_helper.to_int0(web_helper.get_form('is_enable', '是否啟用')) 22 23 # 編輯記錄 24 sql = """update product_class set name=%s, is_enable=%s where id=%s returning id""" 25 vars = (name, is_enable, id) 26 # 寫入資料庫 27 result = db_helper.write(sql, vars) 28 # 判斷是否提交成功 29 if result and result[0].get('id'): 30 return web_helper.return_msg(0, '成功') 31 else: 32 return web_helper.return_msg(-1, "提交失敗")
暫時還沒有朋友說看不明白,所以就不往細說了,大家看代碼註釋,有人不明白提出後我再補上吧(最近太忙了,所以更新可能會有點慢,大家耐心等一等,我儘量抽空碼完代碼後更新上來的)。
聯繫我們頁面的前端代碼與介面代碼都在下載包中,大家自己比較一下自己處理的結果和我的是不是一樣。
作者:AllEmpty
出處:http://www.cnblogs.com/EmptyFS/
有興趣的朋友可以加加python開發QQ群:669058475 ,大家一起探討。大家有問題的話可以在群里發問,當然我平時工作也非常繁忙不一定會及時回覆。
本文為AllEmpty原創,歡迎轉載,但未經同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。