我的第一个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/
有兴趣的朋友可以加加python开发QQ群:669058475 ,大家一起探讨。大家有问题的话可以在群里发问,当然我平时工作也非常繁忙不一定会及时回复。

本文为AllEmpty原创,欢迎转载,但未经同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

时间: 2024-08-27 05:31:20

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

我的第一个python web开发框架(3)——怎么开始?

小白与小美公司经过几次接触商谈,好不容易将外包签订了下来,准备开始大干一场.不过小白由于没有太多的项目经验,学过python懂得python的基本语法,在公司跟着大家做过简单功能,另外还会一些HTML和Jquery,对数据库一知半解,看来要完成这个项目也不是一件容易的事情.想到这些小白顿时头都大了起来,想要开干却无从下手,所以只能找对自己挺照顾的部门老大请教一下. 人物介绍:老菜,部门老大,IT老民工,有着十多年开发经验的码农,做过各种项目,开发经验十分丰富,是个热心助人的老好人. 小白:老大救

我的第一个python web开发框架(2)——一个简单的小外包

第一部分说明 第一部分大概有20来章,主要讲的是一些开发常识.开发前中后期准备内容.开发环境与服务器部署环境安装设置.python基础框架结构与功能等内容,代码会比较简单. 本系列会以故事的方式,向大家描述一位有点开发基础的程序猿,怎么将一个小系统,根据需求的增加,以及对技术的追求,慢慢的通过重构,在解决各种技术难题的过程中,完善自己的架构,开发出一个功能比较完善的开发框架.代码开始会写的比较简单.入门级的,然后会根据需求慢慢重构成有体系的框架. 主人公:小白——计算机专业刚毕业的程序猿,有点内

我的第一个python web开发框架(15)——公司介绍编辑功能

完成登录以后,就会进入后台管理系统的主界面,因为这个是小项目,所以导航菜单全部固化在HTML中,不能修改.一般后台还会有一个欢迎页或关键数据展示的主页面,小项目也没有多大的必要,所以登录后直接进入公司介绍编辑页面. 首先我们来看一下公司介绍页面内容 看上去功能好像很简单,其实我们要处理的东西还是挺多的. 从页面上看,我们需要有一个记录读取的接口,来获取公司介绍的内容,并展示在页面上.当然现在数据库里面没有记录存在,所以我们还需要向数据库的信息表(infomation)中插入一条公司介绍的记录,这

我的第一个python web开发框架(19)——产品发布相关事项

好不容易小白将系统开发完成,对于发布到服务器端并没有什么经验,于是在下班后又找到老菜. 小白:老大,不好意思又要麻烦你了,项目已经弄完,但要发布上线我还一头雾水,有空帮我讲解一下吗? 老菜:嗯,系统上线并不一件简单的事情,它可大可小.如果准备不充分,有可能会很多问题出现.你认为写好代码后要怎么发布? 小白:呃,完成开发后,上传到服务器,然后浏览器可以正常访问... 老菜:看来得普及一下上线的相关知识才行. 正规的产品上线一般可以按下面几个步骤来进行: 1. 开发人员自测(开发环境) 2. 测试人

全面解读Python Web开发框架Django

全面解读Python Web开发框架Django Django是一个开源的Web应用框架,由Python写成.采用MVC的软件设计模式,主要目标是使得开发复杂的.数据库驱动的网站变得简单.Django注重组件的重用性和“可插拔性”,敏捷开发和DRY法则(Don’t Repeat Yoursef). 花了两周时间,利用工作间隙时间,开发了一个基于Django的项目任务管理Web应用.项目计划的实时动态,可以方便地被项目成员查看(^_^又 重复发明轮子了).从前台到后台,好好折腾了一把,用到:HTM

Python Web开发框架Django

文章地址:http://game-lab.org/?p=357 花了两周时间,利用工作间隙时间,开发了一个基于Django的项目任务管理Web应用.项目计划的实时动态,可以方便地被项目成员查看(^_^又重复发明轮子了).从前台到后台,好好折腾了一把,用到:HTML.CSS.JavaScript.Apache.Python.mod_wsgi.Django.好久不用CSS和JavaScript了,感到有点生疏了,查了无数次手册.后台Django开发环境的搭建也花了不少时间和精力.记录下来,免得以后走

Python Web开发框架

Django Django 应该是最出名的Python框架,GAE甚至Erlang都有框架受它影响.Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构.以及全功能的管理后台. Flask Flask是一个使用Python编写的轻量级Web应用框架.基于Werkzeug WSGI工具箱和Jinja2 模板引擎.Flask也被称为“microframework”,因为它使用简单的核心,用extension增加其他功能.Fla

《Python入门》第一个Python Web程序——简单的Web服务器

上一篇讲了<Python入门>Windows 7下Python Web开发环境搭建笔记,接下来讲一下Python语言Web服务的具体实现:第一个Python Web程序--简单的Web服务器. 与其它Web后端语言不同,Python语言需要自己编写Web服务器. 如果你使用一些现有的框架的话,可以省略这一步: 如果你使用Python CGI编程的话,也可以省略这一步: 用Python建立最简单的web服务器 利用Python自带的包可以建立简单的web服务器.在DOS里cd到准备做服务器根目录

Pycharm+Django搭建第一个Python Web程序

1.安装django 无论是Python2.x还是Python3.x版本,都可以使用pip来安装Django.在控制台使用如下命令:pip install django 如: 2.检查dgango是否安装成功 安装成功后,在ipython里面或者Pycharm的Python console控制台导入django,并查看版本信息,使用如下命令: a. import django b. django.VERSION 如: 3. 创建一个django程序 命令:django-admin  startp