У меня есть форма flatland для прокси-сайта, которая выглядит примерно так:
class doSomethingForm(Form):
'''Do an action with account credentials'''
username = String.using(default='',
validators=[Present(), UsernameFormat()])
password = String.using(default='',
validators=[Present(), PasswordFormat()])
action = String.using(default='',
validators=[Present(), ActionFormat()])
Если какой-либо из параметров пуст, я хочу, чтобы ошибка проверки состояла в том, чтоданные элементы пусты.Если они не пустые и соответствуют другим требованиям, то следующий шаг - спросить другую службу, действительны ли учетные данные.Если они недействительны, то я хочу превратить это в ошибку проверки.
Это очень похоже на проверку на уровне контейнера flatland, которая сначала выполняет проверку для содержащихся элементов.Итак, я попробовал это:
class doSomethingForm(Form):
'''Do an action with account credentials'''
account = Dict.of(
username = String.named('username').using(default='',
validators=[Present(), UsernameFormat()])
password = String.named('password').using(default='',
validators=[Present(), PasswordFormat()])
).using(validators=[CheckCredentials()])
action = String.using(default='',
validators=[Present(), ActionFormat()])
Похоже, это будет работать, но теперь форма ищет элементы с именами account_username
и account_password
, что не совсем тот интерфейс, на который я надеялся.
Я вижу пару решений:
- Я мог бы присоединить валидатор
CheckCredentials
к doSomethingForm
.Но я не вижу способа сделать это в документации. - Я мог бы присоединить валидатор
CheckCredentials
к username
, который может получить доступ к своему брату password
.Однако я не хочу беспокоить другой сервер, если имя пользователя и пароль имеют неверный формат.поэтому мне сначала нужно было выполнить проверки на username
и password
, что похоже на повторение. - Я мог бы взломать версию
Dict
, которая не делает пространства имен
Есть ли правильный способ добавить валидаторы уровня формы в равнине?