WedX - журнал о программировании и компьютерных науках

Flask — проверка нескольких форм по запросу Ajax

Я пытаюсь проверить четыре формы из запроса Ajax. Моя проблема в том, что проверяется только одна форма (geometry_building_form). Остальные не содержат ошибок, только пустой словарь.

Еще одна проблема, которая у меня есть, заключается в том, что метод validate_on_submit не работает, я должен использовать метод validate.

Это представление Flask.

@app.route('/', methods=['GET', 'POST'])
@app.route('/index', methods=['GET', 'POST'])
def building():
    building_parameters_form = BuildingParametersForm()
    building_geometry_form = BuildingGeometryForm()
    wind_form = WindForm()
    topography_form = TopographyForm()
    if request.method == 'POST':
        if building_geometry_form.validate() and building_parameters_form.validate() and wind_form.validate() and topography_form.validate():
            return redirect('/index')
        else:
            return jsonify(data=wind_form.errors) #Testing the wind form
    return render_template('wind/building.html', bp_form=building_parameters_form,
                            bg_form=building_geometry_form, w_form=wind_form, t_form=topography_form)

Это код Ajax.

    <script>$(document).ready(function() {
        $("#button").click(function(event) {
            var csrf_token = "{{ csrf_token() }}";
            var url = "{{ url_for('building') }}";
            event.preventDefault();
            $.ajax({
                type: "POST",
                url: url,
                dataType: 'json',
                data: $('#geometry-form, #parameters-form, #wind-form, #topography-form').serialize(),
                success: function (data) {
                    console.log(data)
                }
        });
        $.ajaxSetup({
            beforeSend: function(xhr, settings) {
                if (!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(settings.type) && !this.crossDomain) {
                    xhr.setRequestHeader("X-CSRFToken", csrf_token)
                }
            }
        })
    });
});
</script>
14.02.2018

Ответы:


1

FormFields полезны для редактирования дочерних объектов или включения нескольких связанных форм на странице, которые отправляются и проверяются вместе. В то время как формы подклассов охватывают наиболее желаемое поведение, иногда для повторного использования или для объединения с FieldList, FormField имеет смысл. (Взято из документации)

Имея это в виду, вы можете создать форму-оболочку, которая включает в себя ваши подчиненные формы:

from wtforms import FormField

class BuildingForm(Form):
    building = FormField(BuildingGeometryForm)
    wind = FormField(WindForm)
    topography = FormField(TopographyForm)

Чем позже, когда вы обрабатываете запрос, form = BuildingForm() позволит вам выполнить form.validate_on_sumbit(), и он проверит и приложит различные подчиненные формы, как и ожидалось.

14.02.2018
  • Звучит многообещающе. Рендеринг в Jinja — это тот же процесс? 15.02.2018
  • В значительной степени, но поскольку они являются подчиненными формами (давайте представим, что description находится на WindForm), вы доберетесь до этого элемента формы, выполнив {{ form.wind.description }}, так что они действительно вложены, а не просто объединены. 15.02.2018
  • Я попробую. Если это сработает, я приму ответ. Спасибо! 15.02.2018
  • Работает отлично. Я даже могу получить доступ ко всем ошибкам вместе или отфильтровать их по полю (форме). 15.02.2018
  • Новые материалы

    Как создать диаграмму градиентной кисти с помощью D3.js
    Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


    Для любых предложений по сайту: [email protected]