Flask onchange 事件还是需要 Javascript 框架?
Flask onchange event or need Javascript framework?
我曾经使用 VBA 和 _Change、_Click 等事件来构建 Microsoft Excel 应用程序...
我首先切换到 JavaScript 和框架,但我迷失了异步方面。
所以我转向 Python 和 Flask,我非常喜欢它。
但是当我做前端时,很难构建动态表单,因为我在本地找不到我的标签(JavaScript 中的 document.getElementsBy)和事件(onChange、onClick 和其他事件)我使用 VBA.
例如,昨天,我想根据用户在 TextField 中输入的值更新 SelectField 中的选项。
我无法仅使用 Flask 和 Python 来做到这一点,我需要添加一个标签和 JavaScript 片段:
<script>
//Get the controllers:
let train_number = document.getElementsByClassName('train-number');
let stops_list = document.getElementsByClassName('stops-list');
//Add a listener:
train_number[0].onkeyup = (e) => {
//Clear stops_list:
if (train_number[0].value == '') {
stops_list[0].options.length = 0;
}
//If alphanumeric character:
let charStr = String.fromCharCode(e.which || e.keyCode);
if (/[a-z0-9]/i.test(charStr)) {
//Clear stops_list:
stops_list[0].options.length = 0;
searched_train = train_number[0].value;
//Requests for stations:
fetch('/train/' + searched_train).then((response) => {
response.json().then((data) => {
for (var i = 0; i < data.length; i++) {
//Create new option element
var opt = document.createElement('option');
// create text node to add to option element (opt)
opt.appendChild( document.createTextNode(data[i]) );
//Set value property of opt
opt.value = data[i];
//Add opt to end of select box (sel)
stops_list[0].add(opt);
}
})
})
}
}
</script>
我的问题是:有没有办法只用 Flask 构建动态表单和视图,还是转移到另一个框架更好?如果换个框架比较好,你推荐哪个(简单、轻量、用户友好、快速学习,如果可能的话,同步)?
您非常需要 JavaScript。 (从技术上讲,除非您需要支持 Internet Explorer,否则现在 WebAssembly 也是一个选项,但我认为它与 Python 的配合还不是很好。)
建议不在 Stack Overflow 的范围内,但如果您想要一些声称不那么复杂的东西,一个可能的框架选项是 Vue。
要了解浏览器中可用的基于事件的 JavaScript 功能,请查看 MDN's Events Overview page 的文档部分。
在我有限的理解中,Node.js 是一种后端(即服务器端)技术,而 Express 是一个框架,可以与其一起使用以帮助进行路由等操作(参见:https://developer.mozilla.org/en-US/docs/Learn/Server-side/Express_Nodejs). If you want to make a single-page application that handles routing on the front end (ie client side), that's where something like Vue, React, or Angular might come in (Eg, see: https://www.educative.io/blog/react-angular-vue-comparison.)
我曾经使用 VBA 和 _Change、_Click 等事件来构建 Microsoft Excel 应用程序... 我首先切换到 JavaScript 和框架,但我迷失了异步方面。 所以我转向 Python 和 Flask,我非常喜欢它。 但是当我做前端时,很难构建动态表单,因为我在本地找不到我的标签(JavaScript 中的 document.getElementsBy)和事件(onChange、onClick 和其他事件)我使用 VBA.
例如,昨天,我想根据用户在 TextField 中输入的值更新 SelectField 中的选项。 我无法仅使用 Flask 和 Python 来做到这一点,我需要添加一个标签和 JavaScript 片段:
<script>
//Get the controllers:
let train_number = document.getElementsByClassName('train-number');
let stops_list = document.getElementsByClassName('stops-list');
//Add a listener:
train_number[0].onkeyup = (e) => {
//Clear stops_list:
if (train_number[0].value == '') {
stops_list[0].options.length = 0;
}
//If alphanumeric character:
let charStr = String.fromCharCode(e.which || e.keyCode);
if (/[a-z0-9]/i.test(charStr)) {
//Clear stops_list:
stops_list[0].options.length = 0;
searched_train = train_number[0].value;
//Requests for stations:
fetch('/train/' + searched_train).then((response) => {
response.json().then((data) => {
for (var i = 0; i < data.length; i++) {
//Create new option element
var opt = document.createElement('option');
// create text node to add to option element (opt)
opt.appendChild( document.createTextNode(data[i]) );
//Set value property of opt
opt.value = data[i];
//Add opt to end of select box (sel)
stops_list[0].add(opt);
}
})
})
}
}
</script>
我的问题是:有没有办法只用 Flask 构建动态表单和视图,还是转移到另一个框架更好?如果换个框架比较好,你推荐哪个(简单、轻量、用户友好、快速学习,如果可能的话,同步)?
您非常需要 JavaScript。 (从技术上讲,除非您需要支持 Internet Explorer,否则现在 WebAssembly 也是一个选项,但我认为它与 Python 的配合还不是很好。)
建议不在 Stack Overflow 的范围内,但如果您想要一些声称不那么复杂的东西,一个可能的框架选项是 Vue。
要了解浏览器中可用的基于事件的 JavaScript 功能,请查看 MDN's Events Overview page 的文档部分。
在我有限的理解中,Node.js 是一种后端(即服务器端)技术,而 Express 是一个框架,可以与其一起使用以帮助进行路由等操作(参见:https://developer.mozilla.org/en-US/docs/Learn/Server-side/Express_Nodejs). If you want to make a single-page application that handles routing on the front end (ie client side), that's where something like Vue, React, or Angular might come in (Eg, see: https://www.educative.io/blog/react-angular-vue-comparison.)