【问题标题】:Flask, "GET" a single user from a listFlask,从列表中“获取”单个用户
【发布时间】:2020-09-08 15:13:58
【问题描述】:

我目前正在学习 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()
}

谢谢!

【问题讨论】:

    标签: javascript python list flask get


    【解决方案1】:

    变化:

        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 调用中采用这一点,您的未来就会越好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      • 2014-08-13
      • 2022-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多