【问题标题】:Trouble in comparison JSON with Python比较 JSON 和 Python 的问题
【发布时间】:2021-06-16 10:23:05
【问题描述】:

我必须使用 Flask 和 MongoDB 实现 Web 服务。我有两个系列。 JSON 文件如下所示:

文件 products.json:

{ "name":"red apples", "price":0.5, "description":"Apples from Greece", "category":"fruits", "stock":25 }
{ "name":"fish", "price":5, "description":"Fresh fish", "category":"fish", "stock":25 }
{ "name":"pasta", "price":1.5, "description":"Pasta from Italia", "category":"pasta", "stock":25 }

文件 users.json:

{"name":"George Vaios", "password":"321", "email":"george@gmail.gr", "category":"admin"}
{"name":"Admin", "password":"admin", "email":"admin@gmail.gr", "category":"admin"}

我要做什么? 我正在尝试实现一个名为add_product 的函数。此功能允许类别为 admin ("category": "admin") 的用户。由于路由有 POST 方法,因为我正在解析用户的 email,并且需要详细信息才能在 products.json 中导入新产品。

代码:

(lines of code for loading data)
user = users.find_one({"email":data['email']})
   if (user['category']=="admin"):
      product = {
         "name": data['name'],
         "price": data['price'],
         "description": data['description'],
         "category": data['category'],
         "stock": data['stock']
      }
        products.insert_one(product)
        return Response("Product was added succesfully", status=200, mimetype='application/json')
    else:
        return Response("Account has no permission. Must be an admin", status=400, mimetype='application/json') 

使用该代码,我试图通过使用find_one 方法在JSON 文件中找到用户来检查用户是否是管理员,然后将user['category'] 与字符串'admin' 进行比较。

我正在解析给邮递员的数据:

{
    "email": "george@gmail.gr",
    "name": "chocolate",
    "price": 25,
    "description": "mklkgj",
    "category": "sweets",
    "stock": 30
}

我得到的错误:

File "/home/michael/main.py", line 241, in add_product_admin
    if (user['category']=="admin"):
TypeError: 'NoneType' object is not subscriptable

我不明白为什么 if 语句不进行比较。有什么想法吗?

【问题讨论】:

  • find_one 如果找不到任何匹配项,将返回 None,这将导致您在尝试下标时看到错误。所以我会先检查用户不是 None 。然后尝试找出为什么 find_one() 无法找到您所期望的。
  • 附带说明,您似乎正在尝试使用 POST 有效负载的“电子邮件”部分作为授权手段。我希望您意识到,不仅“george@gmail.gr”电子邮件帐户的合法所有者可以提交此类请求。
  • @saquintes 嗯,我明白了。我检查了 Mongo shell 中的用户集合是否为空。确实有零条目。但仍然无法理解为什么会发生这种情况。也许我在使用 JSON 文件创建集合时犯了一个错误
  • @AlexBlex 是的,我明白了。那是一个uni项目,我没有这样的经验来避免通过更好的实践获得授权。这就是为什么我只是试图通过比较来实现这一点

标签: python json mongodb flask


【解决方案1】:

Mongo 告诉您在搜索该值时没有出现任何结果。我将首先检查 data['email'] 是否具有您期望的值以及您的集合是否已正确初始化。

【讨论】:

    【解决方案2】:

    感谢所有向我解释发生了什么的人。实际问题出在 MongoDB 和 Python 脚本上的客户端参数上。这就是条目和 JSON 文件不可读的原因。如果有人再次遇到此问题,请确保您已检查:

    # Choose database
    database = client['database you want to access']
    

    如果您预期的集合存在,请不要忘记检查 mongo shell:

    db.(your database name).find({})
    

    感谢您的宝贵时间!

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2013-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多