后端数据库实现数据排序,并存入排序结果(保存前端拖拽排序结果)。以Pymongo+Tornado为例。

拖拽排序–后端实现
实现思路:
要想实现排序后的状态能够对所有人可见,我们就需要对原来的表设定一个字段,来存储次序。例如下列的例子,我们增加了一个字段pre_sort作为排序字段。

task_idtask_namepre_sort
11ab实现数据可视化1
21ae完成部署3
34ee完成测试工作7

我们可以约定,前端传入排序好的结果,例如:

{
	"data": [
      "21ae",
      "34ee",
      "11ab"
   ]
}

即表示,传入排序后的task_id
我们根据这些数据,可以在数据库中找到匹配的数据(原顺序):

[
	{"task_id": "11ab", "pre_sort": 1, "task_name": "实现数据可视化"},
	{"task_id": "21ae", "pre_sort": 3, "task_name": "完成部署"},
	{"task_id": "34ee", "pre_sort": 7, "task_name": "完成测试工作"},
]

即取出三个数据原来的顺序为:

[1, 3, 7]

将其对应到我们排序后的数组:

{
	"data": [
      {"21ae": 1},
      {"34ee": 3},
      {"11ab": 7}
   ]
}

再更新回数据库中:

task_idtask_namepre_sort
11ab实现数据可视化7
21ae完成部署1
34ee完成测试工作3

以下是接口代码实现:

"""
    任务重排序
"""
class ReorderTasksHandler(BaseHandler):
    def initialize(self):
        self.connect, self.db = database_decorator()

    @with_transactional
    def post(self, **kwargs):
  		# 解析请求体
        data = json.loads(self.request.body.decode('utf-8'))
        # 开启事务
        session = kwargs['session']
		# 获取排序后的task_id列表
        task_id_list = list(data.get("task_id_list"))
		# 按照原有的顺序查出
        task_list = list(self.db.TaskDetail.find({"task_id": {"$in": task_id_list}}, {"_id": 0}, session=session).sort("pre_sort", -1))
		# 替换成现有的顺序
        pre_order_list = [item.get("pre_sort") for item in task_list]
        for idx, task_id in enumerate(task_id_list):
            self.db.TaskDetail.update_one({"task_id": task_id}, {"$set": {"pre_sort": pre_order_list[idx]}},
                                          session=session)
        task_list = list(
            self.db.TaskDetail.find({"task_id": {"$in": task_id_list}}, {"_id": 0}, session=session).sort("pre_sort",
                                                                                                          -1))
        # 将排序成果后存入数据库的结果返回给前端
        result = dict(code=200, state="success", message="排序成功", payload=task_list)
        return self.write(json.dumps(result, ensure_scii=False))
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘先生的u写倒了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值