首页 > 解决方案 > Flask,从列表中“获取”单个用户

问题描述

我目前正在学习 Flask。

我有一个存储在我的 Flask 文件中的用户列表。我已经成功创建了一个函数来检索列表中的每个人,但是我无法让它只检索该列表中的单个用户。我觉得好像我很接近,但我只收到“404 缺少用户”消息。

我希望它在列表中显示所选用户的 JSON。例如,转到 /api/users/2 将获得 id 为 2 的用户。

我几乎可以肯定这是我的 get_single_user 函数的逻辑错误。

这是我到目前为止所做的 -

@app.route('/api/users', methods=['GET'])
def get_user_list():
page_number = int(request.args['page'])
user_slice = user_list[page_number * 6 - 6:page_number * 6]

return jsonify({"per_page": 6,
                "total": len(user_list),
                "total_pages": len(user_list) + 5 / 6,
                "data": user_slice})


@app.route('/api/users/<user_id>', methods=['GET'])
def get_single_user(user_id):

if len(user_id) == 0:
    return get_user_list()
found_user_int = -1
for user_position in range(0, len(user_list) - 1):
    if user_list[user_position]['id'] == user_position:
        found_user_int = user_position

if found_user_int >= 0:
    user = user_list[found_user_int]
    return jsonify(user)
else:
    return "missing user", 404


user_list = [
{
    "id": 1,
    "email": "george.bluth@reqres.in",
    "first_name": "George",
    "last_name": "Bluth",
    "avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/calebogden/128.jpg"
},
{
    "id": 2,
    "email": "janet.weaver@reqres.in",
    "first_name": "Janet",
    "last_name": "Weaver",
    "avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/josephstein/128.jpg"
},
{
    "id": 3,
    "email": "emma.wong@reqres.in",
    "first_name": "Emma",
    "last_name": "Wong",
    "avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/olegpogodaev/128.jpg"
}]

如果有帮助,这是检索数据的 JavaScript -

function getASingleUser(userID){
var xhr = new XMLHttpRequest();
xhr.open("GET","api/users/" + String(userID), true);
xhr.onload = function() {
    if (xhr.readyState === 4 && xhr.status >= 200 && xhr.status < 300) {
        var objUser = JSON.parse(xhr.responseText);
        renderSingleUser(objUser)
    }
    else {
        alert("Error " + xhr.status);
    }
};
xhr.send()
}

谢谢!

标签: javascriptpythonlistflaskget

解决方案


改变:

    if user_list[user_position]['id'] == user_position:
        found_user_int = user_position

至:

    if user_list[user_position]['id'] == int(user_id):
        found_user_int = user_position

此外,除非您有理由将用户字典存储为列表,否则将整个内容存储为以用户 ID 作为键的字典会容易得多,那么您可以这样做:user_dict.get(int(user_id)).

最后,将您的 API 函数包装在 Try/Except 中,以便 ajax 调用始终得到响应。您可以查看 json 响应的标准,我不记得它们了,但通常是这样的:

{'status':'ok', data: {'message':'text here'}}

您越早在所有 API 调用中采用这一点,您就会越顺利。


推荐阅读