如何在Python网络服务中分配唯一ID属性(使用Flask)

0 投票
1 回答
1582 浏览
提问于 2025-04-18 06:39

我有一个用Python写的网络服务,当收到POST请求时,它会创建一个新的条目,并给它分配一个新的ID,代码如下:

@app.route('/api/entries', methods = ['POST'])
def create_entry():
    if not request.json:
        abort(400)
    entry = {
        'id': entries[-1]['id'] + 1,
        'Name': request.json.get('Name', ""),
        'Surname': request.json.get('Surname', ""),
        'PhoneNb': request.json.get('PhoneNb', "")
    }
    entries.append(entry)
    return jsonify( { 'entry': entry } ), 201

不过,我在这段代码中遇到的问题是,如果条目数组是空的,

entries[-1]['id']

就无法进行评估,结果会返回错误:

IndexError: list index out of range

我该怎么解决这个问题呢?

1 个回答

1

使用异常处理器来捕捉 IndexError,并设置一个默认的 id:

try:
    entry_id = entries[-1]['id'] + 1
except IndexError:
    entry_id = 1
entry = {
    'id': entry_id,
    'Name': request.json.get('Name', ""),
    'Surname': request.json.get('Surname', ""),
    'PhoneNb': request.json.get('PhoneNb', "")
}
entries.append(entry)

在这里使用 try/except 比检查 entries 的长度要好,因为你只会遇到这个问题 一次,毕竟。

要知道,你的代码不是线程安全的,也不能在多进程的 WSGI 容器中运行。

撰写回答