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

简介:

 产品分类管理的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/p/7846746.html,如需转载请自行联系原作者





相关文章
|
10月前
|
Java 数据处理 索引
(Pandas)Python做数据处理必选框架之一!(二):附带案例分析;刨析DataFrame结构和其属性;学会访问具体元素;判断元素是否存在;元素求和、求标准值、方差、去重、删除、排序...
DataFrame结构 每一列都属于Series类型,不同列之间数据类型可以不一样,但同一列的值类型必须一致。 DataFrame拥有一个总的 idx记录列,该列记录了每一行的索引 在DataFrame中,若列之间的元素个数不匹配,且使用Series填充时,在DataFrame里空值会显示为NaN;当列之间元素个数不匹配,并且不使用Series填充,会报错。在指定了index 属性显示情况下,会按照index的位置进行排序,默认是 [0,1,2,3,...] 从0索引开始正序排序行。
716 0
|
10月前
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
747 1
|
机器学习/深度学习 算法 量子技术
GQNN框架:让Python开发者轻松构建量子神经网络
为降低量子神经网络的研发门槛并提升其实用性,本文介绍一个名为GQNN(Generalized Quantum Neural Network)的Python开发框架。
355 4
GQNN框架:让Python开发者轻松构建量子神经网络
|
10月前
|
Java 数据挖掘 数据处理
(Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。 Pandas 主要引入了两种新的数据结构:Series 和 DataFrame。
773 0
|
10月前
|
Java 数据处理 索引
(numpy)Python做数据处理必备框架!(二):ndarray切片的使用与运算;常见的ndarray函数:平方根、正余弦、自然对数、指数、幂等运算;统计函数:方差、均值、极差;比较函数...
ndarray切片 索引从0开始 索引/切片类型 描述/用法 基本索引 通过整数索引直接访问元素。 行/列切片 使用冒号:切片语法选择行或列的子集 连续切片 从起始索引到结束索引按步长切片 使用slice函数 通过slice(start,stop,strp)定义切片规则 布尔索引 通过布尔条件筛选满足条件的元素。支持逻辑运算符 &、|。
446 0
|
JSON 监控 BI
拼多多批量下单工具,拼多多买家批量下单软件,低价下单python框架分享
使用Selenium实现自动化操作流程多线程订单处理提升效率
|
机器人 数据安全/隐私保护 Python
企业微信自动回复软件,企业微信自动回复机器人,python框架分享
企业微信机器人包含完整的消息处理流程,支持文本消息自动回复、事件处理、消息加密解密等功能
|
10月前
|
开发框架 前端开发 Go
【GoGin】(0)基于Go的WEB开发框架,GO Gin是什么?怎么启动?本文给你答案
Gin:Go语言编写的Web框架,以更好的性能实现类似Martini框架的APInet/http、Beego:开源的高性能Go语言Web框架、Iris:最快的Go语言Web框架,完备的MVC支持。
732 1
|
11月前
|
机器学习/深度学习 算法 PyTorch
【Pytorch框架搭建神经网络】基于DQN算法、优先级采样的DQN算法、DQN + 人工势场的避障控制研究(Python代码实现)
【Pytorch框架搭建神经网络】基于DQN算法、优先级采样的DQN算法、DQN + 人工势场的避障控制研究(Python代码实现)
286 1
|
JSON 数据安全/隐私保护 数据格式
拼多多批量下单软件,拼多多无限账号下单软件,python框架仅供学习参考
完整的拼多多自动化下单框架,包含登录、搜索商品、获取商品列表、下单等功能。

推荐镜像

更多