python:在请求体中发布键/值对

时间:2018-01-05 00:20:59

标签: python python-3.x flask

我有一个使用flask的python API,它在正文中提交一个post请求,然后调用并执行另一个python脚本:

testingREST.py:

import testingdf 
import json 
from flask import Flask, json, request
app = Flask(__name__)


@app.route("/results", methods=['POST'])
def createResults():
  entry = request.get_json().get('entry', '')
  passcode = request.get_json().get('passcode', '')
  data = testingdf.test(entry, passcode)
  response = app.response_class(
      response=json.dumps(data),
      status=200,
      mimetype='application/json'
  )
  return response     

if __name__ == "__main__":
    app.run(debug = True, host='localhost', port=8080, passthrough_errors=False)

testingdf.py:

import pandas as pd



def test(entry, passcode):
    df = pd.DataFrame()
    testInput = zip(entry, passcode)
    for entry, passcode in testInput:
        df = df.append({'Entry': entry, 'Passcode': passcode}, ignore_index=True)
        results = {
            'Entry' : entry,
            'Outcome' : passcode,
                }
    return results

这是我在调用api

时发布到请求体中的内容
{
"entry":[21, 44, 31],
"passcode":["denied", "Try Again", "Retry"]
}

回应:

{
    "Entry": 35,
    "Outcome": "Success"
}

问题:在请求正文中,没有一个变量用于'条目'另一个用于密码',有没有一种方法可以像我这样的请求体:

{
"entryInfo":[(21, "denied"), (44, "Try Again"), (31, "Retry")]
}

基本上,将它们成对传递,因为我认为我实现它的方式很奇怪,它很容易被错配。另外,我不确定"键/值"这是在这里使用的正确术语,但我希望这会有所帮助。

顺便使用python3。

1 个答案:

答案 0 :(得分:0)

您的问题似乎归结为要传递给烧瓶服务器的数据。关于你对这些数据的处理还有另一个问题(你只返回最后一个数据),但你没有问过这个问题。

将此作为请求正文发送。它使用列表表示法,它是有效的JSON。然后,您的烧瓶服务器可以通过解码JSON请求来访问列表。

{"entryInfo": [[21, "denied"], [44, "Try Again"], [31, "Retry"]]}

更好的方法可能是使用字典映射条目代码来传递代码:

{"entryInfo": {"21": "denied", "44": "Try Again", "31": "Retry"}}

是否需要顶级词典是有争议的,你可以逃脱:

{"21": "denied", "44": "Try Again", "31": "Retry"}