簡體   English   中英

將參數傳遞給類,該類成為函數的關鍵字

[英]Pass an argument to a class which becomes a keyword for a function

將WTForms與Flask和SQLAlchemy結合使用。 從用戶名和電子郵件字段中獲取數據,並確保它不在數據庫中。 這就是我現在要做的。

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語句,該語句可以工作,但是有點麻煩,必須有一種正確的方法,但是我不知道怎么做。

您可以將關鍵字參數作為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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM