如何使用Flask在客户端验证表单?

时间:2015-09-27 22:27:48

标签: ajax flask

我正在尝试编写一个简单的Flask API,使用POST读取字段nameemailphonemessage,验证它们,并返回true或false取决于在验证的输出上 - 到以下JS脚本。我怎么能这样做?

@app.route('/email' , methods = ['POST'])
def email():
    name = request.form["name"]
    phone = request.form["phone"]
    email = request.form["email"]
    message = request.form["message"]
    return json.dumps({'status' : 'OK' , 'name' : name , 'phone' : phone , 'email' : email , 'message' : message});

$(function() {

    $("input,textarea").jqBootstrapValidation({
        preventSubmit: true,
        submitError: function($form, event, errors) {
            // additional error messages or events
        },
        submitSuccess: function($form, event) {
            // event.preventDefault(); // prevent default submit behaviour
            // get values from FORM
            var name = $("input#name").val();
            var email = $("input#email").val();
            var phone = $("input#phone").val();
            var message = $("textarea#message").val();
            var firstName = name; // For Success/Failure Message
            // Check for white space in name for Success/Fail message
            if (firstName.indexOf(' ') >= 0) {
                firstName = name.split(' ').slice(0, -1).join(' ');
            }
            $.ajax({
                url: "/email",
                data: $('form').serialize(),
                type: "POST",
                cache: false,
                success: function() {
                    // Success message
                    $('#success').html("<div class='alert alert-success'>");
                    $('#success > .alert-success').html("<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>&times;")
                        .append("</button>");
                    $('#success > .alert-success')
                        .append("<strong>Your message has been sent. </strong>");
                    $('#success > .alert-success')
                        .append('</div>');

                    //clear all fields
                    $('#contactForm').trigger("reset");
                },
                error: function() {
                    // Fail message
                    $('#success').html("<div class='alert alert-danger'>");
                    $('#success > .alert-danger').html("<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>&times;")
                        .append("</button>");
                    $('#success > .alert-danger').append("<strong>Sorry " + firstName + ", it seems that my mail server is not responding. Please try again later!");
                    $('#success > .alert-danger').append('</div>');
                    //clear all fields
                    $('#contactForm').trigger("reset");
                },
            })
        },
        filter: function() {
            return $(this).is(":visible");
        },
    });

    $("a[data-toggle=\"tab\"]").click(function(e) {
        e.preventDefault();
        $(this).tab("show");
    });
});


/*When clicking on Full hide fail/success boxes */
$('#name').focus(function() {
    $('#success').html('');
});

1 个答案:

答案 0 :(得分:0)

客户端的验证数据通常是个坏主意。也许某种预验证是可以的,但无论如何,最终的决定应该在服务器端进行。

对于表单的服务器端验证,您可以检查WTForms库,其中包含一些预定义的验证器类。