「POST 数据」通常指 POST 时 body 中的数据。
而 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后台分页删除编辑查询的更多相关文章

  1. python操作oracle数据库-查询

    python操作oracle数据库-查询 参照文档 http://www.oracle.com/technetwork/cn/articles/dsl/mastering-oracle-python- ...

  2. Python 代码实现模糊查询

    Python 代码实现模糊查询 1.导语: 模糊匹配可以算是现代编辑器(如 Eclipse 等各种 IDE)的一个必备特性了,它所做的就是根据用户输入的部分内容,猜测用户想要的文件名,并提供一个推荐列 ...

  3. python循环删除列表元素常见错误与正确方法

    python循环删除列表元素 觉得有用的话,欢迎一起讨论相互学习~Follow Me 常见错误 常见错误一:使用固定长度循环删除列表元素 # 使用固定长度循环pop方法删除列表元素 num_list_ ...

  4. 基于SQL和PYTHON的数据库数据查询select语句

    #xiaodeng#python3#基于SQL和PYTHON的数据库数据查询语句import pymysql #1.基本用法cur.execute("select * from biao&q ...

  5. 孤荷凌寒自学python第五十四天使用python来删除Firebase数据库中的文档

    孤荷凌寒自学python第五十四天使用python来删除Firebase数据库中的文档 (完整学习过程屏幕记录视频地址在文末) 今天继续研究Firebase数据库,利用google免费提供的这个数据库 ...

  6. MySQL之慢查询-删除慢查询日志

    一.环境 OS:CentOS release 5.8(64位) DB:MySQL5.5.17 二.操作         直接通过命令 rm -f  删除了慢查询日志 三.出现故障 慢查询日志没有自己主 ...

  7. SOLRJ单机-添加文档,删除,查询操作

    单机solrJ不需要占用太多的服务器和资源,本机使用solr-6.3.0,也不需要配置tomcat. 一.新建一个java工程需要依赖的jar包如下: solr-solrj-6.3.0.jar;  c ...

  8. MySQL数据库表的数据插入、修改、删除、查询操作及实例应用

    一.MySQL数据库表的数据插入.修改.删除和查询 CREATE DATABASE db0504; USE db0504; CREATE TABLE student ( sno ) NOT NULL ...

  9. Python进阶----多表查询(内连,左连,右连), 子查询(in,带比较运算符)

    Python进阶----多表查询(内连,左连,右连), 子查询(in,带比较运算符) 一丶多表查询     多表连接查询的应用场景: ​         连接是关系数据库模型的主要特点,也是区别于其他 ...

随机推荐

  1. struts2学习之旅三 权限管理和导航设计

    1,权限管理的db设计和dao实现,尽量简单快速有效: db的设计如下:权限按照角色来赋给用户: 权限对应每一个具体的功能,有菜单级别的,有导航级别的,还有页面级别的功能: 涉及到权限的敏感操作一般都 ...

  2. 关于fefo函数

    feof是C语言标准库函数函数,其原型在stdio.h中,其功能是检测流上的文件结束符. 函数原型: int feof(FILE *stream); 返回值:如果文件结束,则返回非0值,否则返回0 在 ...

  3. CSS3鼠标滑过图标放大以及旋转

    本人是HTML5-CSS3初学者,这次分享一款纯CSS3实现的图片动画,当鼠标滑过小图标时,图标会放大,同时图标会出现旋转的动画效果.我们在很多个性化个人博客中经常看到鼠标滑过人物头像后头像图片旋转就 ...

  4. COLLATE匹配两表数据

    MesOrd.MesNO COLLATE Chinese_Taiwan_Stroke_CI_AS = ErpSO.SoNO

  5. jQuery选择器笔记

    1.$(this).hide() - 隐藏当前元素 $("p").hide() - 隐藏所有段落 $(".test").hide() - 隐藏所有 class= ...

  6. 理解jQuery对象$.html

    前面的话 如果要比喻jQuery和原生javascript的关系,我个人认为是自动档和手动档汽车的区别.使用原生javascript,可以知道离合器以及档位的作用:而使用jQuery,则把离合器和手动 ...

  7. SAP(ABAP) 显示等待图标的FM:SAPGUI_PROGRESS_INDICATOR-SAP进度条

    在执行一些数据量大的报表时候,为了防止用户认为是死机,可以再程序中添加正在处理的图标,可以CALL一个 FM来实现. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' ...

  8. 【容器云】传统金融企业的 Docker 实践

    基于 Docker 的容器云-Padis 目前市面上基于容器云的产品有很多,对于平安而言,则是基于 Docker 的 Padis 平台.所谓 Padis,全称是 PingAn Distribution ...

  9. 16-static和extern关键字2-对变量的作用

    上一讲介绍了static和extern对函数的作用,static用来定义一个内部函数,不允许其他文件访问:extern用来定义和声明一个外部函数,允许其他文件访问.static和extern对变量也有 ...

  10. 论Pair的重要性

    这些天我在用React和D3做图表,从已经实现的图表里复制了一些坐标轴的代码,发现坐标轴上的n个点里,只有第一个点下面能渲染出文字提示,其余点下面都无法渲染出文字. 和组里的FL一起百思不得其解好几天 ...