#python #api #flask
#python #API #flask
Вопрос:
Я создаю API, который получает две данные, «id» и «name», но я получаю 'NoneType' object is not subscriptable"
ошибку в name = request.json['Name']
from flask import Flask, jsonify, request, Response #import flask library
from checking import checker
app = Flask(__name__)
@app.route("/v1/products", methods=["GET", "POST"])
def getData():
user_id = request.json['id']
name = request.json['Name']
data = {'id' : user_id, 'Name' : name}
flag = checker(data)
if flag == True:
return 200, 'OK'
else:
return 403, 'Forbidden'
if __name__ == '__main__':
app.run(host='localhost', debug=True)
Чтобы отправить данные для API, я запускаю следующий код:
curl -X POST -H "Content-Type: v1/products" -d '{'id' : '123', 'Name' : 'mesa'}' http://localhost:5000/v1/products
Что я делаю не так?
Комментарии:
1. Что делает проверка (данных)? Возможно, вы захотите добавить
flag = False
что-нибудь перед вызовом этой функции. Убедитесь, что средство проверки (data) возвращает что-то и имеет оператор return в конце.2. Попробуйте изменить заголовки типа содержимого на
application/json
.3. Привет, Namandeep, спасибо за вашу помощь. Эта проверка (data) возвращает true или false, если пользователь уже существует. Проблема заключается в указании на ‘user_id = request.json[‘id’]’
Ответ №1:
Проблема не в вашем коде flask, а в вашем запросе curl. Вы неправильно задаете тип контента и тело, поэтому для обработки конечной точки вашего API нет json.
Вы захотите изменить первую часть вашей команды на: curl -X POST -H "Content-Type: application/json"
У вас также могут возникнуть проблемы с вашими кавычками в теле запроса, вам нужно либо экранировать, либо изменить кавычки, чтобы они не были двусмысленными.
Ответ №2:
Похоже, у меня это работает. Надеюсь, это сработает для вас:
from flask import Flask, jsonify, request, Response #import flask library
app = Flask(__name__)
@app.route("/v1/products", methods=["GET", "POST"])
def getData():
user_id = request.args['id']
name = request.args['Name']
data = {'id' : user_id, 'Name' : name}
print(data)
if request.args != None:
print('OK')
else:
print('Forbidden')
return (data)
if __name__ == '__main__':
app.run(host='localhost', debug=True)