【问题标题】:Avoiding repeated names in JSON with MongoEngine - Python使用 MongoEngine 避免 JSON 中的重复名称 - Python
【发布时间】:2017-08-30 16:08:24
【问题描述】:

我正在寻找一种方式/功能/方法,以使无法在我的 JSON 上保存两个相同的名称,例如,我得到了这个带有重复名称的 JSON:

[
  [
    {
      "id": "59a5c80dc75969297837c51e",
      "name": "uza",
      "password": "3648726"
    },
    {}
  ],
  [
    {
      "id": "59a5c811c75969297837c51f",
      "name": "kuza",
      "password": "3648726"
    },
    {}
  ],
  [
    {
      "id": "59a5c83ec75969297837c520",
      "name": "kuza",
      "password": "3648726"
    },
    {}
  ]
]

我创建用户的代码是这个:

@api.route('/', methods=['POST'])
def create():

# Grabs the data from the requisition
user_json = request.get_json(silent=True)
if not user_json:
    return "FAIL"

# creates an entity JSON
user, errors = schema.load(user_json)
if bool(errors):
    return jsonify(errors)
    user.save()
return "SUCCESS"

再次,我正在使用 mongoengine,有人知道怎么做吗?

编辑添加我的model.py

rom mongoengine import Document
from mongoengine import StringField, ReferenceField

import marshmallow_mongoengine as ma

from marshmallow import Schema, fields

from .service import ImageService

class User(Document):
    name = StringField(unique=True)
    password = StringField(unique=True)

class Face(Document):
    user = ReferenceField(User)
    image = StringField()
    embedding = StringField()

    def get_embedding(self):
        return ImageService().from_base64_flat(self.embedding.encode())

    def get_image(self):
        return ImageService().from_base64(self.image.encode())

class UserSchema(ma.ModelSchema):
    class Meta:
        model = User

class FaceSchema(ma.ModelSchema):
    class Meta:
        model = Face

    image = ma.fields.Method(deserialize="img_to_base64", serialize="img_to_base64")
    embedding = ma.fields.Method(deserialize="to_base64", serialize="to_base64")

    def img_to_base64(self, data):
        return ImageService().to_base64(data)

    def to_base64(self, data):
        return ImageService().np_to_base64(data)

在 User 类中,我将其从必需更改为唯一,现在我无法添加具有相同名称的名称,但作为交换,它会在 Insomnia 上返回一个 INTERNAL SERVER ERROR,并且如您所见,我在密码上设置了另一个唯一进行测试,它没有工作,即使有另一个用户使用相同的密码,它也会保存。

【问题讨论】:

  • 您当前的错误或问题?
  • 名称重复。我需要它不保存重复的名称。
  • 你能把你用过的模式也贴出来吗?
  • 它是来自棉花糖 API 的,但我想我明白了,而且我认为我的 Visual Code 有问题,问题是我只能放一个唯一的。我将从我的代码中放入 model.py。
  • 我用更多的代码片段和正在发生的事情的解释编辑了帖子。

标签: python json flask mongoengine


【解决方案1】:

试试这个

class User(Document):
    name = StringField(unique=True)
    password = StringField(unique=True)
    meta = {       
        'indexes': [{'fields': ['name'], 'unique': True}]
   }

【讨论】:

  • 谢谢,但我认为这是我的 ide 窃听,现在一切正常 oO
猜你喜欢
  • 1970-01-01
  • 2017-05-28
  • 1970-01-01
  • 1970-01-01
  • 2015-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多