Как определить пользовательский валидатор в Deform/Colander, который имеет доступ к всем значениям узлов. Мне нужно получить доступ к значениям из двух полей, чтобы решить, действительно ли какое-либо значение действительно или нет?Валидатор Deform/Colander, который имеет доступ ко всем узлам?
8
A
ответ
3
Ниже приведен пример проверки интерполя. http://deformdemo.repoze.org/interfield/
2
осязаемо ответ:
def verify_email_validator(form, values):
if values['email_address'] != values['verify_email']:
raise Invalid(form, 'Email values do not match')
class MySchema(MappingSchema):
def __init__(self, *args, **kwargs):
super(KickEntrySchema, self).__init__(*args, **kwargs)
self.validator=verify_email_validator # entire form validator
email_address = SchemaNode(Email())
verify_email = SchemaNode(Email())
Примечание форма валидатор вызывается только тогда, когда ни одно из отдельных валидаторов полей не вызовет ошибку.
3
Чтобы разместить валидатор для всех полей дуршлаг мы можем просто сделать этот метод
валидатор:
def user_DoesExist(node,appstruct):
if DBSession.query(User).filter_by(username=appstruct['username']).count() > 0:
raise colander.Invalid(node, 'Username already exist.!!')
Схема:
class UserSchema(CSRFSchema):
username = colander.SchemaNode(colander.String(), description="Extension of the user")
name = colander.SchemaNode(colander.String(), description='Full name')
extension = colander.SchemaNode(colander.String(),description='Extension')
pin = colander.SchemaNode(colander.String(), description='PIN')
Вид:
@view_config(route_name='add_user', permission='admin', renderer='add_user.mako')
def add_user(self):
#Here you can provide validator method as a parameter. And you can validate any field you want.
schema = UserSchema(validator = user_DoesExist).bind(request=self.request)
form = deform.Form(schema, action=self.request.route_url('add_user'), buttons=('Add User','Cancel'))
Исправьте меня, если я ошибаюсь в своем сценарии.
Благодаря
Смежные вопросы
- 1. C# доступ ко всем узлам html
- 2. Непериодический путь ко всем узлам
- 3. Доступ ко всем узлам в элементе управления TreeView
- 4. Найти узел, который подключен ко всем узлам запуска
- 5. Доступ ко всем контроллерам директивы
- 6. CAEmitterCell доступ ко всем частицам
- 7. Доступ ко всем связанным значениям
- 8. Выберите доступ ко всем таблицам
- 9. Поиск совпадений со всех узлов ко всем узлам в Neo4j
- 10. Доступ ко всем функциям argmuments
- 11. Доступ ко всем записям HttpParams
- 12. Доступ ко всем локальным сетям
- 13. шаблон XSL матч шаблон применяется ко всем дочерним узлам
- 14. Как выбрать узел, ближайший ко всем другим узлам в графе?
- 15. Drupal 6 - Как отключить комментарии ко всем узлам/content_types?
- 16. Я хочу иметь действие ко всем узлам treeview
- 17. Как добавить данные ко всем листовым узлам карты clojure?
- 18. Найти узел по отношению ко всем узлам в коллекции
- 19. Robots.txt блокирует доступ ко всем https: // страницам
- 20. Как предоставить доступ для чтения/записи ко всем узлам с правилами Firebase?
- 21. Доступ ко всем подмодели из соотношения ActiveRecord
- 22. Доступ ко всем элементам в массиве
- 23. Предоставление уникальных идентификаторов всем узлам?
- 24. Доступ ко всем внешним URL-адресам
- 25. Доступ ко всем URL-адресам, с ответами?
- 26. Доступ ко всем DOM в Angularl2 RC
- 27. argparse: доступ ко всем файлам в подкаталоге
- 28. Где получить доступ ко всем «GameObjects»?
- 29. Доступ ко всем паролям в keychain iCloud
- 30. MySQL - Как получить доступ ко всем узлам уровня 2 в таблице
Это решение не работает, когда вы связываете MySchema к форме в целях т.е. deform.Form (MySchema(). Bind(), кнопки = ('Submit', 'Отменить'),. ...). Решение Тима Хоффмана работает и стоит щелкнуть, поскольку он предлагает просто передать параметр ключевого слова вместо переопределения метода. –