Python后台分页删除编辑查询
而 QueryString (URL)中也有可以带参数(通常是 GET 时的参数)。如果 POST 时同时存在 QueryString 和 body data,那么 get_argument 获取得到的其实是 QueryString 中的数据,而不是 body 中的数据。
get_body_argument 这个方法是获取 body 中的参数值。
class AjaxLockListHandler(BaseHandler):
# @tornado.web.authenticated
def post(self):
try:
req_data = json.loads(self.request.body.decode())
except Exception as e:
print("AjaxLockListHandler handle POST request error: %s, it should be the data from client is illegal" % str(e))
self.write(REQUEST_ERROR)
return print("AjaxLockListHandler receive POST request: %s" % req_data) params = {}
# TODO: 分页和查询参数合法性检查
# ——分页所需数据——
# 起始位置,默认为0
if "start" in req_data:
params["offset"] = req_data["start"]
else:
params["offset"] = 0
# 每页显示多少数据,默认为10
if "limit" in req_data:
params["limit"] = req_data["limit"]
else:
params["limit"] = 10
# dataTable校验用的参数
if "draw" in req_data:
draw = req_data["draw"]
else:
draw = 0 # ——查询所需数据——
# product_ver字段数据,REST需要string类型,可有可无,若没有表示不关心该项数据,下同
if "product_ver" in req_data:
params["product_ver"] = req_data["product_ver"]
# lock_id字段数据,REST需要uint32类型数据,可有可无
if "lock_id" in req_data:
params["lock_id"] = int(req_data["lock_id"])
# firmware_ver字段数据,REST需要string类型数据,可有可无
if "firmware_ver" in req_data:
params["firmware_ver"] = req_data["firmware_ver"]
# corp_id字段数据,REST需要int类型数据,可有可无
if "corp_id" in req_data:
params["corp_id"] = int(req_data["corp_id"])
# master_id字段数据,REST需要int型数据,可有可无
if "master_id" in req_data:
params["master_id"] = int(req_data["master_id"])
# mac字段数据,REST需要string类型数据,可有可无
if "mac" in req_data:
params["mac"] = req_data["mac"]
# cat_eye字段数据,REST需要int型数据,可有可无
# 【注意】:数据库中该字段为boolean类型,表示有无猫眼,但查询的时候可能不关心该项数据,所以此处定义为int类型
if "cat_eye" in req_data:
params["cat_eye"] = int(req_data["cat_eye"])
# has_ap字段数据,REST需要int型数据,可有可无
# 【注意】:数据库中该字段为boolean类型,表示有无猫眼,但查询的时候可能不关心该项数据,所以此处定义为int类型
if "has_ap" in req_data:
params["has_ap"] = int(req_data["has_ap"]) p_str = json.dumps(params, separators=(',', ':'), sort_keys=True) + "+" + APP_SECRET
sign = md5(p_str)
params["sign"] = sign
print("AjaxLockListHandler handle POST request,request_body: %s" % params) content, err = http.fetch("/admin/lock/list", json.dumps(params))
if err is not None:
self.write(SERVER_ERROR)
elif len(content) == 0:
table_data = json.dumps({"draw": draw, "recordsTotal": 0, "data": "", "recordsFiltered": 0})
self.write(table_data)
else:
js = json.loads(content.decode())
if "data" in js:
data = js["data"]
table_data = json.dumps({"draw": draw, "recordsTotal": data["total"], "data": data["locks"], "recordsFiltered": data["total"]})
self.write(table_data)
# self.render('lock/list.html', data=table_data)
else:
self.write(SERVER_ERROR)
删除:
class AjaxLockDeleteHandler(BaseHandler):
# @tornado.web.authenticated
def post(self):
try:
req_data = json.loads(self.request.body.decode())
except Exception as e:
print(
"AjaxLockDeleteHandler handle POST request error: %s, it should be the data from client is illegal" % str(
e))
self.write(REQUEST_ERROR)
return if "lock_id" in req_data:
lock_id = int(req_data["lock_id"])
# lock_id合法性检查
if lock_id <= 0:
self.write(REQUEST_ERROR)
return
else:
print("AjaxLockDeleteHandler receive request of lock_id: %s" % lock_id)
params = {"lock_id": lock_id}
p_str = json.dumps(params, separators=(',', ':'), sort_keys=True) + "+" + APP_SECRET
sign = md5(p_str)
params["sign"] = sign content, err = http.fetch("/admin/lock/delete", json.dumps(params))
print("====", content)
if err is not None:
print("AjaxLockDeleteHandler handle post request to REST server error: %s" % str(err))
if err.code == 400:
self.write(REQUEST_ERROR)
else:
self.write(SERVER_ERROR)
else:
js = json.loads(content.decode())
if "data" in js:
data = js["data"]
table_data = json.dumps({"data": data})
self.write(table_data)
else:
self.write(REQUEST_ERROR)
修改:
class AjaxLockUpdateHandler(BaseHandler):
def post(self):
try:
req_data = json.loads(self.request.body.decode())
except Exception as e:
print(
"AjaxLockUpdateHandler handle POST request error: %s, it should be the data from client is illegal" % str(
e))
self.write(REQUEST_ERROR)
return
# 添加descr?
if "lock_id" in req_data and "name" in req_data:
if req_data["lock_id"] <= 0 or req_data["name"] == "":
print("AjaxLockUpdateHandler handle POST request error: lock_id is illegal or name is NULL")
self.write(REQUEST_ERROR)
else:
params = {"lock_id": req_data["lock_id"], "name": req_data["name"]}
p_str = json.dumps(params, separators=(',', ':'), sort_keys=True) + "+" + APP_SECRET
sign = md5(p_str)
params["sign"] = sign
print(params)
content, err = http.fetch("/admin/lock/update", json.dumps(params))
if err is not None:
print("AjaxLockUpdateHandler handle post request to REST server error: %s" % str(err))
if err.code == 400:
self.write(REQUEST_ERROR)
else:
self.write(SERVER_ERROR)
else:
print("AjaxLockUpdateHandler handle post request to REST server success")
self.write("{}")
跟dataTable+分页。。。js是相关联的
Python后台分页删除编辑查询的更多相关文章
- python操作oracle数据库-查询
python操作oracle数据库-查询 参照文档 http://www.oracle.com/technetwork/cn/articles/dsl/mastering-oracle-python- ...
- Python 代码实现模糊查询
Python 代码实现模糊查询 1.导语: 模糊匹配可以算是现代编辑器(如 Eclipse 等各种 IDE)的一个必备特性了,它所做的就是根据用户输入的部分内容,猜测用户想要的文件名,并提供一个推荐列 ...
- python循环删除列表元素常见错误与正确方法
python循环删除列表元素 觉得有用的话,欢迎一起讨论相互学习~Follow Me 常见错误 常见错误一:使用固定长度循环删除列表元素 # 使用固定长度循环pop方法删除列表元素 num_list_ ...
- 基于SQL和PYTHON的数据库数据查询select语句
#xiaodeng#python3#基于SQL和PYTHON的数据库数据查询语句import pymysql #1.基本用法cur.execute("select * from biao&q ...
- 孤荷凌寒自学python第五十四天使用python来删除Firebase数据库中的文档
孤荷凌寒自学python第五十四天使用python来删除Firebase数据库中的文档 (完整学习过程屏幕记录视频地址在文末) 今天继续研究Firebase数据库,利用google免费提供的这个数据库 ...
- MySQL之慢查询-删除慢查询日志
一.环境 OS:CentOS release 5.8(64位) DB:MySQL5.5.17 二.操作 直接通过命令 rm -f 删除了慢查询日志 三.出现故障 慢查询日志没有自己主 ...
- SOLRJ单机-添加文档,删除,查询操作
单机solrJ不需要占用太多的服务器和资源,本机使用solr-6.3.0,也不需要配置tomcat. 一.新建一个java工程需要依赖的jar包如下: solr-solrj-6.3.0.jar; c ...
- MySQL数据库表的数据插入、修改、删除、查询操作及实例应用
一.MySQL数据库表的数据插入.修改.删除和查询 CREATE DATABASE db0504; USE db0504; CREATE TABLE student ( sno ) NOT NULL ...
- Python进阶----多表查询(内连,左连,右连), 子查询(in,带比较运算符)
Python进阶----多表查询(内连,左连,右连), 子查询(in,带比较运算符) 一丶多表查询 多表连接查询的应用场景: 连接是关系数据库模型的主要特点,也是区别于其他 ...
随机推荐
- 基于CkEditor实现.net在线开发之路(7)列表页面开发动作介绍
一个列表页面不止是查询,它也包含了很多业务上功能的实现,这些业务功能的实现的逻辑我称之为动作.如触发单击按钮删除数据,更改业务表数据,调用webService,调用WCF接口,弹出新窗体新增.修改.查 ...
- android 创建数组
一: private String[] data = new String[]{"Hello", "jike", "world"}; 二: ...
- bzoj1503--treap
这道题和一般的题目不同,A和S操作要修改所有节点.所以定义基准d,每个节点的工资是它的值+d,这样就能完成所有操作. I k:将值为k-d的节点插入treap A k:将d加上k S k:将d减去k, ...
- 《连载 | 物联网框架ServerSuperIO教程》- 7.自控通讯模式开发及注意事项
1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...
- GJM: 设计模式 - 观察者模式
GJM : 观察者模式 视频地址: http://www.imooc.com/learn/415 本课程通过一个天气预报的发布和订阅案例,来讲解观察者模式在Java项目中的应用.主要包括观察者模式的结 ...
- 设计模式-策略模式(Strategy Model)
1.概述 在开发过程中常常会遇到类似问题,实现一个功能的时候往往有多种算法/方法(策略),我们可以根据环境的不同来使用不同的算法或策略来实现这一功能. 如在人物比较排序的实现中,我们有 ...
- JS高程5.引用类型(1)Object类型
引用类型 在ECMASCript中,引用类型是一种数据结构,将数据和功能组织在一起,引用类型有时候也被称为对象定义,因为它们描述的是一类对象所具有的属性和方法.(注意:尽管ECMAScript从技术上 ...
- 移动Web触摸与运动解决方案AlloyTouch开源啦
传送门 Github地址:https://github.com/AlloyTeam/AlloyTouch 简介 AlloyTouch的本质是运动一个数字,把数字的物理变化映射到你想映射的任何属性上.所 ...
- Mybatis环境
第一步:下载jar包并导入 1.mysql驱动包 2.mybatis环境包 第二步:创建MYSQL数据库 由于这是用于测试,只创建了test-usreinfo数据表 第三步:在src文件夹中创建myb ...
- iOS-集成支付宝支付、微信支付简单总结
支付宝快捷支付: 官方文档中,支付宝说建议我们使用支付时要讲签名过程放在服务器端,这样安全.同时给的demo中签名是在本地移动端做的...不过支付宝的集成还是较简单的. 为了安全签名当然放后台做了.我 ...