Javascript - 将签名板结果发送到 Flask
Javascript - Sending Signature-Pad results to Flask
我正在使用 signature-pad JavaScript 库让人们对文档进行数字签名(这只是为了测试,没有任何法律约束力等),但我很难将签名结果传回Flask/Python 来自 JS。
下面的代码是我的 HTML 表单,它完美地提交了 form.stu_name
字段,甚至触发我的 JS 到 "submit"(意味着代码执行和一个新的 window 打开显示签名)但我不确定如何将 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>
这是脚本本身,当 运行 它打开一个新的 window,签名的结果显示为 URI 编码图像(那部分很好,我稍后可以在 Python),我需要什么帮助 - 我不想打开一个新的 window,而是想将图像提交回 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>
This answer seems to be what you're looking for. This is using jQuery
however. To do this in pure JavaScript look at 。然后要访问该文件,您将使用 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!');
},
});
});
});
Now in your flask's endpoint view function, you can access the file's
data via 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!');
});
});
});
我正在使用 signature-pad JavaScript 库让人们对文档进行数字签名(这只是为了测试,没有任何法律约束力等),但我很难将签名结果传回Flask/Python 来自 JS。
下面的代码是我的 HTML 表单,它完美地提交了 form.stu_name
字段,甚至触发我的 JS 到 "submit"(意味着代码执行和一个新的 window 打开显示签名)但我不确定如何将 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>
这是脚本本身,当 运行 它打开一个新的 window,签名的结果显示为 URI 编码图像(那部分很好,我稍后可以在 Python),我需要什么帮助 - 我不想打开一个新的 window,而是想将图像提交回 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>
This answer seems to be what you're looking for. This is using jQuery
however. To do this in pure JavaScript look at 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!');
},
});
});
});
Now in your flask's endpoint view function, you can access the file's data via 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!');
});
});
});