#python #flask #python-requests #flask-sqlalchemy #flask-restful
Вопрос:
Я продолжаю получать следующую ошибку, когда пытаюсь свернуть это или перейти по URL-адресу напрямую, т. е. 127.0.0.1:5000/api/v1/currentuserid/3/ .. не вижу, что не так с моим кодом:
Ошибка типа: объект «Нетип» не может быть вызван
@app.route('/api/v1/currentuserid/<userid>/', methods=['GET'])
def api_retrieve_useridd(userid):
try:
mycursor = mydb.cursor()
_json = request.get_json()
userid = _json('userid')
if userid and request.method == 'GET':
sqlQuery = "SELECT username FROM tblUser WHERE user_id=%s"
bindData = (userid,)
mycursor.execute(sqlQuery, bindData)
row_headers=[x[0] for x in mycursor.description] #this will extract row headers
rv = mycursor.fetchone()
json_data=[]
json_data.append(dict(zip(row_headers,rv)))
return jsonify(json_data[0])
else:
return not_found()
finally:
mycursor.close()
Комментарии:
1. Я думаю, что вы должны использовать квадратные скобки для запроса значения.
userid = _json['userid']
Я предполагаю, что значение равно none, потому что вы используете GET вместо запроса POST. Я не понимаю назначения этих строк. Вы уже получили идентификатор пользователя через правило.2. @Detlef хорошее место, которое я обновил до квадратных скобок, но все равно не повезло, когда я перехожу на URL, я получаю следующее: Ошибка типа: объект ‘NoneType’ не подлежит подписке
3. Это происходит потому, что значение
_json
равно Нулю. Почему вы запрашиваете идентификатор пользователя из данных json и не используете переданный параметр?
Ответ №1:
userid
параметр уже передан функции по заданному вами маршруту Flask. Так что вам не нужно получать ценность request.get_json()
. Вы можете попробовать ниже кода. Кстати, вы можете применить этот user_id
тип, как int
<int:userid>
и в определении маршрута.
@app.route('/api/v1/currentuserid/<int:userid>/', methods=['GET'])
def api_retrieve_useridd(userid):
try:
mycursor = mydb.cursor()
if userid and request.method == 'GET':
sqlQuery = "SELECT username FROM tblUser WHERE user_id=%s"
bindData = (userid,)
mycursor.execute(sqlQuery, bindData)
row_headers=[x[0] for x in mycursor.description] #this will extract row headers
rv = mycursor.fetchone()
json_data=[]
json_data.append(dict(zip(row_headers,rv)))
return jsonify(json_data[0])
else:
return not_found()
finally:
mycursor.close()