Я написал метод POST в RESTful API Flask и успешно добавил данные на сервер, используя HTTPie, HTTP-клиент командной строки. Но когда я попробовал это на 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
Результат HTTPie выглядит следующим образом:
Ошибка Flask:
192.168.0.101 - - [13 / May / 2019 03:37:44] "POST / factory HTTP / 1.1" 500 -
Traceback (последний вызов был последним):
Файл "C: \ Users \ Steve \ PycharmProjects \ test \ venv \ lib \ site-packages \ flask \ app.py", строка 2309, в вызов
вернуть self.wsgi_app (environment, start_response)
Файл "C: \ Users \ Steve \ PycharmProjects \ test \ venv \ lib \ site-packages \ flask \ app.py", строка 2295, в wsgi_app
response = 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, в ререйзе
повысить значение
Файл "C: \ Users \ Steve \ PycharmProjects \ test \ venv \ lib \ site-packages \ flask \ app.py", строка 2292, в wsgi_app
response = 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)
Файл "C: \ Users \ Steve \ PycharmProjects \ test \ venv \ lib \ site-packages \ flask \ app.py", строка 1718, в handle_user_exception
ререйз (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
Файл "C: \ Users \ Steve \ PycharmProjects \ test \ venv \ hello.py", строка 124, в create_factory
'fac_name': request.json['fac_name'],
TypeError: объект 'NoneType' не может быть подписан
UPDATE:
Я изменил строку if not
на if not request.json: abort(401)
, и теперь это ошибка 401. И я также пытался использовать Postman, и это был тот же тип ошибки, поэтому я думаю, что это не имеет ничего общего с кодами Android, и я удалил код Android отсюда.
Вот результат Почтальона: