【问题标题】:data parsing between flutter and Flask REST APIFlutter 和 Flask REST API 之间的数据解析
【发布时间】:2020-05-09 17:51:31
【问题描述】:

我正在尝试将来自我的颤振应用程序的请求发布到 Flask REST API,使用 POST MAN 测试 API 没有问题,但是在颤振中我在颤振中遇到如下错误:

I/flutter (6378): FormatException: 意外字符(在字符 1 处) 我/颤振(6378): 我/颤动(6378):^

在 Flask APP 中是这样的:

[2020-01-23 11:42:32,517] 应用程序中的错误:/cards [POST] 上的异常 回溯(最近一次通话最后): wsgi_app 中的文件“/home/shaukat/.local/lib/python3.7/site-packages/flask/app.py”,第 2311 行 响应 = self.full_dispatch_request() 文件“/home/shaukat/.local/lib/python3.7/site-packages/flask/app.py”,第 1834 行,在 full_dispatch_request rv = self.handle_user_exception(e) 文件“/home/shaukat/.local/lib/python3.7/site-packages/flask/app.py”,第 1737 行,在 handle_user_exception reraise(exc_type, exc_value, tb) 文件“/home/shaukat/.local/lib/python3.7/site-packages/flask/_compat.py”,第 36 行,在 reraise 升值 文件“/home/shaukat/.local/lib/python3.7/site-packages/flask/app.py”,第 1832 行,在 full_dispatch_request rv = self.dispatch_request() 文件“/home/shaukat/.local/lib/python3.7/site-packages/flask/app.py”,第 1818 行,在 dispatch_request 返回 self.view_functionsrule.endpoint 文件“/home/shaukat/Projects/udemy flask rest API 和 python/rest-api-sections-master/section3/app.py”,第 19 行,在 create_card 'id': request_data["id"], TypeError:“NoneType”对象不可下标 127.0.0.1 - - [23/Jan/2020 11:42:32]“POST /cards HTTP/1.1”500 - 我在颤振中的代码:

Future<void> addNewCard(NewCard product) async {
const url = 'http://10.0.2.2:5000/cards';
try {
  final response = await http.post(
    url,
    body: json.encode({
      'id': product.id,
      'cardNo': product.cardNo,
      'cardType': product.cardType,
      'amount': product.amount,
    }),
  );
  final newProduct = NewCard(
    id: json.decode(response.body)['id'],
    cardNo: product.cardNo,
    cardType: product.cardType,
    amount: product.amount,
  );
  print(newProduct);
  _newCard.add(product);
  // _items.insert(0, newProduct); // at the start of the list
  notifyListeners();
} catch (error) {
  print(error);
  throw error;
}}

python Flask 中的代码:

@app.route('/cards', methods=['POST'])
def create_card():
    request_data = request.get_json()
    new_cards = {
        'id': request_data["id"],
        'cardNo': request_data["cardNo"],
        'cardType': request_data["cardType"],
        'amount': request_data["amount"],
   }
   cards.append(new_cards)
   return jsonify(cards)

【问题讨论】:

  • 在flask脚本中,cards是从哪里来的?
  • http.post( url, body: json.encode({ 'id': product.id, 'cardNo': product.cardNo, 'cardType': product.cardType, 'amount': product .amount, }),

标签: python-3.x api post flutter flask


【解决方案1】:

我最终在这篇帖子Flutter POST request body not sent的评论中找到了解决方案

我必须添加headers: {"Content-Type": "application/json"} 在我的帖子请求中。感谢您的帮助

【讨论】:

    【解决方案2】:

    第 19 行,在 create_card 'id': request_data["id"], TypeError: 'NoneType' object is not subscriptable

    如您所见,服务器无法获取/解析数据。 我建议在 REST 服务器中对其进行调试,并检查您是否收到了这些值。 我知道postman 适合您,但是一旦您了解了您甚至得到了@服务器的内容,就可以更轻松地修复颤动发送的内容。 我的猜测是 product.id (颤振代码)是一个 int 而不是一个字符串.. 请发送更详细的调试信息以帮助解决此问题。 祝你好运。

    【讨论】:

    • 我尝试在两端将 Integer 更改为 String,但仍然相同。谢谢
    • 但是 HTTP 错误是这样的:" HTTP/1.0 500 INTERNAL SERVER ERROR
    • 您是否尝试过调试它并在处理之前查看您在服务器中收到了什么?因为从我看来,问题似乎出在服务器内部。
    • 我最终在stackoverflow.com/questions/53792081/… 的评论中找到了解决方案,我不得不在我的帖子请求中添加标题:{"Content-Type": "application/json"}。感谢您的帮助
    • 可以理解为什么服务器无法解析它,因为它不理解内容类型。很高兴你解决了!
    猜你喜欢
    • 2020-09-09
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    • 2019-10-24
    • 2020-06-29
    • 2018-12-02
    • 1970-01-01
    • 2021-09-12
    相关资源
    最近更新 更多