restfulapi中的POST方法适用于HTTPie,但不适用于Android/Postman

2024-04-25 07:08:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Flask的restfulapi中编写了POST方法,并使用HTTPie(一个命令行HTTP客户机)成功地向服务器添加了数据。但当我在安卓系统上尝试时,出现了一个错误。 客户代码如下:

@app.route('/factories', methods=['POST'])
def create_factory():
    if not request.json or not 'fac_name' in request.json:
        abort(404)
    factory = {
        'id': factories[-1]['id'] + 1,
        'fac_name': request.json['fac_name'],
        'lat': request.json['lat'],
        'lng': request.json['lng']
    }

    factories.append(factory)
    return jsonify({'factory': factory}), 201

HTTPie结果如下: enter image description here

烧瓶误差:

192.168.0.101---[2019年5月13日03:37:44]“邮政/工厂HTTP/1.1”500- 回溯(最近一次呼叫):

文件“C:\Users\Steve\PycharmProjects\test\venv\lib\site packages\flask\应用程序类型“,第2309行,在调用中” 返回self.wsgi\u应用程序(环境,启动响应)

文件“C:\Users\Steve\PycharmProjects\test\venv\lib\site packages\flask\应用程序类型,第2295行,在wsgi\ U应用程序中 响应=self.handle\u异常(五)

文件“C:\Users\Steve\PycharmProjects\test\venv\lib\site packages\flask\应用程序类型,第1741行,在handle\u exception中 重新校准(exc\ U类型、exc\ U值、tb)

文件“C:\Users\Steve\PycharmProjects\test\venv\lib\site packages\flask_兼容.py,第35行,在reraise中 提高价值

文件“C:\Users\Steve\PycharmProjects\test\venv\lib\site packages\flask\应用程序类型,第2292行,在wsgi\ U应用程序中 响应=完全自动发送请求()

文件“C:\Users\Steve\PycharmProjects\test\venv\lib\site packages\flask\应用程序类型“,第1815行,完全发送请求” rv=self.handle\u user\u异常(五)

文件“C:\Users\Steve\PycharmProjects\test\venv\lib\site packages\flask\应用程序类型,第1718行,在handle\u user\u exception中 重新校准(exc\ U类型、exc\ U值、tb)

文件“C:\Users\Steve\PycharmProjects\test\venv\lib\site packages\flask_兼容.py,第35行,在reraise中 提高价值

文件“C:\Users\Steve\PycharmProjects\test\venv\lib\site packages\flask\应用程序类型“,第1813行,在完整的调度请求中” rv=自助发送请求()

文件“C:\Users\Steve\PycharmProjects\test\venv\lib\site packages\flask\应用程序类型“,第1799行,在调度请求中” 返回self.view\u函数规则。终结点

文件“C:\Users\Steve\PycharmProjects\test\venv\你好,派瑞,第124行,在创建工厂中

'fac_name': request.json['fac_name'],

TypeError:“NoneType”对象不可订阅

更新: 我将if not行更改为if not request.json: abort(401),现在是401错误。我也试过使用Postman,这是同一类型的错误,所以我认为这与Android代码无关,我从这里删除了Android代码。你知道吗

以下是邮递员的结果: enter image description here


Tags: 文件testjson应用程序flask类型venvrequest
3条回答

而不是

if not request.json or not 'fac_name' in request.json:
        abort(404)
    factory = {
        'id': factories[-1]['id'] + 1,
        'fac_name': request.json['fac_name'],
        'lat': request.json['lat'],
        'lng': request.json['lng']
    }

我曾经

    data=request.data
    j_data = json.loads(data)

    factory = {
        'id': factories[-1]['id'] + 1,
        'fac_name': j_data['fac_name'],
        'lat': j_data['lat'],
        'lng': j_data['lng']
    }

而且很有效。但是我不知道为什么。你知道吗

您需要一个JSON请求

if not request.json or not 'fac_name' in request.json:

但您正在发送表单数据。你知道吗

请选中单选按钮“raw”,并将内容类型设置为“application/json” postman

然后必须在请求体中添加有效的json。你知道吗

这个错误很有用。你知道吗

File "C:\Users\Steve\PycharmProjects\test\venv\hello.py", line 124, in create_factory

'fac_name': request.json['fac_name'],

TypeError: 'NoneType' object is not subscriptable

object is not subscriptable

这意味着您正在尝试['keyword']一个不支持它的对象,即NoneType。你知道吗

从中可以推断request.jsonNoneType

相关问题 更多 >