「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#开发微信门户及应用(34)--微信裂变红包

    在上篇随笔<C#开发微信门户及应用(33)--微信现金红包的封装及使用>介绍了普通现金红包的封装和使用,这种红包只能单独一次发给一个人,用户获取了红包就完成了,如果我们让用户收到红包后,可 ...

  2. StringBuilder的使用

    今天用到了StringBuilder来拼接查询语句,发现这个真好用,决定做个小结. 百度一个StringBuilder的定义:String 对象是不可改变的.每次使用 System.String 类中 ...

  3. php实现设计模式之 模板方法模式

    <?php /** * 模板模式 * * 定义一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构可以定义该算法的某些特定步骤 * */ abstract class ...

  4. 关于MySql的1045错误修正

    很多情况数据库很久没有使用,偶尔打开会出现一系列错误,例如1045错误即是 mysql ERROR 1045 : Access denied for user‘root’@localhost(usin ...

  5. JS正则表达式(JavaScript regular expression)

    RegExp直接量和对象的创建 就像字符串和数字一样,程序中每个取值相同的原始类型直接量均表示相同的值,这是显而易见的.程序运行时每次遇到对象直接量(初始化表达式)诸如{}和[]的时候都会创建新对象. ...

  6. JQuery中隐藏/显示事件函数

    1.$("button").click(function(){ $("p").hide(); });2.如果您的网站包含许多页面,并且您希望您的 jQuery ...

  7. Linux 命令学习笔记

    文件基本操作 ls ,rm , mv , ln   ls ls [option] [files]   不带参数时,列出当前工作目录的内容 $ls   列出指定目录的内容 ls dir1 或个别文件 l ...

  8. Undefined symbols for architecture arm64:

    1. 没有往项目中导入静态库(.a 文件)需要的 framework. 2.拖到项目中的静态库不支持arm64(或其他)指令集  这种情况没遇到过 一般都是第一种情况.

  9. 【容器云】十分钟快速构建 Influxdb+cadvisor+grafana 监控

    本文作者:七牛云布道师@陈爱珍,DBAPlus社群联合发起人.前新炬技术专家.多年企业级系统的应用运维及分布式系统实战经验.现专注于容器.微服务及DevOps落地的研究与实践. 安装过程 三个都直接下 ...

  10. IOS 杂笔-11(实现在外部无法改变UIView的size)

    我想题目说的或许不是很清楚,那么现在我详细介绍一下这篇随笔内容. 在外部无法改变UIVIew控件的size. 这里说是UIView,但是事实上,是大多数控件而绝非仅UIView. 想要实现在外部无法改 ...