我是英文,Python和Flask的全新版本,如果我写的是非常糟糕的事情,我很抱歉。
我有以下任务:当用户转到pfofile.html
时,页面会加载数据库中的值。
如果用户更改颜色,则启动JavaScript函数(调用onchange()
)。
我必须编写更改数据库中字段text_color_in_chat
的代码。
我以为我做得很好,但我有以下错误:jinja2.exceptions.UndefinedError: 't' is undefined
。
而且我不明白我如何能够通过" t"使用Flask从JavaScript到Python的变量,或者如何正确调用大括号{{}}
。
<script type="text/javascript" charset="utf-8">
function change_color(t) {
alert( {{ current_user.change_color_in_db(t.value) }} );
}
</script>
<div>
Check your color in chat:
<input type="color" value="{{ user.text_color_in_chat }}" onchange="change_color(this);">
</div>
以下是models.py
的一部分:
...
text_color_in_chat = db.Column(db.String(8), default='#000000')
...
def change_color_in_db(self, new_color):
# re.search(r'^#[0-9a-f]{6,6}$', "#000000"
self.text_color_in_chat = new_color
db.session.add(self)
return True
...
在我的Python函数中,我使用RegEx测试变量new_color
。如果不匹配则返回None
,否则返回该对象。并且,我不了解如何使用if
条件。
答案 0 :(得分:0)
让我们看看并理解客户端/服务器应用程序的工作方式:
来自用户的浏览器:
在服务器上:
在用户的浏览器上:
...循环完成。
来自用户的浏览器:
您想要的是一种注册用户对数据库的更改的方法。
为此,您可以使用经典HTML表单或Ajax请求。由于您使用的是JavaScript,因此Ajax请求是最好的方法。例如,您可以使用jQuery.post
来执行此操作:
这是草稿:
<script type="text/javascript" charset="utf-8">
function change_color(t) {
var url = "/route/to/change_color";
var data = {color: $('#chat-color').val()};
$.post(url, data);
}
</script>
此代码获取{em> id 为input
的{{1}}字段的值,并将其发布到网址&#34; / route / to / change_color&#34;
当然,您需要像这样更改HTML表单,以添加#chat-color
ID :
#chat-color
在服务器上:
您需要为路线定义一个功能&#34; / route / to / change_color&#34;。
该功能可以是:
<div>
Check your color in chat:
<input id="chat-color" type="color" value="{{ user.text_color_in_chat }}" onchange="change_color(this);">
</div>
这是一个使用全局变量而不是数据库的小解决方案(为了简单起见):
import re
from flask import request
@app.route('/route/to/change_color', methods=['POST'])
def change_color():
new_color = request.form['color']
if re.match(r'^#[0-9a-f]{6,6}$', new_color):
self.text_color_in_chat = new_color
db.session.add(self)
...
...