【问题标题】:Python Bottle: Accessing array variable inside request POST dataPython Bottle:访问请求POST数据中的数组变量
【发布时间】:2018-04-12 22:38:48
【问题描述】:

我最近接到了一个部分完成的项目,我刚开始使用 Bottle。我有一种情况,我在 AJAX 请求中发送字典,而 Bottle 在服务器端。字典看起来像这样(在 JavaScript 中):

var myInt = 5;
var myArray = [0, 1, 2];
var data = {
    myInt: myInt,
    myArray: myArray
};

然后,在 Python 中,我想读入这些数据。我似乎无法得到数组。我可以得到 int 就好了。我已经尝试了几件事,但以下是对我来说最有意义但仍然无效的方法:

try:
    myInt = int(request.forms.get('myInt'))
    myArray = request.forms.getall('myArray')

这会导致 myArray 的列表为空。谁能指出我正确的方向?我已经阅读了 StackOverflow 上的所有类似问题,但均无济于事。

我知道我可以把它变成一个用管道或其他东西分隔的字符串,但我想看看数组是否可以像这样发送。

谢谢!

【问题讨论】:

    标签: javascript python request bottle


    【解决方案1】:

    使用request.json:

    try:
        myInt = request.json['myInt']
        myArray = request.json['myArray']
    

    (假设您的客户将content-type 设置为application/json。)

    这是一个不错的example

    【讨论】:

    • 非常感谢!我同时学习了太多新东西......我还不明白我能用瓶子里的“请求”做什么,然后我应该用它做什么......但这有效:) 再次感谢您的宝贵时间。
    • 很高兴它有帮助!我还想指出,request.json 的实现在每次调用它时都会解析整个主体,所以我建议只调用它一次,然后取出你需要的任何属性。我也会更新答案。
    • 从头开始——我只是更仔细地检查了一下,我认为它确实缓存了解析的值,所以不用担心。继续! :)
    【解决方案2】:

    不确定这是否是唯一的问题,但(我认为)您可能会混淆 JSON 数组和 getall 的使用。你应该在这里使用get,而不是getall

    myArray = request.params.get('myArray')
    

    如果我正确理解代码,getall 适用于您有多个同名参数的情况,如http://example.com/get?foo=1&foo=2

    另一方面,您的 myArray 变量只是对数组的单个引用。

    希望这会有所帮助(即使它不能解决您的问题)。

    【讨论】:

      【解决方案3】:
      var myInt = 5;
      var myArray = [0, 1, 2];
      var data = {
          myInt: myInt,
          myArray: JSON.stringify(myArray)
      };
      

      在 js 和瓶中使用 JSON.stringify json_loads()

      myInt = request.params.get('myInt')
      myArray =  json_loads(request.params.get('myArray'))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-30
        • 1970-01-01
        • 1970-01-01
        • 2020-10-17
        • 1970-01-01
        • 1970-01-01
        • 2016-04-03
        • 1970-01-01
        相关资源
        最近更新 更多