如何在API中创建发布请求所需的字段?

时间:2020-10-25 00:14:46

标签: flask post try-catch

我正在创建一个API路由,该路由在Flask中返回一个随机数。在将发布请求发送到端点时,如果发布请求中未包含某些字段(例如,如果请求中没有“名称”,则我希望它返回错误)应该返回错误。)

我尝试用字典来做,尝试并抓住。如果缺少字段,则向字典添加一个key:值;如果字典不为空,则返回该值。第一个问题是,如果缺少多个字段,则仅将其中一个添加到错误字典中。第二个问题是,我还试图确保某些字段也具有一定的值(例如,颜色需要为红色或蓝色)。如果我检查一件事,那就行了-如果我这样做

if color != "red" or color != "blue":

它将始终显示错误。即使我将其拆分为多个if语句,也仍然会出错。我已经搜索了Google,至少在30次不同的时间重复了我的问题,而我得到的大多数答案都是关于SalesForce(我假设是某些公司/软件等)。

那么...是否有一种方法可以使某些字段必填?还是我在追赶上走上正确的路?如果是通过try and catch,如何使它显示多个错误/在某件事情上有变量?

@app.route('/api/get-num', methods=["POST"])
def num():
errors = {}

try:
    name = request.json['name']
except:
    errors["errors"] = {"name" : "This field is required."}

try:
    color = request.json['color']

    if color != "red" or color != "blue":
         errors["errors"] = {"color" : "Invalid value, must be red or blue."}
except:
    errors["errors"] = {"color" : "Invalid value, must be red or blue."}

if len(errors) != 0:
  
    return errors

create_dict = {
'name' : request.json['name'],
'email ': request.json['email'],
'year': request.json['year'],
'color' : request.json['color']
}


return jsonify(create_dict)

示例:

If name is missing and color is wrong, it should show:
    {
  "errors": {
    "color": [
      "Invalid value, must be red or blue."
    ],
    "name": [
      "This field is required."
    ]
  }
    }

With name missing and color being "red", it's currently showing:
{
  "errors": {
    "color": "Invalid value, must be red or blue."
  }
}

1 个答案:

答案 0 :(得分:1)

  1. 创建带有预期错误的字典,在这种情况下,将是所有必填字段
errorsDict = {"errors":{"color":[],"name":[]}}
  1. 在您的tryexcept块中,根据需要将嵌套的项作为附加项添加到示例中,
errorsDict = {"errors":{"color":[],"name":[]}}
    try:
       name = request.json['name']
    except:
        errorsDict["errors"]["name"].append("This field is required.")
    try:
        color = request.json['color']
    except:
        errorsDict["errors"]["color"].append( "COLORS MISSING!")