「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. C# 高效编程笔记1

    C# 高效编程笔记1 1.使用属性而不是可访问的数据成员 (1).NET Framework中的数据绑定类仅支持属性,而不支持共有数据成员 (2)属性相比数据成员更容易修改 2.用运行时常量(read ...

  2. 【转】zigbee终端无法重连的问题解决

    zigbee终端无法重连的问题解决 1.zigbee重连的原因 (1)zigbee由于各种原因的干扰导致信号太差而掉线. (2)协调器重启. 2.zigbee终端重连的处理 (1)zigbee掉线后会 ...

  3. 高性能 TCP & UDP 通信框架 HP-Socket v3.5.3

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...

  4. EL表达式的算术运算

    一个例子--乘法运算 ${book.bookCount * book.bookPrice } 两个不同对象的EL表达式的算术运算同理 ${student.studentNum * book.bookP ...

  5. 《Web开发中让盒子居中的几种方法》

    一.记录下几种盒子居中的方法: 1.0.margin固定宽高居中: 2.0.负margin居中: 3.0.绝对定位居中: 4.0.table-cell居中: 5.0.flex居中: 6.0.trans ...

  6. Andriod 自定义控件之音频条

    今天我们实现一个直接继承于View的全新控件.大家都知道音乐播放器吧,在点击一首歌进行播放时,通常会有一块区域用于显示音频条,我们今天就来学习下,播放器音频条的实现. 首先我们还是先定义一个类,直接继 ...

  7. MapReduce 的架构

    主从结构 主节点,只有一个 : JobTracker   ,JobTracker 一般情况下,运行在 namenode 这台机器上. 从节点,有很多个 : TaskTrackers  ,  部署在剩下 ...

  8. Ctrl-A全选这点事(C#,WinForm)

    所有的文本框,不管单行多行都Ctrl-A全选就好了吧?是啊,很方便.Windows的软件基本都是这样.可为什么我们自己制作的WinForm就默认不是这样呢?谁知道呢,可能是WinForm饱受诟病,要改 ...

  9. Yii2.0.7 限制user module登录遇到的问题

    在Yii2.0.6的时候我是在以下文件通过以下方法实现的. frontend/modules/user/Module.php namespace frontend\modules\user; clas ...

  10. php 时间倒计时代码 个人写法 有好的想法的欢迎贴出来分享

    $now=time(); $secondtime=$end_time-$now;//期限时间减去现在时间 剩余时间 $second=$secondtime % 60;//取余得到秒数 $nowtime ...