繁体   English   中英

TypeError:列表索引必须是整数或切片,而不是 str。 在 POSTMAN 中测试时

[英]TypeError: list indices must be integers or slices, not str. While testing in POSTMAN

我在测试时尝试从 POSTMAN 运行 POST 方法,但我收到一些错误,我找不到任何解决方案。

这是 python 中应用程序的代码:

在这里我创建了商店列表:

stores = [
            {
                'name':'Mart',
                'items':[{'name':'Item1','price':120}]
            }
    ]

POST - 用于接收数据

GET - 仅用于发回数据

为主页创建端点:

@app.route('/')
def home():
    return render_template('index.html')

创建用于创建新商店的端点:

# POST /store data: {name:}
@app.route('/store', methods=['POST'])
def create_store():
    request_data = request.get_json()
    new_store = {
            'name':request_data['name'],
            'items':[]
        }
    stores.append(new_store)
    return jsonify(new_store)

创建用于获取特定商店的端点:

# GET /store/<string: name>
    # 'hppt://127.0.0.1:5000/store/some_name
@app.route('/store/<string:name>')   
def get_store(name):
    # iterate over stores
    for store in stores:
        # if the store name matches, return it
        if store['name'] == name:
            return jsonify(store)
    # if none match, return an error message
    return jsonify({'ERROR': 'Store Not Found!'})

创建端点以获取所有商店

# GET /store
@app.route('/store')   
def get_stores():
    return jsonify({'stores':stores})

创建用于在特定商店中创建项目的端点:

# POST /store/<string: name>/item {name:, price:}
@app.route('/store/<string:name>/item',methods=['POST'])   
def create_items_in_store(name):
    request_data = request.get_json()
    for store in stores:
        if store['name'] == name:
            new_item = {
                    'name': request_data['name'],
                    'price': request_data['price']
                }
            stores['items'].append(new_item)
            return jsonify(new_item)
    return jsonify({'ERROR': 'Item could not be added!'})

创建端点以从特定商店获取商品:

# GET /store/<string: name>/item
@app.route('/store/<string:name>/item')   
def get_items_in_store(name):
    for store in stores:
        if store['name'] == name:
            return jsonify({'items': store['items']})
    return jsonify({'ERROR': 'Item Not Found in Store!'})

在端口上运行应用程序:5000

app.run(port=5000)

POSTMAN:

URL:'http://127.0.0.1:5000/store/Mart/item'

POST请求是:

{
    "name":"peanuts",
    "price": 340
}

我收到的错误是:

File "e:\Courses\Online_Practice\REST_API\01_First_REST_API\app.py", line 64, in create_items_in_store
    stores['items'].append(new_item)
TypeError: list indices must be integers or slices, not str

您的代码中有错字

for store in stores:
    if store['name'] == name:
        new_item = {
                'name': request_data['name'],
                'price': request_data['price']
            }
        stores['items'].append(new_item)

在最后一行,您正在修改基于错误和代码的stores ,它是一个列表,而不是字典store 你可能想做store['items'].append(new_item)

    for store in stores:
        if store['name'] == name:
            new_item = {
                    'name': request_data['name'],
                    'price': request_data['price']
                }
            stores['items'].append(new_item)

问题是stores是所有商店的数组,它是一个字典列表。 并且名称的元素没有命名,您只能通过索引访问它们。

试试这个:

    for index, store in enumerate(stores):
        if store['name'] == name:
            new_item = {
                    'name': request_data['name'],
                    'price': request_data['price']
                }
            stores[index].append(new_item)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM