2016-08-07 91 views
0

將FlaForce和SQLAlchemy與WTForms結合使用。從用戶名和電子郵件字段獲取數據並確保它不在數據庫中。這是我現在要做的。將參數傳遞給成爲函數關鍵字的類

class IsUnique(object): 
    def __init__(self, db_field=None): 
     self.db_field = db_field 

    def __call__(self, form, field): 
     data = field.data 
     if self.db_field=='name': 
      if User.query.filter_by(name=data).first() != None: 
       raise ValidationError('Sorry, that username is taken.') 
     if self.db_field=='email': 
      if User.query.filter_by(email=data).first() != None: 
       raise ValidationError(
        'Sorry, that email address has already been registered.' 
        ) 

我想這樣做是對db_field參數傳遞給類實例作爲一個字符串,並將其傳遞到User.query.filter_by(db_field=data。不幸的是,我所知道的是如何使用if語句,該語句有效,但有點麻煩。有一種方法可以做到這一點,但我不知道如何。

回答

2

你可以通過keyword arguments as a dict,像這樣:

def __call__(self, form, field): 
    key = self.db_field # 'name' or 'email' 
    params = { key: field.data } 
    if User.query.filter_by(**params).first() != None: 
     raise ValidationError('Sorry, that {} is taken.'.format(key)) 
相關問題