flask restless 批量删除使用 angularjs 或 javascript,这可能吗?
flask restless bulk delete using angularjs or javascript, is that possible?
我想使用 angularjs 对 flask restless api 版本 0.17.0 的 http 请求进行批量删除。
我知道我可以使用 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,但我在数据库中的整个 table 已被删除。在所有情况下,它都会删除我的整个数据库 (table) 而不是具体的 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
你要么需要告诉 flask-restless 你想要一个 'or'
[
{ "or": [
{"name": "id", "op": "equals", "val": 1},
{"name": "id", "op": "equals", "val": 2}
] }
]
或者将您的过滤器运算符更改为 'in':
[ {"name": "id", "op": "in", "val": [1, 2] } ]
尝试将您的 angular 代码更改为(注意从数据到参数的更改):
$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}]}) }
})
我想使用 angularjs 对 flask restless api 版本 0.17.0 的 http 请求进行批量删除。 我知道我可以使用 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,但我在数据库中的整个 table 已被删除。在所有情况下,它都会删除我的整个数据库 (table) 而不是具体的 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
你要么需要告诉 flask-restless 你想要一个 'or'
[
{ "or": [
{"name": "id", "op": "equals", "val": 1},
{"name": "id", "op": "equals", "val": 2}
] }
]
或者将您的过滤器运算符更改为 'in':
[ {"name": "id", "op": "in", "val": [1, 2] } ]
尝试将您的 angular 代码更改为(注意从数据到参数的更改):
$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}]}) }
})