Как использовать WTForms в проверке Ajax?

Я привык использовать WTForms с помощью Flask-WTF в моем приложении с флягой. Выполнение проверки на стороне сервера тривиально. Но как я могу использовать эту проверку сервера, чтобы стать полевым уровнем, ajax, проверкой на стороне клиента? Таким образом, когда пользовательская вкладка переходит в другие поля ввода, мое приложение может напрямую проверять ее и выдавать предупреждение/информацию/ошибку проверки.

Я еще не нашел ресурс в Интернете

Ответы

Ответ 1

Возможное решение таково:

  • На стороне клиента вы прикрепляете обработчик к событию blur во всех элементах управления в форме.

  • Каждый раз, когда происходит размытие, вы запускаете функцию Javascript, которая собирает значения всех полей и затем отправляет их в качестве запроса POST ajax.

  • На сервере функция просмотра, обрабатывающая этот запрос POST ajax, создает экземпляр формы Flask-WTF, а затем проверяет ее. Любые ошибки, возникающие в результате проверки, собираются в словарь, который затем отправляется в ответ JSON обратно клиенту.

    Например, успешная проверка может вернуть следующий JSON:

    { 
        "errors": {}
    }
    

    Ответ, который включает ошибки, может быть:

    {
        "errors": { 
            "name": "This field is required",
            "age": "Enter a numeric value between 0 and 99"
        }
    }
    
  • Клиент получает этот ответ JSON и применяет необходимые изменения к DOM для выявления ошибок.

  • Если вы получите новое событие размытия перед предыдущим, вы, вероятно, захотите отменить ожидающий ajax POST и запустить новый с обновленными значениями полей. Вы должны иметь только один ожидающий запрос проверки, чтобы избежать условий гонки.

Ответ 2

Отличный вопрос. Это то, что мы делаем (flask backend, jquery frontend):

  • Использовать плагин jquery.forms для ajax-форм. Довольно прочный зрелый код. Недостаток, не может отправлять json закодированные данные, только form-urlencoded. Получает данные plain или json.
  • используйте wtfroms для проверки формы. Очень зрелая кодовая база.
  • пытался использовать wtforms-json для принятия json, очень проблемных.