Как добавить несколько параметров проверки в схему зефира

У меня есть следующая схема в одной из моих моделей классов:

class SocialMediaSchema(Schema):
    facebook_profile_url = fields.String(required=False, validate=validate.Length(0, 71, 'Facebook username is too long.')

Помимо проверки длины, я также хочу убедиться, что facebook_profile_url никогда не будет равно строке "http://www.facebook.com/".


person Bargain23    schedule 04.01.2018    source источник


Ответы (1)


Вы можете передать список как параметр validate:

class SocialMediaSchema(Schema):
    facebook_profile_url = fields.String(required=False, validate=[
        validate.Length(0, 71, 'Facebook username is too long.'),
        lambda x: x != "http://www.facebook.com/"
    ])

Из документации:

validate (вызываемый) — валидатор или набор валидаторов, которые вызываются во время десериализации.

person Ash    schedule 04.01.2018
comment
Спасибо! Мне было интересно, что не так с этим параметром проверки: lambda x: x == '' or validate.Regexp('https://facebook.com/[a-zA-Z][a-zA-Z 0-9._]$', 0, 'Facebook username is invalid'). По сути, он должен принимать пустую строку или строку, соответствующую шаблону регулярного выражения. - person Bargain23; 05.01.2018
comment
Предположительно validate.Regexp() возвращает функцию, поэтому вам нужно использовать ... or validate.Regexp('https://...', 0, 'username invalid')(x). Однако вы должны иметь возможность пропустить лямбду и просто использовать регулярное выражение, например ^$|https://facebook.com/[a-zA-Z][a-zA-Z 0-9._]$. - person Ash; 05.01.2018
comment
Или вы можете просто сделать URL-адрес необязательным: ^(https://facebook.com/[a-zA-Z][a-zA-Z 0-9._])?$ - person Ash; 05.01.2018