gpt4 book ai didi

python - Bottle POST 方法 - 获取查询参数

转载 作者:太空宇宙 更新时间:2023-11-04 11:09:52 25 4
gpt4 key购买 nike

我正在尝试向 Bottle 服务器发送 POST AJAX 请求并读取 query_string 参数。这适用于 GET 方法,但对于 POST,bottle.request.query_string 为空。

这是 python 3.6.8。 0.12.17中的Bottle版本

我卡住了,请指教。

Bottle 服务器:

#!/usr/bin/env python3

import bottle
print(bottle.__version__)

class EnableCors(object):
name = "enable_cors"
api = 2

def apply(self, fn, context):
def _enable_cors(*args, **kwargs):
bottle.response.headers["Access-Control-Allow-Origin"] = "*"
bottle.response.headers["Access-Control-Allow-Methods"] = "GET, POST, PUT, OPTIONS"
bottle.response.headers["Access-Control-Allow-Headers"] = "Origin, Accept, Content-Type, X-Requested-With, X-CSRF-Token"

if bottle.request.method != "OPTIONS":
return fn(*args, **kwargs)

return _enable_cors

application = bottle.app()
application.install(EnableCors())

@application.route("/api/params", method=['OPTIONS', 'POST'])
def Api_Params():
print('bottle.request.query_string:', bottle.request.query_string)


bottle.run(host='0.0.0.0', port=8080, debug=True, reloader=True)

测试 javscript 客户端:

<html>

<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
</head>

<body>
<script>

function test_post_param() {

var data = {'e': 'E', 'f': 'F', 'g': {'aa':'AA', 'bb':'BB'}};

$.ajax({
url: 'http://127.0.0.1:8080/api/params',

method: "POST",
data: "key=a",
// contentType: "text/plain",

success: function (response, textStatus) {
console.debug("test_post_param OK");
console.debug(textStatus);
console.debug(response);
},
error: function (response, textStatus) {
console.debug("test_post_param ERR");
console.debug(textStatus);
console.debug(response);
},
})
}


window.onload = test_post_param;


</script>
</body>

</html>

最佳答案

我把它放在我所有的 API 端点上。我将 POST 表单和查询编码组合成一个字典。

def merge_dicts(*args):
result = {}
for dictionary in args:
result.update(dictionary)
return result

payload = merge_dicts(dict(request.forms), dict(request.query.decode()))

所以你的代码应该是这样的:

@application.route("/api/params", method=['OPTIONS', 'POST'])
def Api_Params():
payload = merge_dicts(dict(request.forms), dict(request.query.decode()))
print('bottle.request.query_string: {}'.format(payload))

关于python - Bottle POST 方法 - 获取查询参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58543523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com