Как вернуть значение на основе ввода параметров с помощью API Python Flask

#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()