python 开发的产品_我的第一个python web开发框架(16)——产品分类管理

产品分类管理的html页面之前忘记做了,这次附件里补上。

好了先上图

从页面效果图来看,我们需要开发列表获取接口、添加接口、单条记录获取接口、编辑接口和删除接口

对于产品分类列表,我们将使用jqgrid前端表格框架,jqgrid与接口交互时,它会提交页面索引、页面大小、排序字段名以及顺序还是倒序排序这几个参数,而返回的结果也有格式约束。

返回格式要求:

{'records': 0,'total': 0,'page': 1,'rows': [],

}

产品分类列表获取接口

1 @get('/api/product_class/')2 defcallback():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 ifsidx:17 order_by = sidx + ' ' +sord18

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 returndata34 #保存总记录数量

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_size45 else:46 page_total = data['records'] // page_size + 1

47 #记录总页面数量

48 data['total'] =page_total49

50 #判断提交的页码是否超出范围

51 if page_number < 1 or page_number >page_total:52 page_number =page_total53 #记录当前页面索引值

54 data['page'] =page_number55

56 #计算当前页面要显示的记录起始位置

57 record_number = (page_number - 1) *page_size58 #设置查询分页条件

59 paging = 'limit' + str(page_size) + 'offset' +str(record_number)60 ### 设置排序 ###

61 if notorder_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 ifresult:71 #存储记录

72 data['rows'] =result73

74 ifdata: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//')2 defcallback(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 ifresult: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 defcallback():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 ifresult 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//')2 defcallback(id):3 """

4 获取指定记录5 """

6 sql = """select * from product_class where id = %s""" %(id,)7 #读取记录

8 result =db_helper.read(sql)9 ifresult: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//')16 defcallback(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, "提交失败")

暂时还没有朋友说看不明白,所以就不往细说了,大家看代码注释,有人不明白提出后我再补上吧(最近太忙了,所以更新可能会有点慢,大家耐心等一等,我尽量抽空码完代码后更新上来的)。

联系我们页面的前端代码与接口代码都在下载包中,大家自己比较一下自己处理的结果和我的是不是一样。

版权声明:本文原创发表于 博客园,作者为

python开发QQ群:669058475(本群已满)、733466321(可以加2群)    作者博客:http://www.cnblogs.com/EmptyFS/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值