Python/Flask+JavaScript/AJAX实现REST通信时PUT请求参数无法传递的问题求助
Python/Flask+JavaScript/AJAX实现REST通信时PUT请求参数无法传递的问题求助
我有一个Web应用,通过REST服务从数据库获取数据,最终生成表格形式的输出:
(表格输出示例:每行包含数据内容以及Collect和Archive两个操作按钮)
如你所见,表格的每一行都有两个按钮(Collect/Archive),用户点击后可以通过另一个REST服务更新数据库,该服务接受HTML PUT请求。
按钮的点击动作是用JavaScript实现的,点击按钮时会执行以下代码:
function updateSourceState(sourceTypeId, sourceId, dataForUpdate) { $.ajax({ url: '/update', data: {source_type_id: sourceTypeId, source_id: sourceId, data_for_update: dataForUpdate}, dataType: 'json', type: 'PUT', success: function (data) { console.log('Data updated successfully'); }, error: function(data) { console.log('Data update failed. Response: ' + data); } }).done(function() { console.log('DONE: data updated successfully'); }).fail(function(msg) { console.log('FAIL: data update failed: ' + msg); }).always(function(msg) { console.log('ALWAYS message: ' + dataForUpdate + ', url: ' + url); }); }
我用Python-Flask和JavaScript实现了与REST服务的通信,主程序(WebViewer.py)定义的路由如下:
@bp.route('/update', methods=['PUT']) def update_source_state(): app.logger.debug('[DEBUG] entering update_source_state()') source_id = request.args.get('source_id') source_type = request.args.get('source_type_id') dataForUpdate = request.args.get('data_for_update') url = '{0}/{1}/source/{2}'.format(ARCHIVE_CONFIG_BASE_URL, source_type, source_id) response = requests.put( url=url , data=dataForUpdate , headers={'Content-Type': 'application/json', 'accept': 'application/json'} ) if response.status_code == 200: return jsonify({'status': 'success'}), 200 elif response.status_code == 405: return jsonify({'status': 'method not allowed'}), 405 elif response.status_code == 500: return jsonify({'status': 'server error'}), 500 else: return jsonify({'status': 'failed'}), 600
我在浏览器调试器里看到JavaScript的updateSourceState()函数被调用,且变量都已正确赋值,但在Flask的update_source_state()方法中,request.args获取到的所有参数都是None,看起来参数没有从JavaScript传递到Flask/Python端。
请问在这个场景下,执行PUT请求的正确语法是什么?非常感谢任何帮助!
备注:内容来源于stack exchange,提问作者WolfiG
相关产品推荐
相关产品推荐

