例如,如果我有这段代码:
<form action="{{ url_for('user.new_domain') }}" class="form" role="form" method="post" action="" autocomplete="off">
{{ form.csrf_token }}
<p>{{ form.name(placeholder="name", onkeyup="timing()") }}
<span class="error">
{% if form.name.errors %}
{% for error in form.name.errors %}
{{ error }}
{% endfor %}
{% endif %}
</span>
</p>
</form>
timing()
是javascript文件中的一个函数,我在代码中的<script>
标记内。我希望timing()
能够访问我的sqlite数据库信息,并检查用户输入表单的内容是否存在于我的数据库中。这甚至是正确的方法吗?通过javascript?我怎么能运行依赖于sqlite数据的javascript函数?任何帮助表示赞赏。谢谢!
答案 0 :(得分:1)
使用Ajax向您应用中的另一个route发送一个调用,该调用返回一个字符串(普通或JSON,哪个更有用)。然后,Ajax调用使用它的success
函数来解析该数据并根据需要对其进行操作。
所以,除了你的代码只由Flask呈现:
{% if form.name.errors %}
{% for error in form.name.errors %}
{{ error }}
{% endfor %}
{% endif %}
你需要通过JavaScript行事:
<script>
function timing() {
$.ajax({
method: "POST",
url: "some url",
data: {
key: "value"
},
success: function(data) {
// do something
}
});
}
</script>
并且你的应用程序中的代码会是这样的(基于你的结果来自另一个实际进行查询的Python文件的事实):
from that_other_file import the_querying_function
@app.route('/some_url', methods=['POST'])
def some_url():
return the_querying_function(request.POST['key'])
这使用HttpResponse.POST。将key
(在JS和Python中)替换为您要从表单中获取的任何内容。
答案 1 :(得分:0)
简短回答是肯定的,但在有限的浏览器上,请参阅链接了解详情。 http://html5doctor.com/introducing-web-sql-databases/
很长的回答是,使用你的后端来访问它们可能是明智的(可能通过API?)以下是Flask的一个例子(虽然我不确定你使用的是什么https://flask-restless.readthedocs.org/en/latest/)