Какой из них является правильным подходом для проверки формы? Проверка схемы Дуршлага или проверка формы Деформации?

Я только начал использовать Pyramid для одного из моих проектов, и мне нужно для проверки ввода в поле формы, взяв это значение поля формы и выполнив вызов веб-службы, чтобы подтвердить правильность значения. Например, есть поле под названием CUSTOMER-ID вашего банка. Мне нужно взять это (отдельно) в качестве входных данных и проверить на уровне сервера, выполнив вызов веб-службы (например, http://someotherdomain/validate_customer_id/?customer_id=<input_value>), скажем.

Я использую Colander для управления схемой форм и Deform для всей логики проверки формы. Я не понимаю, где мне нужно разместить мою логику проверки для случая CUSTOMER-ID. Это в MySchema().bind(customer_id=<input_value>) (у которого есть отложенный валидатор, который запрашивает веб-службу) или что-то в form.validate(request.POST.items())? Если я выберу путь отложенного валидатора, то MySchema().bind вызовет colander.Invalid ошибку из-за неправильного CUSTOMER-ID. Это нормально. Но эта ошибка не на уровне формы, а на уровне схемы. Так как же мне разумно сообщить об этом пользователю?

У меня хороший опыт работы с формами Django, поэтому я ожидал чего-то вроде метода clean. Ошибка формы, такая как form['customer_id'].error - это то, что я ожидаю на уровне шаблона. Возможно ли это с деформацией пирамиды или с дуршлагом?


person None-da    schedule 07.01.2014    source источник


Ответы (2)


Поэтому я думаю, что большая проблема, с которой вы столкнулись, заключается в понимании разделения задач Colander и Deform. Дуршлаг — это то, что люди любят называть общей библиотекой проверки схемы. Это означает, что мы определяем схему, в которой каждый узел имеет определенный тип данных, а некоторые узлы могут быть обязательными/необязательными. Затем дуршлаг может проверить эту схему и сообщить нам, соответствуют ли данные, которые мы передали дуршлагу, этой схеме. Например, в своих веб-приложениях я часто создаю API, которые принимают параметры GET/POST, которые необходимо проверить. Итак, в Pyramid, скажем, у меня есть такой сценарий:

request.POST = {
    'post_id': 1,
    'author_id': 1,
    'unnecessary_attr': 'stuff'
}

Затем я могу проверить это так:

# schema
schema = SchemaNode(Mapping(),
                    SchemaNode(Integer(), name='post_id'),
                    SchemaNode(Integer(), name='author_id'))
schema.deserialize(request.POST)

И это приведет к ошибке, если не сможет привести данные в соответствие с указанной схемой. Как видите, дуршлаг можно использовать для проверки ЛЮБОГО набора данных, будь то данные POST/GET/JSON. Deform, с другой стороны, представляет собой библиотеку форм и помогает вам создавать/проверять формы. Он использует дуршлаг для всех нужд проверки и, как видите, довольно много просто полностью делегирует проверку дуршлагу. Итак, чтобы ответить на ваш вопрос, вы должны делать все свои проверки в дуршлаге, а деформация в основном будет обрабатывать рендеринг ваших форм.

person JayD3e    schedule 07.01.2014
comment
Спасибо. Теперь все ясно. Но если проверка схемы не удалась, как я могу сообщить об этом, как об ошибке формы? Например, сообщить пользователю, что введен неверный CUSTOMER_ID? Потому что они находятся на двух разных уровнях. - person None-da; 07.01.2014
comment
@None-da в экосистеме дуршлага сообщение, которое вы хотите изменить, определяется на уровне валидатора, то есть github.com/Pylons/colander/blob/master/colander/. Некоторые из них принимают "сообщение" kwarg, когда вы создаете их экземпляры, некоторые - нет. - person JayD3e; 10.01.2014

Чтобы увидеть яркий пример приложения-пирамиды и деформации в действии, посмотрите todopyramid как часть IndyPy Python Web Shootout. Приложение todo было реализовано в пирамиде, джанго, колбе и бутылке. Я изучил пример пирамиды — он хорошо написан, показывает проверку схемы деформации и использует начальную загрузку для отображения сообщений проверки.

Дополнительные учебные пособия по пирамидам можно найти здесь:

person Sascha Gottfried    schedule 07.01.2014