Javascript - 向Flask发送Signature-Pad结果

时间:2017-03-29 20:59:37

标签: javascript flask signaturepad

我正在使用signature-pad JavaScript库让人们对文档进行数字签名(这仅用于测试,没有任何法律约束力等等)但是我很难将签名结果传回Flask /来自JS的Python。

以下代码是我的HTML表单,它完美地提交form.stu_name字段,甚至触发我的JS“提交”(意味着代码执行并打开一个新窗口显示签名)但我不是确定如何将JS结果提交回Flask - 请参阅第二个代码块示例了解更多信息。

<div class="container">
    {% from "_formhelper.html" import render_field %}
    <form id="upload-form" method="POST" action="/sixth_form/" enctype="multipart/form-data">
    <dl>
      {{render_field(form.stu_name)}}
        </dl>
        <p>Student Signature</p>
<div class="wrapper">
  <img src="{{ url_for('static', filename='images/grey.jpeg') }}" width=400 height=200 />
  <canvas id="signature-pad" class="signature-pad" width=400 height=200></canvas>
</div>
<div>
  <button id="clear" type="Button">Clear</button>
</div>
<br>
    <p><input id="finalsub" type="submit" value="Submit"></p>
    </form>
</div>

这是脚本本身,在运行时会打开一个新窗口,其签名结果显示为URI编码图像(该部分很好,我可以稍后在Python中解码),我需要帮助 - 而不是打开一个新窗口我想将图像提交回Flask,然后将其存储在一个变量中,这样我就可以将它附加到另一个图像上。我对JS不是很了解,所以非常欢迎任何建议!

<script>
var signaturePad = new SignaturePad(document.getElementById('signature-pad'), {
  backgroundColor: 'rgba(255, 255, 255, 0)',
  penColor: 'rgb(0, 0, 0)'
});
var saveButton = document.getElementById('finalsub');
var cancelButton = document.getElementById('clear');

saveButton.addEventListener('click', function (event) {
  var data = signaturePad.toDataURL('image/png');

// Send data to server instead...
  window.open(data);
});

cancelButton.addEventListener('click', function (event) {
  signaturePad.clear();
});
</script>

1 个答案:

答案 0 :(得分:1)

This answer似乎就是你要找的东西。这是使用jQuery。要在纯JavaScript中执行此操作,请查看this answer。然后,要访问该文件,您将使用flask.request.files

盲人(阅读:未经测试)的例子是:

$(function() {
    $('#upload-file-btn').click(function() {
        var data = signaturePad.toDataURL('image/png');
        $.ajax({
            type: 'POST',
            url: '/uploadUrl',
            data: data,
            contentType: false,
            cache: false,
            processData: false,
            async: false,
            success: function(data) {
                console.log('Success!');
            },
        });
    });
});
  

现在在您的烧瓶的端点视图功能中,您可以访问该文件   数据通过flask.request.files。

注意:正如我所说,这是未经测试的,我不知道是否ajax配置(例如使请求同步或将contentType设置为false)都是必要的。我的直觉就是像这样重写它:

未经测试

$(function() {
    $('#upload-file-btn').click(function() {
        var data = signaturePad.toDataURL('image/png');
        $.ajax({
            type: 'POST',
            url: '/uploadUrl',
            data: data,
            contentType: 'image/png'
        }).done(function(data) {
            console.log('Success!');
        }).fail(function(data) {
            console.log('Fail!');
        });
    });
});