個人第一個python web開發框架(16)——產品分類管理

  產品分類管理的html頁面以前忘記作了,此次附件裏補上。html

  好了先上圖前端

  

  從頁面效果圖來看,咱們須要開發列表獲取接口、添加接口、單條記錄獲取接口、編輯接口和刪除接口python

  對於產品分類列表,咱們將使用jqgrid前端表格框架,jqgrid與接口交互時,它會提交頁面索引、頁面大小、排序字段名以及順序仍是倒序排序這幾個參數,而返回的結果也有格式約束。web

  返回格式要求:sql

{
    '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語句;第四段是提交查詢請求,並返回結果json

  get方式提交,咱們使用web_helper.get_query()函數獲取參數值api

  具體代碼有詳細註釋,這裏就不細說了,你們若是有不明白的地方留言或到羣裏問我。緩存

  

  界面中的刪除按鈕對應的是刪除接口框架

 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 本文歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然視爲侵權。

python開發QQ羣:669058475(本羣已滿)、733466321(能夠加2羣)    做者博客:http://www.cnblogs.com/EmptyFS/

相關文章
相關標籤/搜索