使用AngularJS或JavaScript的Flask Restless批量删除,这可能吗?



我想使用 angularjs http 请求对烧瓶 restless api 版本 0.17.0 进行批量删除。 我知道我可以一一做,在 url 中使用记录 id。但如果在一个请求中可以做到这一点,我会很高兴。我不确定这是否可能

烧瓶后端如下所示:

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,但我在 db 中的整个表被删除。在所有情况下,它都会删除我的整个数据库(表(而不是具体的 ID。 我真的不知道该在这里做什么。非常感谢您提前提供帮助。

Flask-restless 希望过滤器在查询字符串中传递 - 而不是作为数据的一部分。 这就是它删除所有数据的原因。 它根本没有拿起过滤器。

修复后,过滤器本身就会出现另一个问题。 您发送此内容作为筛选器:

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

仅当所有筛选器都匹配时,Flask-restless 查询才会将某些内容视为匹配项。 换句话说,它用 and:

delete from message where id = 1 and id = 2

你要么需要告诉烧瓶不安分你想要一个"或">

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

或者将筛选器运算符更改为"in":

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

尝试将角度代码更改为(注意从数据到参数的更改(:

$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}]}) }    
})

相关内容

  • 没有找到相关文章

最新更新