【问题标题】:How to check duplicate data in my datastore and display the error?如何检查我的数据存储中的重复数据并显示错误?
【发布时间】:2015-04-23 10:03:02
【问题描述】:

我正在研究 GAE、GAE 数据存储和 python。

这是我的 dbmodel.py,

class Customer(db.Model):
    name = db.StringProperty(required=True)
    phone = db.PhoneNumberProperty(required=True)
    email = db.EmailProperty(required=True)

这是我的 main.py,

class AddCustomerHandler(BaseHandler):
    def get(self):         
        template = jinja_environment.get_template('template/addcustomer.html')
        self.response.out.write(template.render(template_values))

    def post(self):     
        input_fullname=self.request.get('fullname')
        input_phone=self.request.get('phone')
        input_email=self.request.get('email')

        newcustomer=Customer(name=input_fullname,phone=input_phone,email=input_email)

        self.redirect('/addcustomer')

数据存储工作正常。我想根据全名检查我的newcustomer 数据是否重复。如果它已经输入数据不允许保存并且需要显示错误消息。 我该怎么做?

【问题讨论】:

    标签: python twitter-bootstrap google-app-engine google-cloud-datastore


    【解决方案1】:

    webapp2 中有很好的 Unique 模型:

    例如,假设我们有一个模型User,它具有三个属性: 在给定组中必须是唯一的:usernameauth_idemail::

    class User(model.Model):
        username = model.StringProperty(required=True)
        auth_id = model.StringProperty(required=True)
        email = model.StringProperty(required=True)
    

    为确保创建新User 时的属性唯一性,我们首先 为这些属性创建 Unique 记录,如果一切顺利 好吧,我们可以保存新的User 记录::

    @classmethod
    def create_user(cls, username, auth_id, email):
        # Assemble the unique values for a given class and attribute scope.
        uniques = [
            'User.username.%s' % username,
            'User.auth_id.%s' % auth_id,
            'User.email.%s' % email,
        ]
    
        # Create the unique username, auth_id and email.
        success, existing = Unique.create_multi(uniques)
    
        if success:
            # The unique values were created, so we can save the user.
            user = User(username=username, auth_id=auth_id, email=email)
            user.put()
            return user
        else:
            # At least one of the values is not unique.
            # Make a list of the property names that failed.
            props = [name.split('.', 2)[1] for name in uniques]
            raise ValueError('Properties %r are not unique.' % props)
    

    这是通过事务检查唯一性的唯一方法。

    https://webapp-improved.appspot.com/_modules/webapp2_extras/appengine/auth/models.html#Unique

    【讨论】:

    • 谢谢德米特里·萨多夫尼奇
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    • 2020-06-06
    • 2019-04-27
    相关资源
    最近更新 更多