如何检查我的数据存储区中的重复数据并显示错误?

时间:2015-04-23 10:03:02

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

正在研究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数据是否重复。如果已经输入的数据不允许保存并需要显示错误信息。 我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

webapp2中有很好的Unique模型:

  

例如,假设我们有一个具有三个属性的模型User   在特定群组中必须是唯一的:usernameauth_id和   email ::

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