我在Flask的RESTful API中编写了POST方法,并使用命令行HTTP HTTP客户端HTTPie将数据成功添加到服务器。但是,当我在Android上尝试时,出现了一个错误。 这是客户端的代码:
@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
烧瓶的错误:
192.168.0.101--[13 / May / 2019 03:37:44]“ POST / factories HTTP / 1.1” 500- 追溯(最近一次通话):
调用中的文件“ C:\ Users \ Steve \ PycharmProjects \ test \ venv \ lib \ site-packages \ flask \ app.py”,第2309行 返回self.wsgi_app(环境,start_response)
wsgi_app中的文件“ C:\ Users \ Steve \ PycharmProjects \ test \ venv \ lib \ site-packages \ flask \ app.py”,第2295行 响应= self.handle_exception(e)
文件“ C:\ Users \ Steve \ PycharmProjects \ test \ venv \ lib \ site-packages \ flask \ app.py”,行1741,在handle_exception中 重新提高(exc_type,exc_value,tb)
文件“ C:\ Users \ Steve \ PycharmProjects \ test \ venv \ lib \ site-packages \ flask_compat.py”,第35行,重新发行 提高价值
wsgi_app中的文件“ C:\ Users \ Steve \ PycharmProjects \ test \ venv \ lib \ site-packages \ flask \ app.py”,行2292 响应= self.full_dispatch_request()
文件“ C:\ Users \ Steve \ PycharmProjects \ test \ venv \ lib \ site-packages \ flask \ app.py”,行1815,在full_dispatch_request中 rv = self.handle_user_exception(e)
handle_user_exception中的文件“ C:\ Users \ Steve \ PycharmProjects \ test \ venv \ lib \ site-packages \ flask \ app.py”,行1718 重新提高(exc_type,exc_value,tb)
文件“ C:\ Users \ Steve \ PycharmProjects \ test \ venv \ lib \ site-packages \ flask_compat.py”,第35行,重新发行 提高价值
文件“ C:\ Users \ Steve \ PycharmProjects \ test \ venv \ lib \ site-packages \ flask \ app.py”,行1813,在full_dispatch_request中 rv = self.dispatch_request()
文件“ C:\ Users \ Steve \ PycharmProjects \ test \ venv \ lib \ site-packages \ flask \ app.py”,行1799,在dispatch_request中 返回self.view_functionsrule.endpoint
create_factory中第124行的文件“ C:\ Users \ Steve \ PycharmProjects \ test \ venv \ hello.py”
'fac_name': request.json['fac_name'],
TypeError:“ NoneType”对象不可下标
更新:
我将if not
行更改为if not request.json: abort(401)
,现在是401错误。而且我也尝试使用Postman,它是同一类型的错误,所以我认为这与Android代码无关,因此我从这里删除了Android代码。
答案 0 :(得分:0)
您希望收到JSON请求
SendSubscribeMail
但是您正在发送表单数据。
请检查单选按钮“ raw”并将内容类型设置为“ application / json”
然后,您必须在请求正文中添加有效的json。
答案 1 :(得分:0)
该错误很有帮助。
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
对象不可下标
这意味着您正在对不支持它的对象['keyword']
尝试NoneType
。
您可以从中推断出request.json
的是NoneType
答案 2 :(得分:0)
代替
//DONE: static : we don't want "this" here
public static void SetArrayElement(int row, int col)
{
//DONE: validate public method's values
if (row < array.GetLowerBound(0) || row > array.GetUpperBound(0))
throw new ArgumentOutOfRangeException(nameof(row));
else if (col < array.GetLowerBound(1) || col > array.GetUpperBound(1))
throw new ArgumentOutOfRangeException(nameof(col));
array[row, col] = true; // true, instead of 1
}
我用过
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']
}
它有效。但是我不知道为什么。