「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. ASP.NET MVC4入门到精通系列目录汇总

    序言 最近公司在招.NET程序员,我发现好多来公司面试的.NET程序员居然都没有 ASP.NET MVC项目经验,其中包括一些工作4.5年了,甚至8年10年的,许多人给我的感觉是:工作了4.5年,We ...

  2. 关于mysql 和Oracle的一大堆麻烦问题的解决方案

    [INS-20802] Oracle Net Configuration Assistant 失败 在百度上找了半天并没有找到可靠的解决方案,最后是可以安装完成的,之后我 通过SQL Plus连接就报 ...

  3. RESTful Api 身份认证安全性设计

    REST是一种软件架构风格.RESTful Api 是基于 HTTP 协议的 Api,是无状态传输.它的核心是将所有的 Api 都理解为一个网络资源.将所有的客户端和服务器的状态转移(动作)封装到 H ...

  4. 通过使用OpenVPN来构建一个VPN

    首先我们需要简单熟悉一下OpenVPN和VPN概念,方便我们在使用OpenVPN构建VPN时的操作~  VPN概述 VPN,即虚拟专用网络,其功能是:在公用网络上建立专用网络,进行加密通讯.在企业网络 ...

  5. ArcGIS Engine开发之空间查询

    空间查询功能是通过用户选择的空间几何体以及该几何体与当前地图中要素之间的几何关系进行空间查找,从而得到查询结果的操作. 相关类与接口 空间查询相关的类主要是SpatialFilter类,其实现的接口主 ...

  6. tableView显示第一个cell有偏移问题

    - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 0 ...

  7. java中IO流异常处理

    import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...

  8. javascript-组合模式

    组合模式笔记 组合模式又称部分-整体模式,将对象组合成树形结构以表示'部分整体'的层次结构 组合模式使得用户对单个对象和组合对象的使用具有一致性 demo实例 :表单模块 要调用到前面学习到的寄生组合 ...

  9. monkey命令选项参考

    基本参数:     --help              打印帮助消息 -v  可以在命令行中出现多次,每次一个-V选项都会增加monkey向命令行打印输出的详细级别.默认的级别0只会打印启动信息. ...

  10. kmeans算法并行化的mpi程序

    用c语言写了kmeans算法的串行程序,再用mpi来写并行版的,貌似参照着串行版来写并行版,效果不是很赏心悦目~ 并行化思路: 使用主从模式.由一个节点充当主节点负责数据的划分与分配,其他节点完成本地 ...