首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用angularjs或javascript的flask不稳定批量删除,这是可能的吗?

使用angularjs或javascript的flask不稳定批量删除,这是可能的吗?
EN

Stack Overflow用户
提问于 2018-06-03 22:24:54
回答 1查看 161关注 0票数 1

我想使用angularjs http请求批量删除flask restless api版本0.17.0。我知道我可以使用url中的记录id一个接一个地做。但如果这可以在一个请求中实现,我会很高兴。我不确定这是否可能

Flask后端如下所示:

manager.create_api(Messages,
     methods=['GET','PUT','DELETE'], 
     preprocessors={"GET_MANY": [auth_func],
                    "GET_SINGLE": [auth_func],
                    "PUT_SINGLE":[auth_func],
                    "DELETE_SINGLE":[auth_func],
                    "DELETE_MANY":[auth_func] },
     allow_delete_many=True)

我的Angularjs代码如下所示:

$scope.deleteMails = function(){
    //$scope.deleteMessage = [1,2,3] array of id to delete
    var create_filters = []      
    $scope.deleteMessage.forEach(ele => {            
        create_filters.push({"name": "id", "op": "equals", "val": ele.toString()})
    });        
    $http({
        method  : 'DELETE',
        headers: {'X-CSRFToken' : csrf }, 
        url     : '/api/tbl_messages',
        data : { q : {filters: create_filters} }    
    })
    .then(function(res){
        console.log(res)
    },function(res){
        console.log('error')
    })
}

此请求已完成,状态为200,但我在数据库中的整个表都被删除了。在所有情况下,它都会删除我的整个数据库(表),而不是具体的ids。我真的不知道在这里该做什么。非常感谢您提前给予的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-04 04:27:11

Flask-restless希望在查询字符串中传递过滤器--而不是作为数据的一部分。这就是为什么它要删除你所有的数据。它根本不能拾取过滤器。

一旦解决了这个问题,你的过滤器本身就会有一个额外的问题。您将此内容作为筛选器发送:

[ 
  {'name': 'id', 'op': 'equals', 'val': 1},
  {'name': 'id', 'op': 'equals', 'val': 2}
]

只有当所有过滤器都匹配时,Flask- query查询才会将某项视为匹配。换句话说,它用一个and将它们连接起来:

delete from message where id = 1 and id = 2

你要么需要告诉flask- that你想要一个'or‘

[
  { "or": [
      {"name": "id", "op": "equals", "val": 1},
      {"name": "id", "op": "equals", "val": 2}
  ] }
]

或者将过滤器操作符更改为“in”:

  [  {"name": "id", "op": "in", "val": [1, 2] } ]

尝试将您的角度代码更改为(请注意从data到params的更改):

$http({
    method  : 'DELETE',
    headers: {'X-CSRFToken' : csrf }, 
    url     : '/api/tbl_messages',
    params: { q : JSON.stringify({filters:[{or: create_filters}]}) }    
})

或者--也许更容易理解--将运算符改为'in‘,这样就可以去掉forEach:

$http({
    method  : 'DELETE',
    headers: {'X-CSRFToken' : csrf }, 
    url     : '/api/tbl_messages',
    params: { q : JSON.stringify({filters:[{name:'id', op:'in', val: $scope.deleteMessage}]}) }    
})
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50667409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档